mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-21 04:45:31 +08:00
refs #893, formatting
This commit is contained in:
committed by
Mathew Sutcliffe
parent
056d205488
commit
e90c65a33a
@@ -149,7 +149,7 @@ namespace BlackMisc
|
|||||||
CVariant CCallsign::propertyByIndex(const CPropertyIndex &index) const
|
CVariant CCallsign::propertyByIndex(const CPropertyIndex &index) const
|
||||||
{
|
{
|
||||||
if (index.isMyself()) { return CVariant::from(*this); }
|
if (index.isMyself()) { return CVariant::from(*this); }
|
||||||
ColumnIndex i = index.frontCasted<ColumnIndex>();
|
const ColumnIndex i = index.frontCasted<ColumnIndex>();
|
||||||
switch (i)
|
switch (i)
|
||||||
{
|
{
|
||||||
case IndexCallsignString:
|
case IndexCallsignString:
|
||||||
@@ -168,7 +168,7 @@ namespace BlackMisc
|
|||||||
void CCallsign::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant)
|
void CCallsign::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant)
|
||||||
{
|
{
|
||||||
if (index.isMyself()) { (*this) = variant.to<CCallsign>(); return; }
|
if (index.isMyself()) { (*this) = variant.to<CCallsign>(); return; }
|
||||||
ColumnIndex i = index.frontCasted<ColumnIndex>();
|
const ColumnIndex i = index.frontCasted<ColumnIndex>();
|
||||||
switch (i)
|
switch (i)
|
||||||
{
|
{
|
||||||
case IndexCallsignString:
|
case IndexCallsignString:
|
||||||
@@ -188,7 +188,7 @@ namespace BlackMisc
|
|||||||
int CCallsign::comparePropertyByIndex(const CPropertyIndex &index, const CCallsign &compareValue) const
|
int CCallsign::comparePropertyByIndex(const CPropertyIndex &index, const CCallsign &compareValue) const
|
||||||
{
|
{
|
||||||
if (index.isMyself()) { return this->m_callsign.compare(compareValue.m_callsign, Qt::CaseInsensitive); }
|
if (index.isMyself()) { return this->m_callsign.compare(compareValue.m_callsign, Qt::CaseInsensitive); }
|
||||||
ColumnIndex i = index.frontCasted<ColumnIndex>();
|
const ColumnIndex i = index.frontCasted<ColumnIndex>();
|
||||||
switch (i)
|
switch (i)
|
||||||
{
|
{
|
||||||
case IndexCallsignString:
|
case IndexCallsignString:
|
||||||
|
|||||||
@@ -119,18 +119,6 @@ namespace BlackMisc
|
|||||||
//! Equals callsign string?
|
//! Equals callsign string?
|
||||||
bool equalsString(const QString &callsignString) const;
|
bool equalsString(const QString &callsignString) const;
|
||||||
|
|
||||||
//! \copydoc BlackMisc::Mixin::Icon::toIcon()
|
|
||||||
BlackMisc::CIcon toIcon() const { return convertToIcon(*this); }
|
|
||||||
|
|
||||||
//! \copydoc BlackMisc::Mixin::Index::propertyByIndex
|
|
||||||
CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const;
|
|
||||||
|
|
||||||
//! \copydoc BlackMisc::Mixin::Index::setPropertyByIndex
|
|
||||||
void setPropertyByIndex(const BlackMisc::CPropertyIndex &index, const CVariant &variant);
|
|
||||||
|
|
||||||
//! Compare for index
|
|
||||||
int comparePropertyByIndex(const CPropertyIndex &index, const CCallsign &compareValue) const;
|
|
||||||
|
|
||||||
//! Valid callsign?
|
//! Valid callsign?
|
||||||
bool isValid() const;
|
bool isValid() const;
|
||||||
|
|
||||||
@@ -158,6 +146,18 @@ namespace BlackMisc
|
|||||||
//! Representing icon
|
//! Representing icon
|
||||||
static const CIcon &convertToIcon(const CCallsign &callsign);
|
static const CIcon &convertToIcon(const CCallsign &callsign);
|
||||||
|
|
||||||
|
//! \copydoc BlackMisc::Mixin::Icon::toIcon()
|
||||||
|
BlackMisc::CIcon toIcon() const { return convertToIcon(*this); }
|
||||||
|
|
||||||
|
//! \copydoc BlackMisc::Mixin::Index::propertyByIndex
|
||||||
|
CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const;
|
||||||
|
|
||||||
|
//! \copydoc BlackMisc::Mixin::Index::setPropertyByIndex
|
||||||
|
void setPropertyByIndex(const BlackMisc::CPropertyIndex &index, const CVariant &variant);
|
||||||
|
|
||||||
|
//! Compare for index
|
||||||
|
int comparePropertyByIndex(const CPropertyIndex &index, const CCallsign &compareValue) const;
|
||||||
|
|
||||||
//! \copydoc BlackMisc::Mixin::String::toQString()
|
//! \copydoc BlackMisc::Mixin::String::toQString()
|
||||||
QString convertToQString(bool i18n = false) const;
|
QString convertToQString(bool i18n = false) const;
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
namespace Aviation
|
namespace Aviation
|
||||||
{
|
{
|
||||||
|
|
||||||
void CComSystem::registerMetadata()
|
void CComSystem::registerMetadata()
|
||||||
{
|
{
|
||||||
Mixin::MetaType<CComSystem>::registerMetadata();
|
Mixin::MetaType<CComSystem>::registerMetadata();
|
||||||
@@ -68,6 +67,67 @@ namespace BlackMisc
|
|||||||
this->CModulator::setFrequencyStandby(fRounded);
|
this->CModulator::setFrequencyStandby(fRounded);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CComSystem::isActiveFrequencyWithin8_33kHzChannel(const CFrequency &comFrequency) const
|
||||||
|
{
|
||||||
|
return isWithinChannelSpacing(this->getFrequencyActive(), comFrequency, ChannelSpacing8_33KHz);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CComSystem::isActiveFrequencyWithin25kHzChannel(const CFrequency &comFrequency) const
|
||||||
|
{
|
||||||
|
return isWithinChannelSpacing(this->getFrequencyActive(), comFrequency, ChannelSpacing25KHz);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CComSystem::setActiveUnicom()
|
||||||
|
{
|
||||||
|
this->toggleActiveStandby();
|
||||||
|
this->setFrequencyActive(BlackMisc::PhysicalQuantities::CPhysicalQuantitiesConstants::FrequencyUnicom());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CComSystem::setActiveInternationalAirDistress()
|
||||||
|
{
|
||||||
|
this->toggleActiveStandby();
|
||||||
|
this->setFrequencyActive(BlackMisc::PhysicalQuantities::CPhysicalQuantitiesConstants::FrequencyInternationalAirDistress());
|
||||||
|
}
|
||||||
|
|
||||||
|
CComSystem CComSystem::getCom1System(double activeFrequencyMHz, double standbyFrequencyMHz)
|
||||||
|
{
|
||||||
|
return CComSystem(CModulator::NameCom1(), BlackMisc::PhysicalQuantities::CFrequency(activeFrequencyMHz, BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz()), BlackMisc::PhysicalQuantities::CFrequency(standbyFrequencyMHz < 0 ? activeFrequencyMHz : standbyFrequencyMHz, BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz()));
|
||||||
|
}
|
||||||
|
|
||||||
|
CComSystem CComSystem::getCom1System(CFrequency activeFrequency, CFrequency standbyFrequency)
|
||||||
|
{
|
||||||
|
return CComSystem(CModulator::NameCom1(), activeFrequency, standbyFrequency == CModulator::FrequencyNotSet() ? activeFrequency : standbyFrequency);
|
||||||
|
}
|
||||||
|
|
||||||
|
CComSystem CComSystem::getCom2System(double activeFrequencyMHz, double standbyFrequencyMHz)
|
||||||
|
{
|
||||||
|
return CComSystem(CModulator::NameCom2(), BlackMisc::PhysicalQuantities::CFrequency(activeFrequencyMHz, BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz()), BlackMisc::PhysicalQuantities::CFrequency(standbyFrequencyMHz < 0 ? activeFrequencyMHz : standbyFrequencyMHz, BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz()));
|
||||||
|
}
|
||||||
|
|
||||||
|
CComSystem CComSystem::getCom2System(CFrequency activeFrequency, CFrequency standbyFrequency)
|
||||||
|
{
|
||||||
|
return CComSystem(CModulator::NameCom2(), activeFrequency, standbyFrequency == CModulator::FrequencyNotSet() ? activeFrequency : standbyFrequency);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CComSystem::isValidCivilAviationFrequency(const CFrequency &f)
|
||||||
|
{
|
||||||
|
if (f.isNull()) return false;
|
||||||
|
double fr = f.valueRounded(BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz(), 3);
|
||||||
|
return fr >= 118.0 && fr <= 136.975;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CComSystem::isValidMilitaryFrequency(const CFrequency &f)
|
||||||
|
{
|
||||||
|
if (f.isNull()) return false;
|
||||||
|
double fr = f.valueRounded(BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz(), 3);
|
||||||
|
return fr >= 220.0 && fr <= 399.95;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CComSystem::isValidComFrequency(const CFrequency &f)
|
||||||
|
{
|
||||||
|
return isValidCivilAviationFrequency(f) || isValidMilitaryFrequency(f);
|
||||||
|
}
|
||||||
|
|
||||||
void CComSystem::roundToChannelSpacing(PhysicalQuantities::CFrequency &frequency, ChannelSpacing channelSpacing)
|
void CComSystem::roundToChannelSpacing(PhysicalQuantities::CFrequency &frequency, ChannelSpacing channelSpacing)
|
||||||
{
|
{
|
||||||
double channelSpacingKHz = CComSystem::channelSpacingToFrequencyKHz(channelSpacing);
|
double channelSpacingKHz = CComSystem::channelSpacingToFrequencyKHz(channelSpacing);
|
||||||
@@ -101,6 +161,5 @@ namespace BlackMisc
|
|||||||
default: qFatal("Wrong channel spacing"); return 0.0; // return just supressing compiler warning
|
default: qFatal("Wrong channel spacing"); return 0.0; // return just supressing compiler warning
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ namespace BlackMisc
|
|||||||
{
|
{
|
||||||
namespace Aviation
|
namespace Aviation
|
||||||
{
|
{
|
||||||
|
|
||||||
//! COM system (aka "radio")
|
//! COM system (aka "radio")
|
||||||
class BLACKMISC_EXPORT CComSystem :
|
class BLACKMISC_EXPORT CComSystem :
|
||||||
public CModulator<CComSystem>,
|
public CModulator<CComSystem>,
|
||||||
@@ -64,9 +63,6 @@ namespace BlackMisc
|
|||||||
Com2
|
Com2
|
||||||
};
|
};
|
||||||
|
|
||||||
//! \copydoc BlackMisc::CValueObject::registerMetadata
|
|
||||||
static void registerMetadata();
|
|
||||||
|
|
||||||
//! Default constructor
|
//! Default constructor
|
||||||
CComSystem() {}
|
CComSystem() {}
|
||||||
|
|
||||||
@@ -92,76 +88,37 @@ namespace BlackMisc
|
|||||||
virtual void setFrequencyStandby(const BlackMisc::PhysicalQuantities::CFrequency &frequency) override;
|
virtual void setFrequencyStandby(const BlackMisc::PhysicalQuantities::CFrequency &frequency) override;
|
||||||
|
|
||||||
//! Is active frequency within 8.3383kHz channel?
|
//! Is active frequency within 8.3383kHz channel?
|
||||||
bool isActiveFrequencyWithin8_33kHzChannel(const BlackMisc::PhysicalQuantities::CFrequency &comFrequency) const
|
bool isActiveFrequencyWithin8_33kHzChannel(const BlackMisc::PhysicalQuantities::CFrequency &comFrequency) const;
|
||||||
{
|
|
||||||
return isWithinChannelSpacing(this->getFrequencyActive(), comFrequency, ChannelSpacing8_33KHz);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Is active frequency within 25kHz channel?
|
//! Is active frequency within 25kHz channel?
|
||||||
bool isActiveFrequencyWithin25kHzChannel(const BlackMisc::PhysicalQuantities::CFrequency &comFrequency) const
|
bool isActiveFrequencyWithin25kHzChannel(const BlackMisc::PhysicalQuantities::CFrequency &comFrequency) const;
|
||||||
{
|
|
||||||
return isWithinChannelSpacing(this->getFrequencyActive(), comFrequency, ChannelSpacing25KHz);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Set UNICOM frequency as active
|
//! Set UNICOM frequency as active
|
||||||
void setActiveUnicom()
|
void setActiveUnicom();
|
||||||
{
|
|
||||||
this->toggleActiveStandby();
|
|
||||||
this->setFrequencyActive(BlackMisc::PhysicalQuantities::CPhysicalQuantitiesConstants::FrequencyUnicom());
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Set International Air Distress 121.5MHz
|
//! Set International Air Distress 121.5MHz
|
||||||
void setActiveInternationalAirDistress()
|
void setActiveInternationalAirDistress();
|
||||||
{
|
|
||||||
this->toggleActiveStandby();
|
|
||||||
this->setFrequencyActive(BlackMisc::PhysicalQuantities::CPhysicalQuantitiesConstants::FrequencyInternationalAirDistress());
|
|
||||||
}
|
|
||||||
|
|
||||||
//! COM1 unit
|
//! COM1 unit
|
||||||
static CComSystem getCom1System(double activeFrequencyMHz, double standbyFrequencyMHz = -1)
|
static CComSystem getCom1System(double activeFrequencyMHz, double standbyFrequencyMHz = -1);
|
||||||
{
|
|
||||||
return CComSystem(CModulator::NameCom1(), BlackMisc::PhysicalQuantities::CFrequency(activeFrequencyMHz, BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz()), BlackMisc::PhysicalQuantities::CFrequency(standbyFrequencyMHz < 0 ? activeFrequencyMHz : standbyFrequencyMHz, BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz()));
|
|
||||||
}
|
|
||||||
|
|
||||||
//! COM1 unit
|
//! COM1 unit
|
||||||
static CComSystem getCom1System(BlackMisc::PhysicalQuantities::CFrequency activeFrequency, BlackMisc::PhysicalQuantities::CFrequency standbyFrequency = CModulator::FrequencyNotSet())
|
static CComSystem getCom1System(BlackMisc::PhysicalQuantities::CFrequency activeFrequency, BlackMisc::PhysicalQuantities::CFrequency standbyFrequency = CModulator::FrequencyNotSet());
|
||||||
{
|
|
||||||
return CComSystem(CModulator::NameCom1(), activeFrequency, standbyFrequency == CModulator::FrequencyNotSet() ? activeFrequency : standbyFrequency);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! COM2 unit
|
//! COM2 unit
|
||||||
static CComSystem getCom2System(double activeFrequencyMHz, double standbyFrequencyMHz = -1)
|
static CComSystem getCom2System(double activeFrequencyMHz, double standbyFrequencyMHz = -1);
|
||||||
{
|
|
||||||
return CComSystem(CModulator::NameCom2(), BlackMisc::PhysicalQuantities::CFrequency(activeFrequencyMHz, BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz()), BlackMisc::PhysicalQuantities::CFrequency(standbyFrequencyMHz < 0 ? activeFrequencyMHz : standbyFrequencyMHz, BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz()));
|
|
||||||
}
|
|
||||||
|
|
||||||
//! COM2 unit
|
//! COM2 unit
|
||||||
static CComSystem getCom2System(BlackMisc::PhysicalQuantities::CFrequency activeFrequency, BlackMisc::PhysicalQuantities::CFrequency standbyFrequency = CModulator::FrequencyNotSet())
|
static CComSystem getCom2System(BlackMisc::PhysicalQuantities::CFrequency activeFrequency, BlackMisc::PhysicalQuantities::CFrequency standbyFrequency = CModulator::FrequencyNotSet());
|
||||||
{
|
|
||||||
return CComSystem(CModulator::NameCom2(), activeFrequency, standbyFrequency == CModulator::FrequencyNotSet() ? activeFrequency : standbyFrequency);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Valid civil aviation frequency?
|
//! Valid civil aviation frequency?
|
||||||
static bool isValidCivilAviationFrequency(const BlackMisc::PhysicalQuantities::CFrequency &f)
|
static bool isValidCivilAviationFrequency(const BlackMisc::PhysicalQuantities::CFrequency &f);
|
||||||
{
|
|
||||||
if (f.isNull()) return false;
|
|
||||||
double fr = f.valueRounded(BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz(), 3);
|
|
||||||
return fr >= 118.0 && fr <= 136.975;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Valid military aviation frequency?
|
//! Valid military aviation frequency?
|
||||||
static bool isValidMilitaryFrequency(const BlackMisc::PhysicalQuantities::CFrequency &f)
|
static bool isValidMilitaryFrequency(const BlackMisc::PhysicalQuantities::CFrequency &f);
|
||||||
{
|
|
||||||
if (f.isNull()) return false;
|
|
||||||
double fr = f.valueRounded(BlackMisc::PhysicalQuantities::CFrequencyUnit::MHz(), 3);
|
|
||||||
return fr >= 220.0 && fr <= 399.95;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Valid COM frequency (either civil or military)
|
//! Valid COM frequency (either civil or military)
|
||||||
static bool isValidComFrequency(const BlackMisc::PhysicalQuantities::CFrequency &f)
|
static bool isValidComFrequency(const BlackMisc::PhysicalQuantities::CFrequency &f);
|
||||||
{
|
|
||||||
return isValidCivilAviationFrequency(f) || isValidMilitaryFrequency(f);
|
|
||||||
}
|
|
||||||
|
|
||||||
//! Round to channel spacing, set MHz as unit
|
//! Round to channel spacing, set MHz as unit
|
||||||
//! \see ChannelSpacing
|
//! \see ChannelSpacing
|
||||||
@@ -170,6 +127,9 @@ namespace BlackMisc
|
|||||||
//! Is compareFrequency within channel spacing of setFrequency
|
//! Is compareFrequency within channel spacing of setFrequency
|
||||||
static bool isWithinChannelSpacing(const BlackMisc::PhysicalQuantities::CFrequency &setFrequency, const BlackMisc::PhysicalQuantities::CFrequency &compareFrequency, ChannelSpacing channelSpacing);
|
static bool isWithinChannelSpacing(const BlackMisc::PhysicalQuantities::CFrequency &setFrequency, const BlackMisc::PhysicalQuantities::CFrequency &compareFrequency, ChannelSpacing channelSpacing);
|
||||||
|
|
||||||
|
//! \copydoc BlackMisc::CValueObject::registerMetadata
|
||||||
|
static void registerMetadata();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! \copydoc CModulator::validValues
|
//! \copydoc CModulator::validValues
|
||||||
virtual bool validValues() const override;
|
virtual bool validValues() const override;
|
||||||
@@ -186,7 +146,6 @@ namespace BlackMisc
|
|||||||
BLACK_METAMEMBER(channelSpacing)
|
BLACK_METAMEMBER(channelSpacing)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ namespace BlackMisc
|
|||||||
CVariant CModulator<AVIO>::propertyByIndex(const CPropertyIndex &index) const
|
CVariant CModulator<AVIO>::propertyByIndex(const CPropertyIndex &index) const
|
||||||
{
|
{
|
||||||
if (index.isMyself()) { return CVariant::from(*derived()); }
|
if (index.isMyself()) { return CVariant::from(*derived()); }
|
||||||
ColumnIndex i = index.frontCasted<ColumnIndex>();
|
const ColumnIndex i = index.frontCasted<ColumnIndex>();
|
||||||
switch (i)
|
switch (i)
|
||||||
{
|
{
|
||||||
case IndexActiveFrequency:
|
case IndexActiveFrequency:
|
||||||
@@ -131,7 +131,7 @@ namespace BlackMisc
|
|||||||
void CModulator<AVIO>::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant)
|
void CModulator<AVIO>::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant)
|
||||||
{
|
{
|
||||||
if (index.isMyself()) { Q_ASSERT_X(false, Q_FUNC_INFO, "Wrong index to base template"); return; }
|
if (index.isMyself()) { Q_ASSERT_X(false, Q_FUNC_INFO, "Wrong index to base template"); return; }
|
||||||
ColumnIndex i = index.frontCasted<ColumnIndex>();
|
const ColumnIndex i = index.frontCasted<ColumnIndex>();
|
||||||
switch (i)
|
switch (i)
|
||||||
{
|
{
|
||||||
case IndexActiveFrequency:
|
case IndexActiveFrequency:
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ namespace BlackMisc
|
|||||||
//! Index list
|
//! Index list
|
||||||
QList<int> indexList() const;
|
QList<int> indexList() const;
|
||||||
|
|
||||||
//! Shif existing indexes to right and insert given index at front
|
//! Shift existing indexes to right and insert given index at front
|
||||||
void prepend(int newLeftIndex);
|
void prepend(int newLeftIndex);
|
||||||
|
|
||||||
//! Contains index?
|
//! Contains index?
|
||||||
@@ -196,7 +196,7 @@ namespace BlackMisc
|
|||||||
template<class EnumType> bool contains(EnumType ev) const
|
template<class EnumType> bool contains(EnumType ev) const
|
||||||
{
|
{
|
||||||
static_assert(std::is_enum<EnumType>::value, "Argument must be an enum");
|
static_assert(std::is_enum<EnumType>::value, "Argument must be an enum");
|
||||||
return contains(static_cast<int>(ev));
|
return this->contains(static_cast<int>(ev));
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Front to integer
|
//! Front to integer
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ namespace BlackMisc
|
|||||||
|
|
||||||
namespace Mixin
|
namespace Mixin
|
||||||
{
|
{
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* CRTP class template from which a derived class can inherit common methods dealing with the metatype of the class.
|
* CRTP class template from which a derived class can inherit common methods dealing with the metatype of the class.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user