mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-26 10:45:37 +08:00
Optimizations for column formatters, use CVariant directly if a value remains const (no need to always contruct CVariant)
This commit is contained in:
@@ -21,6 +21,7 @@
|
|||||||
#include <QMetaType>
|
#include <QMetaType>
|
||||||
#include <QTime>
|
#include <QTime>
|
||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
|
#include <QScopedPointer>
|
||||||
|
|
||||||
using namespace BlackMisc;
|
using namespace BlackMisc;
|
||||||
using namespace BlackMisc::Aviation;
|
using namespace BlackMisc::Aviation;
|
||||||
@@ -145,6 +146,12 @@ namespace BlackGui
|
|||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const CVariant &CDefaultFormatter::emptyPixmapVariant()
|
||||||
|
{
|
||||||
|
static const CVariant e = CVariant::from(QPixmap());
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
CVariant CPixmapFormatter::displayRole(const CVariant &dataCVariant) const
|
CVariant CPixmapFormatter::displayRole(const CVariant &dataCVariant) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(dataCVariant);
|
Q_UNUSED(dataCVariant);
|
||||||
@@ -216,12 +223,12 @@ namespace BlackGui
|
|||||||
// special treatment for some cases
|
// special treatment for some cases
|
||||||
const CLength l = dataCVariant.value<CLength>();
|
const CLength l = dataCVariant.value<CLength>();
|
||||||
const bool valid = !l.isNull() && (l.isPositiveWithEpsilonConsidered() || l.isZeroEpsilonConsidered());
|
const bool valid = !l.isNull() && (l.isPositiveWithEpsilonConsidered() || l.isZeroEpsilonConsidered());
|
||||||
return valid ? CPhysiqalQuantiyFormatter::displayRole(dataCVariant) : QStringLiteral("");
|
return valid ? CPhysiqalQuantiyFormatter::displayRole(dataCVariant) : emptyStringVariant();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Q_ASSERT_X(false, "CAirspaceDistanceFormatter::formatQVariant", "No CLength class");
|
Q_ASSERT_X(false, "CAirspaceDistanceFormatter::formatQVariant", "No CLength class");
|
||||||
return QStringLiteral("");
|
return emptyStringVariant();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,7 +236,7 @@ namespace BlackGui
|
|||||||
{
|
{
|
||||||
if (dataCVariant.canConvert<CFrequency>())
|
if (dataCVariant.canConvert<CFrequency>())
|
||||||
{
|
{
|
||||||
// speical treatment for some cases
|
// special treatment for some cases
|
||||||
const CFrequency f = dataCVariant.value<CFrequency>();
|
const CFrequency f = dataCVariant.value<CFrequency>();
|
||||||
if (CComSystem::isValidComFrequency(f))
|
if (CComSystem::isValidComFrequency(f))
|
||||||
{
|
{
|
||||||
@@ -259,7 +266,7 @@ namespace BlackGui
|
|||||||
{
|
{
|
||||||
if (dataCVariant.canConvert<QString>()) { return dataCVariant; }
|
if (dataCVariant.canConvert<QString>()) { return dataCVariant; }
|
||||||
if (!dataCVariant.isValid()) { static const CVariant iv("invalid"); return iv; }
|
if (!dataCVariant.isValid()) { static const CVariant iv("invalid"); return iv; }
|
||||||
const QString s("Invalid type '%1'");
|
static const QString s("Invalid type: '%1'");
|
||||||
return CVariant::from(s.arg(dataCVariant.typeName()));
|
return CVariant::from(s.arg(dataCVariant.typeName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -273,8 +280,8 @@ namespace BlackGui
|
|||||||
{
|
{
|
||||||
if (dataCVariant.canConvert<bool>())
|
if (dataCVariant.canConvert<bool>())
|
||||||
{
|
{
|
||||||
bool v = dataCVariant.toBool();
|
const bool v = dataCVariant.toBool();
|
||||||
return v ? CVariant(m_trueName) : CVariant(m_falseName);
|
return v ? CVariant(m_trueNameVariant) : CVariant(m_falseNameVariant);
|
||||||
}
|
}
|
||||||
Q_ASSERT_X(false, "CBoolTextFormatter", "no boolean value");
|
Q_ASSERT_X(false, "CBoolTextFormatter", "no boolean value");
|
||||||
return CVariant();
|
return CVariant();
|
||||||
@@ -292,12 +299,11 @@ namespace BlackGui
|
|||||||
CBoolTextFormatter(alignment, onName, offName, rolesDecorationAndToolTip())
|
CBoolTextFormatter(alignment, onName, offName, rolesDecorationAndToolTip())
|
||||||
{
|
{
|
||||||
// one time pixmap creation
|
// one time pixmap creation
|
||||||
CLedWidget *led = ledDefault();
|
QScopedPointer<CLedWidget> led(createLedDefault());
|
||||||
led->setOn(true);
|
led->setOn(true);
|
||||||
m_pixmapOnLed = led->asPixmap();
|
m_pixmapOnLedVariant = CVariant::fromValue(led->asPixmap());
|
||||||
led->setOn(false);
|
led->setOn(false);
|
||||||
m_pixmapOffLed = led->asPixmap();
|
m_pixmapOffLedVariant = CVariant::fromValue(led->asPixmap());
|
||||||
delete led;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CVariant CBoolLedFormatter::displayRole(const CVariant &dataCVariant) const
|
CVariant CBoolLedFormatter::displayRole(const CVariant &dataCVariant) const
|
||||||
@@ -311,8 +317,8 @@ namespace BlackGui
|
|||||||
{
|
{
|
||||||
if (dataCVariant.canConvert<bool>())
|
if (dataCVariant.canConvert<bool>())
|
||||||
{
|
{
|
||||||
bool v = dataCVariant.toBool();
|
const bool v = dataCVariant.toBool();
|
||||||
return CVariant::from(v ? m_pixmapOnLed : m_pixmapOffLed);
|
return v ? m_pixmapOnLedVariant : m_pixmapOffLedVariant;
|
||||||
}
|
}
|
||||||
Q_ASSERT_X(false, "CBoolLedFormatter", "no boolean value");
|
Q_ASSERT_X(false, "CBoolLedFormatter", "no boolean value");
|
||||||
return CVariant();
|
return CVariant();
|
||||||
@@ -331,11 +337,9 @@ namespace BlackGui
|
|||||||
{ }
|
{ }
|
||||||
|
|
||||||
CBoolIconFormatter::CBoolIconFormatter(const CIcon &onIcon, const CIcon &offIcon, const QString &onName, const QString &offName, int alignment) :
|
CBoolIconFormatter::CBoolIconFormatter(const CIcon &onIcon, const CIcon &offIcon, const QString &onName, const QString &offName, int alignment) :
|
||||||
CBoolTextFormatter(alignment, onName, offName, rolesDecorationAndToolTip()), m_iconOn(onIcon), m_iconOff(offIcon)
|
CBoolTextFormatter(alignment, onName, offName, rolesDecorationAndToolTip()),
|
||||||
{
|
m_iconOnVariant(CVariant::fromValue(onIcon.toPixmap())), m_iconOffVariant(CVariant::fromValue(offIcon.toPixmap()))
|
||||||
m_iconOn.setDescriptiveText(onName);
|
{ }
|
||||||
m_iconOff.setDescriptiveText(offName);
|
|
||||||
}
|
|
||||||
|
|
||||||
CVariant CBoolIconFormatter::displayRole(const CVariant &dataCVariant) const
|
CVariant CBoolIconFormatter::displayRole(const CVariant &dataCVariant) const
|
||||||
{
|
{
|
||||||
@@ -348,8 +352,8 @@ namespace BlackGui
|
|||||||
{
|
{
|
||||||
if (dataCVariant.canConvert<bool>())
|
if (dataCVariant.canConvert<bool>())
|
||||||
{
|
{
|
||||||
bool v = dataCVariant.toBool();
|
const bool v = dataCVariant.toBool();
|
||||||
return CVariant::from(v ? m_iconOn.toPixmap() : m_iconOff.toPixmap());
|
return v ? m_iconOnVariant : m_iconOffVariant;
|
||||||
}
|
}
|
||||||
Q_ASSERT_X(false, "CBoolIconFormatter", "no boolean value");
|
Q_ASSERT_X(false, "CBoolIconFormatter", "no boolean value");
|
||||||
return CVariant();
|
return CVariant();
|
||||||
@@ -379,16 +383,16 @@ namespace BlackGui
|
|||||||
|
|
||||||
CVariant CColorFormatter::decorationRole(const CVariant &dataCVariant) const
|
CVariant CColorFormatter::decorationRole(const CVariant &dataCVariant) const
|
||||||
{
|
{
|
||||||
static const CVariant empty(CVariant::fromValue(QPixmap()));
|
const CRgbColor rgbColor(dataCVariant.to<CRgbColor>());
|
||||||
CRgbColor rgbColor(dataCVariant.to<CRgbColor>());
|
if (!rgbColor.isValid()) { return emptyPixmapVariant(); }
|
||||||
if (!rgbColor.isValid()) { return empty; }
|
|
||||||
return CVariant::fromValue(rgbColor.toPixmap());
|
return CVariant::fromValue(rgbColor.toPixmap());
|
||||||
}
|
}
|
||||||
|
|
||||||
CVariant CColorFormatter::tooltipRole(const CVariant &dataCVariant) const
|
CVariant CColorFormatter::tooltipRole(const CVariant &dataCVariant) const
|
||||||
{
|
{
|
||||||
CRgbColor rgbColor(dataCVariant.to<CRgbColor>());
|
static const CVariant empty(CVariant::fromValue(QPixmap()));
|
||||||
if (!rgbColor.isValid()) { return ""; }
|
const CRgbColor rgbColor(dataCVariant.to<CRgbColor>());
|
||||||
|
if (!rgbColor.isValid()) { return emptyStringVariant(); }
|
||||||
return rgbColor.hex(true);
|
return rgbColor.hex(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -116,6 +116,9 @@ namespace BlackGui
|
|||||||
//! Empty string CVariant
|
//! Empty string CVariant
|
||||||
static const BlackMisc::CVariant &emptyStringVariant();
|
static const BlackMisc::CVariant &emptyStringVariant();
|
||||||
|
|
||||||
|
//! Empty pixmap CVariant
|
||||||
|
static const BlackMisc::CVariant &emptyPixmapVariant();
|
||||||
|
|
||||||
QList<int> m_supportedRoles = roleDisplay(); //!< supports decoration roles
|
QList<int> m_supportedRoles = roleDisplay(); //!< supports decoration roles
|
||||||
int m_alignment = -1; //!< alignment horizontal/vertically / Qt::Alignment
|
int m_alignment = -1; //!< alignment horizontal/vertically / Qt::Alignment
|
||||||
bool m_useI18n = true; //!< i18n?
|
bool m_useI18n = true; //!< i18n?
|
||||||
@@ -164,7 +167,9 @@ namespace BlackGui
|
|||||||
public:
|
public:
|
||||||
//! Constructor
|
//! Constructor
|
||||||
CBoolTextFormatter(int alignment = alignDefault(), const QString &trueName = "true", const QString &falseName = "false", const QList<int> &supportedRoles = roleDisplay()) :
|
CBoolTextFormatter(int alignment = alignDefault(), const QString &trueName = "true", const QString &falseName = "false", const QList<int> &supportedRoles = roleDisplay()) :
|
||||||
CDefaultFormatter(alignment, false, supportedRoles), m_trueName(trueName), m_falseName(falseName) {}
|
CDefaultFormatter(alignment, false, supportedRoles),
|
||||||
|
m_trueNameVariant(BlackMisc::CVariant::from(trueName)),
|
||||||
|
m_falseNameVariant(BlackMisc::CVariant::from(falseName)) {}
|
||||||
|
|
||||||
//! \copydoc CDefaultFormatter::displayRole
|
//! \copydoc CDefaultFormatter::displayRole
|
||||||
virtual BlackMisc::CVariant displayRole(const BlackMisc::CVariant &dataCVariant) const override;
|
virtual BlackMisc::CVariant displayRole(const BlackMisc::CVariant &dataCVariant) const override;
|
||||||
@@ -173,8 +178,8 @@ namespace BlackGui
|
|||||||
virtual Qt::ItemFlags flags(Qt::ItemFlags flags, bool editable) const override;
|
virtual Qt::ItemFlags flags(Qt::ItemFlags flags, bool editable) const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
const QString m_trueName = "true"; //!< displayed when true
|
const BlackMisc::CVariant m_trueNameVariant = "true"; //!< displayed when true
|
||||||
const QString m_falseName = "false"; //!< displayed when false
|
const BlackMisc::CVariant m_falseNameVariant = "false"; //!< displayed when false
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Format as bool LED value
|
//! Format as bool LED value
|
||||||
@@ -200,15 +205,16 @@ namespace BlackGui
|
|||||||
return CBoolTextFormatter::displayRole(dataCVariant);
|
return CBoolTextFormatter::displayRole(dataCVariant);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Default LED
|
|
||||||
static BlackGui::CLedWidget *ledDefault()
|
|
||||||
{
|
|
||||||
return new BlackGui::CLedWidget(false, BlackGui::CLedWidget::Yellow, BlackGui::CLedWidget::Black, BlackGui::CLedWidget::Rounded);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QPixmap m_pixmapOnLed; //!< Pixmap used when on
|
BlackMisc::CVariant m_pixmapOnLedVariant; //!< Pixmap used when on
|
||||||
QPixmap m_pixmapOffLed; //!< Pixmap used when off
|
BlackMisc::CVariant m_pixmapOffLedVariant; //!< Pixmap used when off
|
||||||
|
|
||||||
|
private:
|
||||||
|
//! Default LED
|
||||||
|
static CLedWidget *createLedDefault()
|
||||||
|
{
|
||||||
|
return new CLedWidget(false, CLedWidget::Yellow, CLedWidget::Black, CLedWidget::Rounded);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Format as bool pixmap
|
//! Format as bool pixmap
|
||||||
@@ -238,8 +244,8 @@ namespace BlackGui
|
|||||||
virtual BlackMisc::CVariant tooltipRole(const BlackMisc::CVariant &dataCVariant) const override;
|
virtual BlackMisc::CVariant tooltipRole(const BlackMisc::CVariant &dataCVariant) const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
BlackMisc::CIcon m_iconOn; //!< Used when on
|
const BlackMisc::CVariant m_iconOnVariant; //!< Used when on
|
||||||
BlackMisc::CIcon m_iconOff; //!< Used when off
|
const BlackMisc::CVariant m_iconOffVariant; //!< Used when off
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Default formatter when column contains CValueObject
|
//! Default formatter when column contains CValueObject
|
||||||
@@ -282,7 +288,7 @@ namespace BlackGui
|
|||||||
static const QString &formatHmsz() { static const QString f = "HH:mm:ss.zzz"; return f; }
|
static const QString &formatHmsz() { static const QString f = "HH:mm:ss.zzz"; return f; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_formatString = "yyyy-MM-dd HH:mm"; //!< how the value is displayed
|
const QString m_formatString = "yyyy-MM-dd HH:mm"; //!< how the value is displayed
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Formatter when column contains an integer
|
//! Formatter when column contains an integer
|
||||||
@@ -307,7 +313,7 @@ namespace BlackGui
|
|||||||
virtual BlackMisc::CVariant displayRole(const BlackMisc::CVariant &altitude) const override;
|
virtual BlackMisc::CVariant displayRole(const BlackMisc::CVariant &altitude) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_flightLevel = false;
|
const bool m_flightLevel = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Formatter when column contains a color
|
//! Formatter when column contains a color
|
||||||
@@ -320,11 +326,11 @@ namespace BlackGui
|
|||||||
//! \copydoc CDefaultFormatter::displayRole
|
//! \copydoc CDefaultFormatter::displayRole
|
||||||
virtual BlackMisc::CVariant displayRole(const BlackMisc::CVariant &dataCVariant) const override;
|
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
|
//! \copydoc CDefaultFormatter::tooltipRole
|
||||||
virtual BlackMisc::CVariant tooltipRole(const BlackMisc::CVariant &dataCVariant) const override;
|
virtual BlackMisc::CVariant tooltipRole(const BlackMisc::CVariant &dataCVariant) const override;
|
||||||
|
|
||||||
|
//! Display the icon
|
||||||
|
virtual BlackMisc::CVariant decorationRole(const BlackMisc::CVariant &dataCVariant) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Formatter for physical quantities
|
//! Formatter for physical quantities
|
||||||
@@ -345,7 +351,7 @@ namespace BlackGui
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
Q_ASSERT_X(false, "CPhysiqalQuantiyFormatter::displayRole", "No CPhysicalQuantity class");
|
Q_ASSERT_X(false, "CPhysiqalQuantiyFormatter::displayRole", "No CPhysicalQuantity class");
|
||||||
return "";
|
return emptyStringVariant();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user