diff --git a/src/blackgui/models/columnformatters.cpp b/src/blackgui/models/columnformatters.cpp index 736bd6dde..f196f3057 100644 --- a/src/blackgui/models/columnformatters.cpp +++ b/src/blackgui/models/columnformatters.cpp @@ -61,7 +61,7 @@ namespace BlackGui const QMetaType::Type type = static_cast(dataCVariant.type()); if (type == QMetaType::QPixmap) { return dataCVariant; } - if (type == QMetaType::QIcon) { return dataCVariant; } + if (type == QMetaType::QIcon) { return dataCVariant; } // convert to pixmap if (type == QMetaType::QImage) @@ -71,9 +71,9 @@ namespace BlackGui } // Our CIcon class - if (dataCVariant.canConvert()) + if (dataCVariant.canConvert()) { - const CIcon i = dataCVariant.value(); + const CIcon i = dataCVariant.value(); return CVariant::from(i.toPixmap()); } @@ -157,20 +157,49 @@ namespace BlackGui { Q_UNUSED(dataCVariant); Q_ASSERT_X(false, "CPixmapFormatter", "this role should be disabled with pixmaps"); - return CVariant(); + return {}; } CVariant CPixmapFormatter::tooltipRole(const CVariant &dataCVariant) const { - if (dataCVariant.isNull()) return {}; - if (dataCVariant.canConvert()) + if (dataCVariant.isNull()) { return {}; } + if (dataCVariant.canConvert()) { - BlackMisc::CIcon icon = dataCVariant.value(); + const CIcon icon = dataCVariant.value(); return icon.getDescriptiveText(); } return emptyStringVariant(); } + CVariant CPixmapFormatter::decorationRole(const CVariant &dataCVariant) const + { + if (dataCVariant.isNull()) { return {}; } + if (m_maxWidth < 0 && m_maxHeight < 0) { return CDefaultFormatter::decorationRole(dataCVariant); } + + QPixmap pm; + if (dataCVariant.canConvert()) + { + const CIcon icon = dataCVariant.value(); + pm = icon.toPixmap(); + } + + if (pm.isNull()) { return {}; } + const int pmw = pm.width(); + const int pmh = pm.height(); + + if (m_maxHeight >= 0 && m_maxHeight < pmh) + { + return CVariant::fromValue(pm.scaledToHeight(m_maxHeight)); + } + + if (m_maxWidth >= 0 && m_maxWidth < pmw) + { + return CVariant::fromValue(pm.scaledToWidth(m_maxWidth)); + } + + return CVariant::fromValue(pm); + } + CVariant CValueObjectFormatter::displayRole(const CVariant &valueObject) const { return CVariant(valueObject.toQString(m_useI18n)); diff --git a/src/blackgui/models/columnformatters.h b/src/blackgui/models/columnformatters.h index 796167c83..f4018a580 100644 --- a/src/blackgui/models/columnformatters.h +++ b/src/blackgui/models/columnformatters.h @@ -141,6 +141,20 @@ namespace BlackGui //! \copydoc CDefaultFormatter::tooltipRole virtual BlackMisc::CVariant tooltipRole(const BlackMisc::CVariant &dataCVariant) const override; + + //! \copydoc CDefaultFormatter::decorationRole + virtual BlackMisc::CVariant decorationRole(const BlackMisc::CVariant &dataCVariant) const override; + + //! Width/height @{ + int getMaxWidth() const { return m_maxWidth; } + int getMaxHeight() const { return m_maxHeight; } + void setMaxWidth(int w) { m_maxWidth = w; } + void setMaxHeight(int h) { m_maxHeight = h; } + //! @} + + private: + int m_maxWidth = -1; + int m_maxHeight = -1; }; //! String formatter, if known the variant already contains the appropriate string diff --git a/src/blackgui/models/simulatedaircraftlistmodel.cpp b/src/blackgui/models/simulatedaircraftlistmodel.cpp index 224836f0c..b514620ba 100644 --- a/src/blackgui/models/simulatedaircraftlistmodel.cpp +++ b/src/blackgui/models/simulatedaircraftlistmodel.cpp @@ -68,7 +68,10 @@ namespace BlackGui m_columns.addColumn(CColumn::standardString("icao", "icao and livery info", { CSimulatedAircraft::IndexCombinedIcaoLiveryStringNetworkModel})); // icon column for airline - CColumn col("airline", { CSimulatedAircraft::IndexNetworkModel, CAircraftModel::IndexLivery, CLivery::IndexAirlineIcaoCode, CAirlineIcaoCode::IndexIcon }); + CPixmapFormatter *pmf = new CPixmapFormatter(); + pmf->setMaxHeight(25); + pmf->setMaxWidth(100); + CColumn col("airline", { CSimulatedAircraft::IndexNetworkModel, CAircraftModel::IndexLivery, CLivery::IndexAirlineIcaoCode, CAirlineIcaoCode::IndexIcon }, pmf); col.setSortPropertyIndex({ CSimulatedAircraft::IndexNetworkModel, CAircraftModel::IndexLivery, CLivery::IndexAirlineIcaoCode, CAirlineIcaoCode::IndexAirlineDesignator}); m_columns.addColumn(col); diff --git a/src/blackmisc/icon.cpp b/src/blackmisc/icon.cpp index 141ef5350..ba1d5a87a 100644 --- a/src/blackmisc/icon.cpp +++ b/src/blackmisc/icon.cpp @@ -64,11 +64,11 @@ namespace BlackMisc { if (this->isGenerated()) { return m_pixmap; } if (this->isFileBased()) { return m_pixmap; } - return CIcons::pixmapByIndex(getIndex(), m_rotateDegrees); + return CIcons::pixmapByIndex(this->getIndex(), m_rotateDegrees); } else { - return CIcons::pixmapByIndex(getIndex()); + return CIcons::pixmapByIndex(this->getIndex()); } }