From 42f89ebeca2daa163f0bfa5ef79b64e5a39d6cc1 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sat, 2 Aug 2014 22:03:18 +0200 Subject: [PATCH] refs #304, Icons, using new CIcon class --- samples/blackcore/main.cpp | 4 +-- samples/blackgui/main.cpp | 4 +-- samples/blackgui/mainwindow_init.cpp | 2 +- samples/blackgui/mainwindow_voice.cpp | 6 ++-- .../components/infowindowcomponent.cpp | 4 +-- .../components/maininfoareacomponent.cpp | 36 +++++++++---------- src/blackgui/dockwidgetinfoarea.cpp | 2 +- src/blackgui/models/atcstationlistmodel.cpp | 4 +-- src/blackgui/models/clientlistmodel.cpp | 5 +-- .../models/statusmessagelistmodel.cpp | 3 +- src/blackmisc/avatcstation.cpp | 5 +-- src/blackmisc/avatcstation.h | 2 +- src/blackmisc/avcallsign.cpp | 24 ++++++------- src/blackmisc/avflightplan.h | 3 ++ src/blackmisc/blackmisc.qrc | 35 ++++++++++++++++-- src/blackmisc/blackmiscfreefunctions.cpp | 8 +++-- src/blackmisc/geoearthangle.cpp | 9 +++++ src/blackmisc/geoearthangle.h | 2 ++ src/blackmisc/namevariantpair.cpp | 36 +++++++++++++++++-- src/blackmisc/namevariantpair.h | 16 +++++++-- 20 files changed, 151 insertions(+), 59 deletions(-) diff --git a/samples/blackcore/main.cpp b/samples/blackcore/main.cpp index 75e4ab9d0..c3479af2b 100644 --- a/samples/blackcore/main.cpp +++ b/samples/blackcore/main.cpp @@ -8,7 +8,7 @@ #include "blackcore/context_settings.h" #include "blackcore/context_application.h" #include "blackcore/context_application_impl.h" -#include "blackmisc/iconsstandard.h" +#include "blackmisc/icons.h" #include "blackmisc/networkutils.h" #include "blackmisc/blackmiscfreefunctions.h" #include "blackmisc/project.h" @@ -27,7 +27,7 @@ int main(int argc, char *argv[]) { // metadata are registered in runtime QApplication a(argc, argv); // not QCoreApplication because of icon, http://qt-project.org/forums/viewthread/15412 - QIcon icon(BlackMisc::CIconsStandard::swiftNova24()); + QIcon icon(BlackMisc::CIcons::swiftNova24()); QApplication::setWindowIcon(icon); QTextStream cin(stdin); diff --git a/samples/blackgui/main.cpp b/samples/blackgui/main.cpp index 4a270d11d..df2dbd57c 100644 --- a/samples/blackgui/main.cpp +++ b/samples/blackgui/main.cpp @@ -6,7 +6,7 @@ #include "blackcore/context_runtime_config.h" #include "blacksim/blacksimfreefunctions.h" #include "blackmisc/blackmiscfreefunctions.h" -#include "blackmisc/iconsstandard.h" +#include "blackmisc/icons.h" #include #include @@ -41,7 +41,7 @@ int main(int argc, char *argv[]) // application QApplication a(argc, argv); - QIcon icon(BlackMisc::CIconsStandard::swift24()); + QIcon icon(BlackMisc::CIcons::swift24()); QApplication::setWindowIcon(icon); const QString s = CStyleSheetUtility::instance().styles( { diff --git a/samples/blackgui/mainwindow_init.cpp b/samples/blackgui/mainwindow_init.cpp index 718e5bdcf..5a226352c 100644 --- a/samples/blackgui/mainwindow_init.cpp +++ b/samples/blackgui/mainwindow_init.cpp @@ -54,7 +54,7 @@ void MainWindow::init(const CRuntimeConfig &runtimeConfig) QHBoxLayout *menuBarLayout = new QHBoxLayout(); QPushButton *closeIcon = new QPushButton(this); closeIcon->setStyleSheet("margin: 0; padding: 0; background: transparent;"); - closeIcon->setIcon(CIconsStandard::close16()); + closeIcon->setIcon(CIcons::close16()); QObject::connect(closeIcon, &QPushButton::clicked, this, &QMainWindow::close); menuBarLayout->addWidget(this->ui->mb_MainMenuBar, 0, Qt::AlignTop | Qt::AlignLeft); menuBarLayout->addWidget(closeIcon, 0, Qt::AlignTop | Qt::AlignRight); diff --git a/samples/blackgui/mainwindow_voice.cpp b/samples/blackgui/mainwindow_voice.cpp index 381920c06..537470e18 100644 --- a/samples/blackgui/mainwindow_voice.cpp +++ b/samples/blackgui/mainwindow_voice.cpp @@ -1,6 +1,6 @@ #include "mainwindow.h" #include "ui_mainwindow.h" -#include "blackmisc/iconsstandard.h" +#include "blackmisc/icons.h" #include "blackgui/models/atcstationlistmodel.h" #include "blackcore/dbus_server.h" #include "blackcore/context_network.h" @@ -76,8 +76,8 @@ void MainWindow::ps_setAudioVolumes() com1.setEnabled(!muted); com2.setEnabled(!muted); this->ui->pb_SoundMute->setText(muted ? "Unmute" : "Mute"); - this->ui->lbl_StatusVoiceStatus->setPixmap(muted ? CIconsStandard::volumneMuted16() : CIconsStandard::volumneHigh16()); - this->ui->comp_Cockpit->setCockpitVoiceStatusPixmap(muted ? CIconsStandard::volumneMuted16() : CIconsStandard::volumneHigh16()); + this->ui->comp_InfoBarStatus->setVolume(muted ? 0 : 66); // TODO + this->ui->comp_Cockpit->setCockpitVoiceStatusPixmap(muted ? CIcons::volumeMuted16() : CIcons::volumeHigh16()); this->ui->pb_SoundMute->setStyleSheet(muted ? "background-color: red;" : ""); if (muted) this->m_compInfoWindow->displayStringMessage("Sound is muted!"); diff --git a/src/blackgui/components/infowindowcomponent.cpp b/src/blackgui/components/infowindowcomponent.cpp index fd13dc678..f888f765b 100644 --- a/src/blackgui/components/infowindowcomponent.cpp +++ b/src/blackgui/components/infowindowcomponent.cpp @@ -9,7 +9,7 @@ #include "infowindowcomponent.h" #include "ui_infowindowcomponent.h" - +#include "blackmisc/icon.h" #include #include @@ -92,7 +92,7 @@ namespace BlackGui this->ui->le_SmSeverity->setText(statusMessage.getSeverityAsString()); this->ui->le_SmType->setText(statusMessage.getTypeAsString()); this->ui->te_SmStatusMessage->setText(statusMessage.getMessage()); - this->ui->lbl_SmSeverityIcon->setPixmap(statusMessage.toIcon()); + this->ui->lbl_SmSeverityIcon->setPixmap(statusMessage.toPixmap()); this->setCurrentPage(this->ui->pg_StatusMessage); this->showWindow(displayTimeMs); diff --git a/src/blackgui/components/maininfoareacomponent.cpp b/src/blackgui/components/maininfoareacomponent.cpp index d34486987..2d22387d1 100644 --- a/src/blackgui/components/maininfoareacomponent.cpp +++ b/src/blackgui/components/maininfoareacomponent.cpp @@ -11,7 +11,7 @@ #include "ui_maininfoareacomponent.h" #include "../stylesheetutility.h" #include "../guiutility.h" -#include "blackmisc/iconsstandard.h" +#include "blackmisc/icons.h" #include #include #include @@ -28,7 +28,7 @@ namespace BlackGui { this->ps_setInfoAreaFloating(this->m_infoAreaFloating); ui->setupUi(this); - this->setWindowIcon(CIconsStandard::swift24()); + this->setWindowIcon(CIcons::swift24()); // after setup, GUI established if (this->m_dockableWidgets.isEmpty()) @@ -61,9 +61,9 @@ namespace BlackGui void CMainInfoAreaComponent::addToContextMenu(QMenu *menu) const { if (!menu) return; - menu->addAction(CIconsStandard::dockTop16(), "Dock all", this, SLOT(dockAllWidgets())); - menu->addAction(CIconsStandard::floatAll16(), "Float all", this, SLOT(floatAllWidgets())); - menu->addAction(CIconsStandard::floatOne16(), "Dock / float info area", this, SLOT(toggleFloating())); + menu->addAction(CIcons::dockTop16(), "Dock all", this, SLOT(dockAllWidgets())); + menu->addAction(CIcons::floatAll16(), "Float all", this, SLOT(floatAllWidgets())); + menu->addAction(CIcons::floatOne16(), "Dock / float info area", this, SLOT(toggleFloating())); bool c = false; if (!this->m_dockableWidgets.isEmpty()) @@ -118,13 +118,13 @@ namespace BlackGui QAction *showMenuText = new QAction(menu); showMenuText->setObjectName("ShowDockedWidgetTextAction"); showMenuText->setIconText("Show tab text"); - showMenuText->setIcon(CIconsStandard::headingOne16()); + showMenuText->setIcon(CIcons::headingOne16()); showMenuText->setCheckable(true); showMenuText->setChecked(this->m_showTabTexts); menu->addAction(showMenuText); connect(showMenuText, &QAction::toggled, this, &CMainInfoAreaComponent::ps_showTabTexts); - menu->addAction(CIconsStandard::dockBottom16(), "Toogle tabbar position", this, SLOT(ps_toggleTabBarPosition())); + menu->addAction(CIcons::dockBottom16(), "Toogle tabbar position", this, SLOT(ps_toggleTabBarPosition())); } } @@ -373,27 +373,27 @@ namespace BlackGui switch (infoArea) { case InfoAreaUsers: - return CIconsStandard::appUsers16(); + return CIcons::appUsers16(); case InfoAreaWeather: - return CIconsStandard::appWeather16(); + return CIcons::appWeather16(); case InfoAreaAtc: - return CIconsStandard::appAtc16(); + return CIcons::appAtc16(); case InfoAreaAircrafts: - return CIconsStandard::appAircrafts16(); + return CIcons::appAircrafts16(); case InfoAreaSettings: - return CIconsStandard::appSettings16(); + return CIcons::appSettings16(); case InfoAreaFlightPlan: - return CIconsStandard::appFlightplan16(); + return CIcons::appFlightPlan16(); case InfoAreaTextMessages: - return CIconsStandard::appTextMessages16(); + return CIcons::appTextMessages16(); case InfoAreaSimulator: - return CIconsStandard::appSimulator16(); + return CIcons::appSimulator16(); case InfoAreaMappings: - return CIconsStandard::appMappings16(); + return CIcons::appMappings16(); case InfoAreaLog: - return CIconsStandard::appLog16(); + return CIcons::appLog16(); default: - return CIconsStandard::empty(); + return CIcons::empty(); } } diff --git a/src/blackgui/dockwidgetinfoarea.cpp b/src/blackgui/dockwidgetinfoarea.cpp index 4678cfc03..e9c8246f4 100644 --- a/src/blackgui/dockwidgetinfoarea.cpp +++ b/src/blackgui/dockwidgetinfoarea.cpp @@ -9,7 +9,7 @@ #include "dockwidgetinfoarea.h" #include "components/maininfoareacomponent.h" -#include "blackmisc/iconsstandard.h" +#include "blackmisc/icons.h" using namespace BlackGui::Components; diff --git a/src/blackgui/models/atcstationlistmodel.cpp b/src/blackgui/models/atcstationlistmodel.cpp index 5778fa6fc..5be679c46 100644 --- a/src/blackgui/models/atcstationlistmodel.cpp +++ b/src/blackgui/models/atcstationlistmodel.cpp @@ -44,7 +44,7 @@ namespace BlackGui case NotSet: case StationsOnline: this->m_columns.addColumn(CColumn("callsign", CAtcStation::IndexCallsignAsStringAsSet)); - this->m_columns.addColumn(CColumn(CAtcStation::IndexIcon, true)); + this->m_columns.addColumn(CColumn(CAtcStation::IndexPixmap, true)); this->m_columns.addColumn(CColumn("distance", CAtcStation::IndexDistance, Qt::AlignRight | Qt::AlignVCenter)); this->m_columns.addColumn(CColumn("frequency", CAtcStation::IndexFrequency, Qt::AlignRight | Qt::AlignVCenter)); this->m_columns.addColumn(CColumn("controllername", CAtcStation::IndexControllerRealName)); @@ -59,7 +59,7 @@ namespace BlackGui case StationsBooked: this->m_columns.addColumn(CColumn("callsign", CAtcStation::IndexCallsignAsStringAsSet)); - this->m_columns.addColumn(CColumn(CAtcStation::IndexIcon, true)); + this->m_columns.addColumn(CColumn(CAtcStation::IndexPixmap, true)); this->m_columns.addColumn(CColumn("controllername", CAtcStation::IndexControllerRealName)); this->m_columns.addColumn(CColumn("bookedfrom", CAtcStation::IndexBookedFrom)); this->m_columns.addColumn(CColumn("bookeduntil", CAtcStation::IndexBookedUntil)); diff --git a/src/blackgui/models/clientlistmodel.cpp b/src/blackgui/models/clientlistmodel.cpp index db2fe0fd0..ae5d9783d 100644 --- a/src/blackgui/models/clientlistmodel.cpp +++ b/src/blackgui/models/clientlistmodel.cpp @@ -9,6 +9,7 @@ #include "clientlistmodel.h" #include "blackmisc/blackmiscfreefunctions.h" +#include "blackmisc/icon.h" #include #include @@ -27,7 +28,7 @@ namespace BlackGui this->m_columns.addColumn(CColumn("", CClient::IndexCallsignIcon)); this->m_columns.addColumn(CColumn("callsign", CClient::IndexCallsign)); this->m_columns.addColumn(CColumn("realname", CClient::IndexRealName)); - this->m_columns.addColumn(CColumn("", CClient::IndexVoiceCapabilitiesIcon)); + this->m_columns.addColumn(CColumn("", CClient::IndexVoiceCapabilitiesPixmap)); this->m_columns.addColumn(CColumn("capabilities", CClient::IndexCapabilitiesString)); this->m_columns.addColumn(CColumn("model", CClient::IndexQueriedModelString)); this->m_columns.addColumn(CColumn("server", CClient::IndexServer)); @@ -53,7 +54,7 @@ namespace BlackGui if (role == Qt::DecorationRole) { CClient u = this->at(modelIndex); - return u.toIcon(); + return QVariant(u.toPixmap()); } } return CListModelBase::data(modelIndex, role); diff --git a/src/blackgui/models/statusmessagelistmodel.cpp b/src/blackgui/models/statusmessagelistmodel.cpp index b949da687..b6700329e 100644 --- a/src/blackgui/models/statusmessagelistmodel.cpp +++ b/src/blackgui/models/statusmessagelistmodel.cpp @@ -1,4 +1,5 @@ #include "statusmessagelistmodel.h" +#include "blackmisc/icon.h" #include "blackmisc/blackmiscfreefunctions.h" #include #include @@ -43,7 +44,7 @@ namespace BlackGui if (role == Qt::DecorationRole) { CStatusMessage msg = this->at(modelIndex); - return msg.toIcon(); + return QVariant(msg.toPixmap()); } else if (role == Qt::DisplayRole) { diff --git a/src/blackmisc/avatcstation.cpp b/src/blackmisc/avatcstation.cpp index c10ef0b15..904efeb8b 100644 --- a/src/blackmisc/avatcstation.cpp +++ b/src/blackmisc/avatcstation.cpp @@ -1,6 +1,7 @@ #include "avatcstation.h" #include "aviocomsystem.h" #include "voiceroom.h" +#include "icon.h" #include "blackmiscfreefunctions.h" using namespace BlackMisc::PhysicalQuantities; @@ -319,8 +320,8 @@ namespace BlackMisc return QVariant(this->m_callsign.asString()); case IndexCallsignAsStringAsSet: return QVariant(this->m_callsign.getStringAsSet()); - case IndexIcon: - return QVariant(this->m_callsign.toIcon()); + case IndexPixmap: + return QVariant(this->m_callsign.toPixmap()); case IndexController: return this->m_controller.toQVariant(); case IndexControllerRealName: diff --git a/src/blackmisc/avatcstation.h b/src/blackmisc/avatcstation.h index d18d7ccd4..ed3d1bb75 100644 --- a/src/blackmisc/avatcstation.h +++ b/src/blackmisc/avatcstation.h @@ -36,7 +36,7 @@ namespace BlackMisc enum ColumnIndex { IndexCallsign = 0, - IndexIcon, // representing icon + IndexPixmap, // representing icon IndexCallsignAsString, IndexCallsignAsStringAsSet, IndexController, diff --git a/src/blackmisc/avcallsign.cpp b/src/blackmisc/avcallsign.cpp index d5bf89098..a0e17b017 100644 --- a/src/blackmisc/avcallsign.cpp +++ b/src/blackmisc/avcallsign.cpp @@ -8,7 +8,7 @@ */ #include "avcallsign.h" -#include "iconsnetwork.h" +#include "iconlist.h" namespace BlackMisc { @@ -35,26 +35,26 @@ namespace BlackMisc /* * Iconify */ - const QPixmap &CCallsign::convertToIcon(const CCallsign &callsign) + const CIcon &CCallsign::convertToIcon(const CCallsign &callsign) { QString t = callsign.asString().toUpper(); - if (t.length() < 3) return CIconsNetworkAndAviation::roleUnknown(); + if (t.length() < 3) return CIconList::iconForIndex(CIcons::NetworkRoleUnknown); t = t.right(3); if (callsign.getStringAsSet().contains("_")) { - if ("APP" == t) return CIconsNetworkAndAviation::roleApproach(); - if ("GND" == t) return CIconsNetworkAndAviation::roleGround(); - if ("TWR" == t) return CIconsNetworkAndAviation::roleTower(); - if ("DEL" == t) return CIconsNetworkAndAviation::roleDelivery(); - if ("CTR" == t) return CIconsNetworkAndAviation::roleCenter(); - if ("SUP" == t) return CIconsNetworkAndAviation::roleSup(); - if ("OBS" == t) return CIconsNetworkAndAviation::roleObs(); - return CIconsNetworkAndAviation::roleUnknown(); + if ("APP" == t) return CIconList::iconForIndex(CIcons::NetworkRoleApproach); + if ("GND" == t) return CIconList::iconForIndex(CIcons::NetworkRoleGround); + if ("TWR" == t) return CIconList::iconForIndex(CIcons::NetworkRoleTower); + if ("DEL" == t) return CIconList::iconForIndex(CIcons::NetworkRoleDelivery); + if ("CTR" == t) return CIconList::iconForIndex(CIcons::NetworkRoleCenter); + if ("SUP" == t) return CIconList::iconForIndex(CIcons::NetworkRoleSup); + if ("OBS" == t) return CIconList::iconForIndex(CIcons::NetworkRoleApproach); + return CIconList::iconForIndex(CIcons::NetworkRoleUnknown); } else { - return CIconsNetworkAndAviation::rolePilot(); + return CIconList::iconForIndex(CIcons::NetworkRolePilot); } } diff --git a/src/blackmisc/avflightplan.h b/src/blackmisc/avflightplan.h index 65078c475..5eef242d1 100644 --- a/src/blackmisc/avflightplan.h +++ b/src/blackmisc/avflightplan.h @@ -199,6 +199,9 @@ namespace BlackMisc //! \copydoc CValueObject::fromJson virtual void fromJson(const QJsonObject &json) override; + //! \copydoc CValueObject::toIcon + virtual CIcon toIcon() const override; + //! Register metadata static void registerMetadata(); diff --git a/src/blackmisc/blackmisc.qrc b/src/blackmisc/blackmisc.qrc index 8f7c55edc..16851397d 100644 --- a/src/blackmisc/blackmisc.qrc +++ b/src/blackmisc/blackmisc.qrc @@ -214,6 +214,39 @@ icons/diagona/icons/compass--minus.png icons/diagona/icons/compass--pencil.png icons/diagona/icons/compass--plus.png + icons/diagona/icons/globe.png + icons/diagona/icons/globe-medium.png + icons/diagona/icons/globe-medium-green.png + icons/diagona/icons/globe-place.png + icons/diagona/icons/globe-small-green.png + icons/diagona/icons/script-globe.png + icons/diagona/icons/radio.png + icons/diagona/icons/radio--exclamation.png + icons/diagona/icons/radio-old.png + icons/diagona/icons/radio--plus.png + icons/diagona/icons/arrow-000-medium.png + icons/diagona/icons/arrow-000-small.png + icons/diagona/icons/arrow-045.png + icons/diagona/icons/arrow-045-medium.png + icons/diagona/icons/arrow-045-small.png + icons/diagona/icons/arrow-090.png + icons/diagona/icons/arrow-090-medium.png + icons/diagona/icons/arrow-090-small.png + icons/diagona/icons/arrow-135.png + icons/diagona/icons/arrow-135-medium.png + icons/diagona/icons/arrow-135-small.png + icons/diagona/icons/arrow-180.png + icons/diagona/icons/arrow-180-medium.png + icons/diagona/icons/arrow-180-small.png + icons/diagona/icons/arrow-225.png + icons/diagona/icons/arrow-225-medium.png + icons/diagona/icons/arrow-225-small.png + icons/diagona/icons/arrow-270.png + icons/diagona/icons/arrow-270-medium.png + icons/diagona/icons/arrow-270-small.png + icons/diagona/icons/arrow-315.png + icons/diagona/icons/arrow-315-medium.png + icons/diagona/icons/arrow-315-small.png icons/own/app.jpg @@ -257,8 +290,6 @@ icons/qled/round_purple.svg icons/qled/round_red.svg icons/qled/round_yellow.svg - icons/qled/screenshot.png - icons/qled/screenshot2.png icons/qled/square_blue.svg icons/qled/square_green.svg icons/qled/square_grey.svg diff --git a/src/blackmisc/blackmiscfreefunctions.cpp b/src/blackmisc/blackmiscfreefunctions.cpp index a3aa4c117..359a39c9a 100644 --- a/src/blackmisc/blackmiscfreefunctions.cpp +++ b/src/blackmisc/blackmiscfreefunctions.cpp @@ -13,13 +13,14 @@ #include "mathallclasses.h" #include "geoallclasses.h" #include "networkallclasses.h" -#include "settingsblackmiscclasses.h" +#include "audioallclasses.h" #include "hwallclasses.h" +#include "settingsblackmiscclasses.h" #include "indexvariantmap.h" #include "namevariantpairlist.h" #include "variant.h" #include "statusmessagelist.h" -#include "audioallclasses.h" +#include "iconlist.h" #include #include #include @@ -151,9 +152,10 @@ void BlackMisc::registerMetadata() CIndexVariantMap::registerMetadata(); CNameVariantPair::registerMetadata(); CNameVariantPairList::registerMetadata(); - CStatusMessage::registerMetadata(); CStatusMessageList::registerMetadata(); + CIcon::registerMetadata(); + CIconList::registerMetadata(); // sub namespaces PhysicalQuantities::registerMetadata(); diff --git a/src/blackmisc/geoearthangle.cpp b/src/blackmisc/geoearthangle.cpp index a8d67e149..1eec7bce8 100644 --- a/src/blackmisc/geoearthangle.cpp +++ b/src/blackmisc/geoearthangle.cpp @@ -10,6 +10,7 @@ #include "blackmisc/geoearthangle.h" #include "blackmisc/geolatitude.h" #include "blackmisc/geolongitude.h" +#include "blackmisc/iconlist.h" namespace BlackMisc { @@ -102,6 +103,14 @@ namespace BlackMisc return CAngle::compareImpl(other); } + /* + * Icon + */ + template CIcon CEarthAngle::toIcon() const + { + return BlackMisc::CIconList::iconForIndex(CIcons::GeoPosition); + } + // see here for the reason of thess forward instantiations // http://www.parashift.com/c++-faq/separate-template-class-defn-from-decl.html template class CEarthAngle; diff --git a/src/blackmisc/geoearthangle.h b/src/blackmisc/geoearthangle.h index b04113dbc..936baa7b1 100644 --- a/src/blackmisc/geoearthangle.h +++ b/src/blackmisc/geoearthangle.h @@ -156,6 +156,8 @@ namespace BlackMisc return l; } + //! \copydoc CValueObject::toIcon + CIcon toIcon() const override; //! Register metadata static void registerMetadata(); diff --git a/src/blackmisc/namevariantpair.cpp b/src/blackmisc/namevariantpair.cpp index f9b6487b5..6e7658efd 100644 --- a/src/blackmisc/namevariantpair.cpp +++ b/src/blackmisc/namevariantpair.cpp @@ -8,6 +8,7 @@ */ #include "namevariantpair.h" +#include "iconlist.h" #include "blackmisc/blackmiscfreefunctions.h" namespace BlackMisc @@ -16,10 +17,26 @@ namespace BlackMisc /* * Constructor */ - CNameVariantPair::CNameVariantPair(const QString &name, const CVariant &variant) - : m_name(name), m_variant(variant) + CNameVariantPair::CNameVariantPair(const QString &name, const CVariant &variant, const CIcon &icon) + : m_name(name), m_variant(variant), m_icon(icon) { } + /* + * Icon + */ + const CIcon &CNameVariantPair::getIcon() const + { + return this->m_icon; + } + + /* + * Icon? + */ + bool CNameVariantPair::hasIcon() const + { + return this->getIcon().isSet(); + } + /* * Convert to string */ @@ -108,6 +125,10 @@ namespace BlackMisc return QVariant(this->m_name); case IndexVariant: return this->m_variant.toQVariant(); + case IndexIcon: + return this->m_icon.toQVariant(); + case IndexPixmap: + return this->m_icon.toPixmap(); default: break; } @@ -130,6 +151,17 @@ namespace BlackMisc case IndexVariant: this->m_variant = variant; break; + case IndexIcon: + if (variant.canConvert()) + { + CIcons::IconIndexes index = static_cast(variant.toInt()); + this->m_icon = CIconList::iconForIndex(index); + } + else + { + this->m_icon = variant.value(); + } + break; default: Q_ASSERT_X(false, "CNameVariantPair", "index unknown"); break; diff --git a/src/blackmisc/namevariantpair.h b/src/blackmisc/namevariantpair.h index 6f2b7ac67..f7cd8e495 100644 --- a/src/blackmisc/namevariantpair.h +++ b/src/blackmisc/namevariantpair.h @@ -14,6 +14,7 @@ #include "variant.h" #include "valueobject.h" +#include "icon.h" namespace BlackMisc { @@ -27,7 +28,7 @@ namespace BlackMisc CNameVariantPair() {} //! Constructor. - CNameVariantPair(const QString &name, const CVariant &variant); + CNameVariantPair(const QString &name, const CVariant &variant, const CIcon &icon = CIcon()); //! \copydoc CValueObject::toQVariant virtual QVariant toQVariant() const override { return QVariant::fromValue(*this); } @@ -44,6 +45,12 @@ namespace BlackMisc //! Set variant. void setVariant(const CVariant &variant) { m_variant = variant; } + //! Icon + const CIcon &getIcon() const; + + //! Has icon + bool hasIcon() const; + //! Equal operator == bool operator ==(const CNameVariantPair &other) const; @@ -70,6 +77,8 @@ namespace BlackMisc { IndexName = 0, IndexVariant, + IndexIcon, + IndexPixmap }; //! \copydoc CValueObject::propertyByIndex() @@ -99,12 +108,13 @@ namespace BlackMisc private: BLACK_ENABLE_TUPLE_CONVERSION(CNameVariantPair) - QString m_name; + QString m_name; CVariant m_variant; + CIcon m_icon; //!< optional icon }; } // namespace -BLACK_DECLARE_TUPLE_CONVERSION(BlackMisc::CNameVariantPair, (o.m_name, o.m_variant)) +BLACK_DECLARE_TUPLE_CONVERSION(BlackMisc::CNameVariantPair, (o.m_name, o.m_variant, o.m_icon)) Q_DECLARE_METATYPE(BlackMisc::CNameVariantPair) #endif // guard