Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
iv::mimics::elements::Tank Class Referencefinal

#include <Tank.hpp>

Inheritance diagram for iv::mimics::elements::Tank:
[legend]
Collaboration diagram for iv::mimics::elements::Tank:
[legend]

Classes

struct  ColorsState
 
struct  DefaultValues
 
struct  Keys
 
struct  Sections
 

Public Member Functions

 Tank ()
 
 ~Tank () override=default
 
bool load (const iv::file::xml::node &nodeTank) override
 
bool save (iv::file::xml::node &nodeTank) const override
 
void getChannels (const std::shared_ptr< std::vector< std::weak_ptr< iv::channels::AbstractChannel > > > &channelsInControl) const override
 Añade los canales que el MimicElement tiene enlazado.
 
void mapChannels (const std::function< void(std::weak_ptr< iv::channels::AbstractChannel > &)> &mapFunction) override
 Processed gets ///.
 
std::shared_ptr< iv::mimics::AbstractMimicElementclone () const override
 
std::optional< iv::types::colorgetColorWorkingState () const override
 Retrieves the color representing the current working state of the element.
 
std::optional< std::string > getStringWorkingState () const override
 
std::optional< iv::mimics::eAlarmStategetAlarmState () const override
 
void executeCommand (const std::string &strAction) const override
 Run actions ///.
 
void drawSpecific (IGraphics *graphics, std::optional< iv::types::color > colorWorkingState, std::optional< iv::types::color > colorControlState, iv::eLanguage drawingLanguage) override
 Draws the specific abstract element shape.
 
AbstractComponentGUIpanelEditControl () override
 UI methods ///.
 
void addOptionsMenu (const std::shared_ptr< iv::mimics::MimicControlMenu > &menu) override
 
const iv::mimics::TitleSettingsgetTitleSettings () const
 
std::weak_ptr< iv::mimics::OnlineVariablesgetOnlineVariables () const
 
virtual void updateEnabledLanguages (const std::set< iv::eLanguage > &enabledLanguages)
 
bool isPointInMimic (iv::types::coord x, iv::types::coord y) const
 
virtual std::optional< iv::types::colorgetColorControlState () const
 Retrieves the color representing the current control state of the element.
 
virtual std::optional< std::string > getStringControlState () const
 
virtual iv::math::geometry::Point2d getAlarmIconPosition (const iv::math::geometry::Area &elementSize) const
 
virtual bool canShowCircularMenu () const
 Behaviours gets ///.
 
virtual bool hasAlternativeAction () const
 
virtual void runCommandControlWithoutMenu ()
 Ejecuta un comando accionado sin el menu de opciones (caso de un botón)
 
virtual void runAlternativeAction (CDialog *dlgFatherRef)
 Ejecuta código específico del control.
 
virtual void runEvaluation ()
 Ejecuta la evaluación del control.
 
virtual void postProcess ()
 PROCESSES.
 
void draw (IGraphics *graphics, iv::eLanguage drawingLanguage, const std::optional< std::unordered_set< iv::types::channelId > > &channelsRepeatedOpt=std::nullopt, const std::optional< std::set< std::shared_ptr< AbstractMimicElement > > > &otherMimicElements=std::nullopt)
 DRAWS.
 
void setRedrawFlag (bool reDrawFlag=true)
 
void removeGraphicsObjects (IGraphics *graphics)
 Elimina el elemento gráfico.
 
virtual void move (double dx, double dy)
 MOVEMENTS.
 
bool rotate (double angle)
 
void handleEvent (CEventMotion *evtMotion)
 

Public Attributes

eZDepth m_depth
 
iv::mimics::eMimicElementType m_mimicElementType
 
iv::mimics::Location m_location
 
iv::types::width m_width
 
iv::types::height m_height
 
iv::mimics::TitleSettings m_titleSettings
 
iv::mimics::Background m_background
 
std::shared_ptr< OnlineVariablesm_onlineVariables
 
std::shared_ptr< std::vector< std::weak_ptr< iv::channels::AbstractChannel > > > m_addedAlarms
 

Protected Member Functions

std::vector< iv::math::geometry::Point2dcalculateLimits (IGraphics *graphics, iv::eLanguage drawingLanguage)
 
virtual bool checkIntegrity () const
 
virtual bool hasRepeatedChannels (const std::unordered_set< iv::types::channelId > &channelsRepeatedOpt) const
 Checks if the current mimic element contains any repeated channels.
 
virtual bool isRepeatedMimicElement (const std::set< std::shared_ptr< AbstractMimicElement > > &otherMimicsElements) const
 Determines whether the current mimic element shares significant similarities with others.
 
AbstractComponentGUIbuttonEditTitle ()
 
AbstractComponentGUIpanelEditSize ()
 
AbstractComponentGUIpanelEditOnlineVariables () const
 
AbstractComponentGUIpanelEditAddedAlarms () const
 

Protected Attributes

bool m_redrawFlag {false}
 

Private Types

enum class  eInfoLocation { Top , Bottom , Left , Right }
 

Private Member Functions

 Tank (const Tank &other)
 
void drawLevelBar (iv::types::channelValue value, const iv::channels::AnalogAlarmLimits &levelLimits, std::optional< iv::types::color > colorState, IGraphics *graphics, double sizeXFrame, double sizeYFrame, double sizeY) const
 
void drawLevelLimits (const iv::channels::AnalogAlarmLimits &levelLimits, IGraphics *graphics, double sizeX, double sizeY) const
 
void drawLevelScale (const iv::channels::AnalogAlarmLimits &levelLimits, IGraphics *graphics, std::optional< iv::types::color > colorState, uint8_t numDecimals, double sizeX, double sizeY) const
 
void drawTankInfo (bool hasValue, iv::types::channelValue tankVolumeValue, uint8_t numDecimals, std::optional< iv::types::color > colorState, IGraphics *graphics) const
 
std::unique_ptr< CDrawTextprvCreateTextTitle (iv::eLanguage language) const
 
void applyPosition (IGraphics *graphics) const
 
void applyRotation (IGraphics *graphics) const
 
std::optional< iv::mimics::eAlarmStategetAddedAlarmsMimicAlarmState () const
 

Static Private Member Functions

static bool checkHasRepeated (const std::unordered_set< iv::types::channelId > &repeatedChannels, const std::shared_ptr< std::vector< std::weak_ptr< iv::channels::AbstractChannel > > > &elementChannels)
 

Private Attributes

std::weak_ptr< iv::tanks::Tankm_tank
 
iv::mimics::elements::Tank::eInfoLocation m_locationInfo
 
bool m_showVolume
 
bool m_showVolumeInPercent
 
bool m_showVolumeInMetersCubics
 
bool m_showVolumeInLitres
 
bool m_showWeight
 
bool m_showSounding
 
iv::types::height m_textInfoHeight
 
iv::types::padding m_textInfoPadding
 
iv::types::color m_backgroundColor
 
iv::types::color m_contentColor
 
iv::mimics::support::Scale m_scale
 
bool m_showAlarmLimits
 
iv::mimics::elements::eMarkType m_markType
 
std::unique_ptr< CRectangleGraphicsm_containerGraphic {nullptr}
 
std::unique_ptr< CRectangleGraphicsm_contentGraphic {nullptr}
 
std::unique_ptr< CDiagramm_scaleGraphic {nullptr}
 
std::unique_ptr< CDrawTextm_textTitleOpt
 
std::shared_ptr< std::vector< iv::math::geometry::Point2d > > m_polylinesLimits
 
uint32_t m_idBlockBackground
 
uint32_t m_idBlockForegorund
 
bool m_isCreatedForeground {false}
 
bool m_isCreatedBackground {false}
 
bool m_isMarked {false}
 

Static Private Attributes

static constexpr double kPrvRelationXY {6.8}
 

Member Enumeration Documentation

◆ eInfoLocation

Enumerator
Top 
Bottom 
Left 
Right 

Constructor & Destructor Documentation

◆ Tank() [1/2]

iv::mimics::elements::Tank::Tank ( )

◆ ~Tank()

iv::mimics::elements::Tank::~Tank ( )
overridedefault

◆ Tank() [2/2]

iv::mimics::elements::Tank::Tank ( const Tank & other)
private

Member Function Documentation

◆ addOptionsMenu()

void iv::mimics::elements::Tank::addOptionsMenu ( const std::shared_ptr< iv::mimics::MimicControlMenu > & menu)
overridevirtual

Reimplemented from iv::mimics::AbstractMimicElement.

◆ applyPosition()

void iv::mimics::AbstractMimicElement::applyPosition ( IGraphics * graphics) const
privateinherited

◆ applyRotation()

void iv::mimics::AbstractMimicElement::applyRotation ( IGraphics * graphics) const
privateinherited

◆ buttonEditTitle()

AbstractComponentGUI * iv::mimics::AbstractMimicElement::buttonEditTitle ( )
protectedinherited

◆ calculateLimits()

std::vector< iv::math::geometry::Point2d > iv::mimics::AbstractMimicElement::calculateLimits ( IGraphics * graphics,
iv::eLanguage drawingLanguage )
protectedinherited

◆ canShowCircularMenu()

◆ checkHasRepeated()

bool iv::mimics::AbstractMimicElement::checkHasRepeated ( const std::unordered_set< iv::types::channelId > & repeatedChannels,
const std::shared_ptr< std::vector< std::weak_ptr< iv::channels::AbstractChannel > > > & elementChannels )
staticprivateinherited

◆ checkIntegrity()

◆ clone()

std::shared_ptr< iv::mimics::AbstractMimicElement > iv::mimics::elements::Tank::clone ( ) const
nodiscardoverridevirtual

◆ draw()

void iv::mimics::AbstractMimicElement::draw ( IGraphics * graphics,
iv::eLanguage drawingLanguage,
const std::optional< std::unordered_set< iv::types::channelId > > & channelsRepeatedOpt = std::nullopt,
const std::optional< std::set< std::shared_ptr< AbstractMimicElement > > > & otherMimicElements = std::nullopt )
inherited

DRAWS.

Dibuja el elemento en pantalla, con título, background, alarma, toda la parte común de todos los elementos.

Parameters
graphics
drawingLanguageLanguage to draw the element
channelsRepeatedOpt

◆ drawLevelBar()

void iv::mimics::elements::Tank::drawLevelBar ( iv::types::channelValue value,
const iv::channels::AnalogAlarmLimits & levelLimits,
std::optional< iv::types::color > colorState,
IGraphics * graphics,
double sizeXFrame,
double sizeYFrame,
double sizeY ) const
private

◆ drawLevelLimits()

void iv::mimics::elements::Tank::drawLevelLimits ( const iv::channels::AnalogAlarmLimits & levelLimits,
IGraphics * graphics,
double sizeX,
double sizeY ) const
private

◆ drawLevelScale()

void iv::mimics::elements::Tank::drawLevelScale ( const iv::channels::AnalogAlarmLimits & levelLimits,
IGraphics * graphics,
std::optional< iv::types::color > colorState,
uint8_t numDecimals,
double sizeX,
double sizeY ) const
private

◆ drawSpecific()

void iv::mimics::elements::Tank::drawSpecific ( IGraphics * graphics,
std::optional< iv::types::color > colorWorkingState,
std::optional< iv::types::color > colorControlState,
iv::eLanguage drawingLanguage )
overridevirtual

Draws the specific abstract element shape.

Parameters
graphics
colorWorkingState
colorControlState
drawingLanguage

Implements iv::mimics::AbstractMimicElement.

◆ drawTankInfo()

void iv::mimics::elements::Tank::drawTankInfo ( bool hasValue,
iv::types::channelValue tankVolumeValue,
uint8_t numDecimals,
std::optional< iv::types::color > colorState,
IGraphics * graphics ) const
private

◆ executeCommand()

void iv::mimics::elements::Tank::executeCommand ( const std::string & strAction) const
overridevirtual

Run actions ///.

Ejecuta un comando accionado desde el menu de opciones

Parameters
strAction

Implements iv::mimics::AbstractMimicElement.

◆ getAddedAlarmsMimicAlarmState()

std::optional< iv::mimics::eAlarmState > iv::mimics::AbstractMimicElement::getAddedAlarmsMimicAlarmState ( ) const
nodiscardprivateinherited

◆ getAlarmIconPosition()

iv::math::geometry::Point2d iv::mimics::AbstractMimicElement::getAlarmIconPosition ( const iv::math::geometry::Area & elementSize) const
nodiscardvirtualinherited

◆ getAlarmState()

std::optional< iv::mimics::eAlarmState > iv::mimics::elements::Tank::getAlarmState ( ) const
nodiscardoverridevirtual

Reimplemented from iv::mimics::AbstractMimicElement.

◆ getChannels()

void iv::mimics::elements::Tank::getChannels ( const std::shared_ptr< std::vector< std::weak_ptr< iv::channels::AbstractChannel > > > & channelsInControl) const
overridevirtual

Añade los canales que el MimicElement tiene enlazado.

Parameters
[out]channelsInControlMap of channels in mimic element
Deprecated
This function may be substituted by mapChannels

Reimplemented from iv::mimics::AbstractMimicElement.

◆ getColorControlState()

std::optional< iv::types::color > iv::mimics::AbstractMimicElement::getColorControlState ( ) const
nodiscardvirtualinherited

Retrieves the color representing the current control state of the element.

The control state describes how the element is being controlled, with examples including Remote/Local or Online/Offline. The returned color, if any, is intended to visually convey the control mode.

Returns
An optional color representing the control state. Returns std::nullopt the element has no control state.

Reimplemented in iv::mimics::elements::Compressor, iv::mimics::elements::Damper, iv::mimics::elements::Fan, iv::mimics::elements::Generator, and iv::mimics::elements::Pump.

◆ getColorWorkingState()

std::optional< iv::types::color > iv::mimics::elements::Tank::getColorWorkingState ( ) const
nodiscardoverridevirtual

Retrieves the color representing the current working state of the element.

The working state reflects the functional status of the element, which can represent states such as Running/Stopped, Open/Closed, or Undefined. The returned color, if any, is intended to visually indicate this status.

Returns
An optional color representing the working state. Returns std::nullopt if no color is the element has no working state.

Reimplemented from iv::mimics::AbstractMimicElement.

◆ getOnlineVariables()

std::weak_ptr< iv::mimics::OnlineVariables > iv::mimics::AbstractMimicElement::getOnlineVariables ( ) const
nodiscardinherited

◆ getStringControlState()

std::optional< std::string > iv::mimics::AbstractMimicElement::getStringControlState ( ) const
nodiscardvirtualinherited

◆ getStringWorkingState()

std::optional< std::string > iv::mimics::elements::Tank::getStringWorkingState ( ) const
nodiscardoverridevirtual

Reimplemented from iv::mimics::AbstractMimicElement.

◆ getTitleSettings()

const iv::mimics::TitleSettings & iv::mimics::AbstractMimicElement::getTitleSettings ( ) const
inlinenodiscardinherited

◆ handleEvent()

void iv::mimics::AbstractMimicElement::handleEvent ( CEventMotion * evtMotion)
inherited

TODO: No se usa, y junto a este, el executeCommand

◆ hasAlternativeAction()

◆ hasRepeatedChannels()

bool iv::mimics::AbstractMimicElement::hasRepeatedChannels ( const std::unordered_set< iv::types::channelId > & channelsRepeatedOpt) const
protectedvirtualinherited

Checks if the current mimic element contains any repeated channels.

Parameters
channelsRepeatedOptA set of channel IDs that are considered as repeated.
Returns
True if at least one channel of the mimic element is found in channelsRepeatedOpt, false otherwise.

Reimplemented in iv::mimics::elements::DynamicText, iv::mimics::elementsAutomated::DamperAutomated, iv::mimics::elementsAutomated::ValveAutomated, iv::mimics::elementsPms::BreakerPms, and iv::mimics::elementsPms::GeneratorPms.

◆ isPointInMimic()

bool iv::mimics::AbstractMimicElement::isPointInMimic ( iv::types::coord x,
iv::types::coord y ) const
nodiscardinherited

◆ isRepeatedMimicElement()

bool iv::mimics::AbstractMimicElement::isRepeatedMimicElement ( const std::set< std::shared_ptr< AbstractMimicElement > > & otherMimicsElements) const
protectedvirtualinherited

Determines whether the current mimic element shares significant similarities with others.

Parameters
otherMimicsElementsA set of other mimics elements to be compared against.
Returns
True if the element is repeated, false otherwise.

Reimplemented in iv::mimics::elements::DynamicText, iv::mimics::elementsAutomated::DamperAutomated, iv::mimics::elementsAutomated::ValveAutomated, iv::mimics::elementsPms::BreakerPms, and iv::mimics::elementsPms::GeneratorPms.

◆ load()

bool iv::mimics::elements::Tank::load ( const iv::file::xml::node & nodeTank)
overridevirtual

Reimplemented from iv::mimics::AbstractMimicElement.

◆ mapChannels()

void iv::mimics::elements::Tank::mapChannels ( const std::function< void(std::weak_ptr< iv::channels::AbstractChannel > &)> & mapFunction)
overridevirtual

Processed gets ///.

Applies a function over each channel in the mimic element

Parameters
mapFunctionFunction to apply over each channel

Reimplemented from iv::mimics::AbstractMimicElement.

◆ move()

void iv::mimics::AbstractMimicElement::move ( double dx,
double dy )
virtualinherited

◆ panelEditAddedAlarms()

AbstractComponentGUI * iv::mimics::AbstractMimicElement::panelEditAddedAlarms ( ) const
nodiscardprotectedinherited

◆ panelEditControl()

AbstractComponentGUI * iv::mimics::elements::Tank::panelEditControl ( )
overridevirtual

UI methods ///.

PANELS

Crea el panel de edición del control.

Returns
Panel de edición del control.

Implements iv::mimics::AbstractMimicElement.

◆ panelEditOnlineVariables()

AbstractComponentGUI * iv::mimics::AbstractMimicElement::panelEditOnlineVariables ( ) const
nodiscardprotectedinherited

◆ panelEditSize()

AbstractComponentGUI * iv::mimics::AbstractMimicElement::panelEditSize ( )
protectedinherited

◆ postProcess()

void iv::mimics::AbstractMimicElement::postProcess ( )
virtualinherited

PROCESSES.

Procesa ciertos atributos del elemento.

Note
La intención es que se procese tras el panel de edición y que prepare el elemento para ser dibujado.

Reimplemented in iv::mimics::auxiliary::Line, and iv::mimics::auxiliary::Square.

◆ prvCreateTextTitle()

std::unique_ptr< CDrawText > iv::mimics::AbstractMimicElement::prvCreateTextTitle ( iv::eLanguage language) const
nodiscardprivateinherited

◆ removeGraphicsObjects()

void iv::mimics::AbstractMimicElement::removeGraphicsObjects ( IGraphics * graphics)
inherited

Elimina el elemento gráfico.

Parameters
graphics

◆ rotate()

bool iv::mimics::AbstractMimicElement::rotate ( double angle)
inherited

◆ runAlternativeAction()

void iv::mimics::AbstractMimicElement::runAlternativeAction ( CDialog * dlgFatherRef)
virtualinherited

Ejecuta código específico del control.

Note
El objetivo es que este comportamiento sea específico de cada control y se ejecute al pulsar sobre el control si este no puede mostrar menú circular.

Reimplemented in iv::mimics::auxiliary::Link, iv::mimics::elements::PmsPriorities, iv::mimics::elementsAutomated::DamperAutomated, iv::mimics::elementsAutomated::ValveAutomated, iv::mimics::elementsPms::BreakerPms, iv::mimics::elementsPms::GeneratorPms, and iv::mimics::elementsPms::OperationModesPms.

◆ runCommandControlWithoutMenu()

void iv::mimics::AbstractMimicElement::runCommandControlWithoutMenu ( )
virtualinherited

Ejecuta un comando accionado sin el menu de opciones (caso de un botón)

◆ runEvaluation()

void iv::mimics::AbstractMimicElement::runEvaluation ( )
virtualinherited

Ejecuta la evaluación del control.

◆ save()

bool iv::mimics::elements::Tank::save ( iv::file::xml::node & nodeTank) const
overridevirtual

Reimplemented from iv::mimics::AbstractMimicElement.

◆ setRedrawFlag()

void iv::mimics::AbstractMimicElement::setRedrawFlag ( bool reDrawFlag = true)
inherited

◆ updateEnabledLanguages()

void iv::mimics::AbstractMimicElement::updateEnabledLanguages ( const std::set< iv::eLanguage > & enabledLanguages)
virtualinherited

Member Data Documentation

◆ kPrvRelationXY

double iv::mimics::elements::Tank::kPrvRelationXY {6.8}
staticconstexprprivate

◆ m_addedAlarms

std::shared_ptr<std::vector<std::weak_ptr<iv::channels::AbstractChannel> > > iv::mimics::AbstractMimicElement::m_addedAlarms
inherited

◆ m_background

iv::mimics::Background iv::mimics::AbstractMimicElement::m_background
inherited

◆ m_backgroundColor

iv::types::color iv::mimics::elements::Tank::m_backgroundColor
private

◆ m_containerGraphic

std::unique_ptr<CRectangleGraphics> iv::mimics::elements::Tank::m_containerGraphic {nullptr}
private

◆ m_contentColor

iv::types::color iv::mimics::elements::Tank::m_contentColor
private

◆ m_contentGraphic

std::unique_ptr<CRectangleGraphics> iv::mimics::elements::Tank::m_contentGraphic {nullptr}
private

◆ m_depth

eZDepth iv::mimics::AbstractMimicElement::m_depth
inherited

Model

◆ m_height

iv::types::height iv::mimics::AbstractMimicElement::m_height
inherited

◆ m_idBlockBackground

uint32_t iv::mimics::AbstractMimicElement::m_idBlockBackground
privateinherited

◆ m_idBlockForegorund

uint32_t iv::mimics::AbstractMimicElement::m_idBlockForegorund
privateinherited

◆ m_isCreatedBackground

bool iv::mimics::AbstractMimicElement::m_isCreatedBackground {false}
privateinherited

◆ m_isCreatedForeground

bool iv::mimics::AbstractMimicElement::m_isCreatedForeground {false}
privateinherited

◆ m_isMarked

bool iv::mimics::AbstractMimicElement::m_isMarked {false}
privateinherited

◆ m_location

iv::mimics::Location iv::mimics::AbstractMimicElement::m_location
inherited

◆ m_locationInfo

iv::mimics::elements::Tank::eInfoLocation iv::mimics::elements::Tank::m_locationInfo
private

◆ m_markType

iv::mimics::elements::eMarkType iv::mimics::elements::Tank::m_markType
private

◆ m_mimicElementType

iv::mimics::eMimicElementType iv::mimics::AbstractMimicElement::m_mimicElementType
inherited

◆ m_onlineVariables

std::shared_ptr<OnlineVariables> iv::mimics::AbstractMimicElement::m_onlineVariables
inherited

◆ m_polylinesLimits

std::shared_ptr<std::vector<iv::math::geometry::Point2d> > iv::mimics::AbstractMimicElement::m_polylinesLimits
privateinherited

◆ m_redrawFlag

bool iv::mimics::AbstractMimicElement::m_redrawFlag {false}
protectedinherited

Controller

◆ m_scale

iv::mimics::support::Scale iv::mimics::elements::Tank::m_scale
private

◆ m_scaleGraphic

std::unique_ptr<CDiagram> iv::mimics::elements::Tank::m_scaleGraphic {nullptr}
private

◆ m_showAlarmLimits

bool iv::mimics::elements::Tank::m_showAlarmLimits
private

◆ m_showSounding

bool iv::mimics::elements::Tank::m_showSounding
private

◆ m_showVolume

bool iv::mimics::elements::Tank::m_showVolume
private

◆ m_showVolumeInLitres

bool iv::mimics::elements::Tank::m_showVolumeInLitres
private

◆ m_showVolumeInMetersCubics

bool iv::mimics::elements::Tank::m_showVolumeInMetersCubics
private

◆ m_showVolumeInPercent

bool iv::mimics::elements::Tank::m_showVolumeInPercent
private

◆ m_showWeight

bool iv::mimics::elements::Tank::m_showWeight
private

◆ m_tank

std::weak_ptr<iv::tanks::Tank> iv::mimics::elements::Tank::m_tank
private

◆ m_textInfoHeight

iv::types::height iv::mimics::elements::Tank::m_textInfoHeight
private

◆ m_textInfoPadding

iv::types::padding iv::mimics::elements::Tank::m_textInfoPadding
private

◆ m_textTitleOpt

std::unique_ptr<CDrawText> iv::mimics::AbstractMimicElement::m_textTitleOpt
privateinherited

◆ m_titleSettings

iv::mimics::TitleSettings iv::mimics::AbstractMimicElement::m_titleSettings
inherited

◆ m_width

iv::types::width iv::mimics::AbstractMimicElement::m_width
inherited

The documentation for this class was generated from the following files: