diff --git a/src/blackgui/models/columnformatters.cpp b/src/blackgui/models/columnformatters.cpp index 94acf91fe..e074333e6 100644 --- a/src/blackgui/models/columnformatters.cpp +++ b/src/blackgui/models/columnformatters.cpp @@ -10,6 +10,7 @@ #include "columnformatters.h" #include "blackmisc/geo/latitude.h" #include "blackmisc/aviation/altitude.h" +#include "blackmisc/rgbcolor.h" #include "blackmisc/variant.h" #include "blackmisc/iconlist.h" #include "blackmisc/icons.h" @@ -302,7 +303,7 @@ namespace BlackGui CVariant CBoolLedFormatter::displayRole(const CVariant &dataCVariant) const { Q_UNUSED(dataCVariant); - Q_ASSERT_X(false, "CBoolLedFormatter", "this role should be disabled with led boolean"); + Q_ASSERT_X(false, Q_FUNC_INFO, "this role should be disabled with led boolean"); return CVariant(); } @@ -366,5 +367,30 @@ namespace BlackGui return alt.toQString(this->m_useI18n); } + CColorFormatter::CColorFormatter(int alignment, bool i18n) : CDefaultFormatter(alignment, i18n, rolesDecorationAndToolTip()) + {} + + CVariant CColorFormatter::displayRole(const CVariant &dataCVariant) const + { + Q_UNUSED(dataCVariant); + Q_ASSERT_X(false, Q_FUNC_INFO, "this role should be disabled with RGB color"); + return CVariant(); + } + + CVariant CColorFormatter::decorationRole(const CVariant &dataCVariant) const + { + static const CVariant empty(CVariant::fromValue(QPixmap())); + CRgbColor rgbColor(dataCVariant.to()); + if (!rgbColor.isValid()) { return empty; } + return CVariant::fromValue(rgbColor.toPixmap()); + } + + CVariant CColorFormatter::tooltipRole(const CVariant &dataCVariant) const + { + CRgbColor rgbColor(dataCVariant.to()); + if (!rgbColor.isValid()) { return ""; } + return rgbColor.hex(true); + } + } // namespace } // namespace diff --git a/src/blackgui/models/columnformatters.h b/src/blackgui/models/columnformatters.h index f11f9bb92..1b71825e7 100644 --- a/src/blackgui/models/columnformatters.h +++ b/src/blackgui/models/columnformatters.h @@ -282,6 +282,23 @@ namespace BlackGui bool m_flightLevel = false; }; + //! Formatter when column contains a color + class CColorFormatter : public CDefaultFormatter + { + public: + //! Constructor + CColorFormatter(int alignment = alignCentered(), bool i18n = true); + + //! \copydoc CDefaultFormatter::displayRole + virtual BlackMisc::CVariant displayRole(const BlackMisc::CVariant &dataCVariant) const override; + + //! Display the icon + virtual BlackMisc::CVariant decorationRole(const BlackMisc::CVariant &dataCVariant) const override; + + //! \copydoc CDefaultFormatter::tooltipRole + virtual BlackMisc::CVariant tooltipRole(const BlackMisc::CVariant &dataCVariant) const override; + }; + //! Formatter for physical quantities template class CPhysiqalQuantiyFormatter : public CValueObjectFormatter { @@ -361,7 +378,7 @@ namespace BlackGui virtual BlackMisc::CVariant displayRole(const BlackMisc::CVariant &dataCVariant) const override; }; - //! Airspace distance + //! Airspeed class CAircraftSpeedFormatter : public CPhysiqalQuantiyFormatter { public: