From 7ca06c196df2303c4546cb50de3f2022d997f57d Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 23 Sep 2015 02:48:34 +0200 Subject: [PATCH] refs #452, added icons to blackmisc --- src/blackmisc/blackmisc.qrc | 51 ++ src/blackmisc/icon.cpp | 61 +- src/blackmisc/icon.h | 42 +- src/blackmisc/iconlist.cpp | 250 ++++---- src/blackmisc/icons.cpp | 580 ++++++++++++++---- src/blackmisc/icons.h | 184 +++++- src/blackmisc/icons/famfamfam/License.txt | 3 + .../icons/own/swift/swift16Database.png | Bin 0 -> 916 bytes src/blackmisc/icons/pastel/License.txt | 13 + .../icons/preloaders/FillingRing16.gif | Bin 0 -> 4630 bytes .../icons/preloaders/FillingRing32.gif | Bin 0 -> 10269 bytes .../icons/preloaders/FillingRing64.gif | Bin 0 -> 19096 bytes .../icons/preloaders/FloatingRays16.gif | Bin 0 -> 4297 bytes .../icons/preloaders/FloatingRays32.gif | Bin 0 -> 7270 bytes .../icons/preloaders/FloatingRays64.gif | Bin 0 -> 14574 bytes src/blackmisc/icons/preloaders/License.txt | 5 + .../icons/preloaders/Preloaders.net.url | 2 + 17 files changed, 916 insertions(+), 275 deletions(-) create mode 100644 src/blackmisc/icons/famfamfam/License.txt create mode 100644 src/blackmisc/icons/own/swift/swift16Database.png create mode 100644 src/blackmisc/icons/pastel/License.txt create mode 100644 src/blackmisc/icons/preloaders/FillingRing16.gif create mode 100644 src/blackmisc/icons/preloaders/FillingRing32.gif create mode 100644 src/blackmisc/icons/preloaders/FillingRing64.gif create mode 100644 src/blackmisc/icons/preloaders/FloatingRays16.gif create mode 100644 src/blackmisc/icons/preloaders/FloatingRays32.gif create mode 100644 src/blackmisc/icons/preloaders/FloatingRays64.gif create mode 100644 src/blackmisc/icons/preloaders/License.txt create mode 100644 src/blackmisc/icons/preloaders/Preloaders.net.url diff --git a/src/blackmisc/blackmisc.qrc b/src/blackmisc/blackmisc.qrc index 9a118d6cb..348d528ca 100644 --- a/src/blackmisc/blackmisc.qrc +++ b/src/blackmisc/blackmisc.qrc @@ -71,6 +71,16 @@ icons/pastel/16/lock-edit.png icons/pastel/16/lock-go.png icons/pastel/16/lock-open.png + icons/pastel/16/database.png + icons/pastel/16/database-add.png + icons/pastel/16/database-connect.png + icons/pastel/16/database-delete.png + icons/pastel/16/database-edit.png + icons/pastel/16/database-error.png + icons/pastel/16/database-key.png + icons/pastel/16/database-lightning.png + icons/pastel/16/database-table.png + icons/pastel/16/paintcan.png icons/vatsim/C1.png @@ -312,6 +322,38 @@ icons/diagona/icons/toggle-expand.png icons/diagona/icons/toggle-small.png icons/diagona/icons/toggle-small-expand.png + icons/diagona/icons/color.png + icons/diagona/icons/color-adjustment.png + icons/diagona/icons/color-adjustment-green.png + icons/diagona/icons/color-adjustment-red.png + icons/diagona/icons/color--arrow.png + icons/diagona/icons/color--exclamation.png + icons/diagona/icons/color--minus.png + icons/diagona/icons/color--pencil.png + icons/diagona/icons/color--plus.png + icons/diagona/icons/color-small.png + icons/diagona/icons/color-swatch.png + icons/diagona/icons/color-swatches.png + icons/diagona/icons/color-swatch-small.png + icons/diagona/icons/ui-color-picker.png + icons/diagona/icons/ui-color-picker-default.png + icons/diagona/icons/ui-color-picker-switch.png + icons/diagona/icons/ui-color-picker-transparent.png + icons/diagona/icons/blue-document-hf-insert.png + icons/diagona/icons/blue-document-hf-insert-footer.png + icons/diagona/icons/blue-document-insert.png + icons/diagona/icons/calendar-insert.png + icons/diagona/icons/database-insert.png + icons/diagona/icons/document-hf-insert.png + icons/diagona/icons/document-hf-insert-footer.png + icons/diagona/icons/document-insert.png + icons/diagona/icons/node-insert.png + icons/diagona/icons/node-insert-child.png + icons/diagona/icons/node-insert-next.png + icons/diagona/icons/node-insert-previous.png + icons/diagona/icons/table-insert.png + icons/diagona/icons/table-insert-column.png + icons/diagona/icons/table-insert-row.png icons/own/app.jpg @@ -342,6 +384,7 @@ icons/own/swift/swift64Database.png icons/own/swift/swift128Database.png icons/own/swift/swift24Database.png + icons/own/swift/swift16Database.png icons/qled/circle_black.svg @@ -386,4 +429,12 @@ icons/textures/texture-inner.jpg icons/textures/texture-outer.jpg + + icons/preloaders/FillingRing64.gif + icons/preloaders/FloatingRays64.gif + icons/preloaders/FillingRing16.gif + icons/preloaders/FillingRing32.gif + icons/preloaders/FloatingRays16.gif + icons/preloaders/FloatingRays32.gif + diff --git a/src/blackmisc/icon.cpp b/src/blackmisc/icon.cpp index 665094e5e..aac53ed51 100644 --- a/src/blackmisc/icon.cpp +++ b/src/blackmisc/icon.cpp @@ -13,34 +13,66 @@ namespace BlackMisc { + CIcon::CIcon(CIcons::IconIndex index, const QString &descriptiveText) : + m_index(static_cast(index)), m_descriptiveText(descriptiveText) {} - /* - * Pixmap - */ - QPixmap CIcon::toPixmap() const + CIcon::CIcon(const QPixmap &pixmap, const QString &descriptiveText) : + m_index(static_cast(CIcons::IconIsGenerated)), m_descriptiveText(descriptiveText), m_pixmap(pixmap) + { } + + CIcon::CIcon(const QString &resourceFilePath, const QString &descriptiveText) : + m_index(static_cast(CIcons::IconIsFile)), m_descriptiveText(descriptiveText), m_pixmap(CIcons::pixmapByResourceFileName(resourceFilePath)) + {} + + CIcons::IconIndex CIcon::getIndex() const { - return CIcons::pixmapByIndex(getIndex(), this->m_rotateDegrees); + return static_cast(this->m_index); + } + + bool CIcon::isIndexBased() const + { + return m_index >= 0 && m_index < static_cast(CIcons::IconIsGenerated); + } + + bool CIcon::isGenerated() const + { + return getIndex() == CIcons::IconIsGenerated; + } + + bool CIcon::isFileBased() const + { + return getIndex() == CIcons::IconIsFile; + } + + bool CIcon::isSet() const + { + return (this->m_index != static_cast(CIcons::NotSet)); + } + + QPixmap CIcon::toPixmap() const + { + if (this->isSet()) + { + if (this->isGenerated()) { return m_pixmap; } + if (this->isFileBased()) { return m_pixmap; } + return CIcons::pixmapByIndex(getIndex(), this->m_rotateDegrees); + } + else + { + return CIcons::pixmapByIndex(getIndex()); + } } - /* - * Icon - */ QIcon CIcon::toQIcon() const { return QIcon(toPixmap()); } - /* - * Rotate - */ void CIcon::setRotation(const PhysicalQuantities::CAngle &rotate) { this->m_rotateDegrees = rotate.valueRounded(PhysicalQuantities::CAngleUnit::deg(), 0); } - /* - * String - */ QString CIcon::convertToQString(bool i18n) const { Q_UNUSED(i18n); @@ -60,5 +92,4 @@ namespace BlackMisc Q_ASSERT_X(index >= 0 && index < CIconList::allIcons().size(), "iconForIndex", "wrong index"); return CIconList::allIcons()[index]; } - } // namespace diff --git a/src/blackmisc/icon.h b/src/blackmisc/icon.h index a92036c56..94d8e0c47 100644 --- a/src/blackmisc/icon.h +++ b/src/blackmisc/icon.h @@ -53,8 +53,8 @@ namespace BlackMisc * the derived class uses this macro to disambiguate the inherited members. */ # define BLACKMISC_DECLARE_USING_MIXIN_ICON(DERIVED) \ - using ::BlackMisc::Mixin::Icon::toIcon; \ - using ::BlackMisc::Mixin::Icon::toPixmap; + using ::BlackMisc::Mixin::Icon::toIcon; \ + using ::BlackMisc::Mixin::Icon::toPixmap; } // Mixin //! Value object for icons. An icon is stored in the global icon repository and @@ -75,14 +75,31 @@ namespace BlackMisc CIcon() = default; //! Constructor. - CIcon(CIcons::IconIndex index, const QString &descriptiveText) : - m_index(static_cast(index)), m_descriptiveText(descriptiveText) {} + CIcon(CIcons::IconIndex index, const QString &descriptiveText); + + //! Constructor for generated icon + CIcon(const QPixmap &pixmap, const QString &descriptiveText); + + //! Construcror for file icons + CIcon(const QString &resourceFilePath, const QString &descriptiveText); //! Get descriptive text const QString &getDescriptiveText() const { return this->m_descriptiveText; } //! Index - CIcons::IconIndex getIndex() const { return static_cast< CIcons::IconIndex>(this->m_index);} + CIcons::IconIndex getIndex() const; + + //! Index based + bool isIndexBased() const; + + //! Generated icon + bool isGenerated() const; + + //! File based? + bool isFileBased() const; + + //! Icon set? + bool isSet() const; //! Corresponding pixmap QPixmap toPixmap() const; @@ -90,9 +107,6 @@ namespace BlackMisc //! A QIcon QIcon toQIcon() const; - //! Icon set? - bool isSet() const { return (this->m_index != static_cast(CIcons::NotSet));} - //! Rotate by n degrees void setRotation(int degrees) { this->m_rotateDegrees = degrees; } @@ -117,8 +131,9 @@ namespace BlackMisc private: BLACK_ENABLE_TUPLE_CONVERSION(CIcon) int m_index = static_cast(CIcons::NotSet); - int m_rotateDegrees = 0; - QString m_descriptiveText; + int m_rotateDegrees = 0; //!< Rotation + QString m_descriptiveText; //!< what does it represent? + QPixmap m_pixmap; //!< Used with generated pixmaps, when not used with index }; namespace Private @@ -142,7 +157,12 @@ namespace BlackMisc } } // namespace -BLACK_DECLARE_TUPLE_CONVERSION(BlackMisc::CIcon, (o.m_index, o.m_descriptiveText)) +BLACK_DECLARE_TUPLE_CONVERSION(BlackMisc::CIcon, ( + attr(o.m_index), + attr(o.m_rotateDegrees, flags < DisabledForComparison | DisabledForHashing > ()), + attr(o.m_descriptiveText) + )) + Q_DECLARE_METATYPE(BlackMisc::CIcon) #endif // guard diff --git a/src/blackmisc/iconlist.cpp b/src/blackmisc/iconlist.cpp index f11c6e383..80fa265f0 100644 --- a/src/blackmisc/iconlist.cpp +++ b/src/blackmisc/iconlist.cpp @@ -33,120 +33,144 @@ namespace BlackMisc const CIconList &CIconList::allIcons() { + // keep indexes alphabetically sorted and in sync with CIcons + // req. for "iconByIndex" static const CIconList icons( { - // keep indexes alphabetically sorted and in sync with CIcons - // req. for "iconByIndex" - CIcon(CIcons::ApplicationIconAircrafts, "aircrafts"), - CIcon(CIcons::ApplicationIconAtc, "ATC"), - CIcon(CIcons::ApplicationIconAudio, "audio"), - CIcon(CIcons::ApplicationIconCockpit, "cockpit"), - CIcon(CIcons::ApplicationIconFlightPlan, "flightplan"), - CIcon(CIcons::ApplicationIconLog, "log"), - CIcon(CIcons::ApplicationIconMappings, "mappings"), - CIcon(CIcons::ApplicationIconSettings, "settings"), - CIcon(CIcons::ApplicationIconSimulator, "simulator"), - CIcon(CIcons::ApplicationIconTextMessages, "text messages"), - CIcon(CIcons::ApplicationIconWeather, "weather"), - CIcon(CIcons::AviationAtis, "ATIS"), - CIcon(CIcons::AviationAttitudeIndicator, "attitude indicator"), - CIcon(CIcons::AviationMetar, "METAR"), - CIcon(CIcons::GeoPosition, "geo position"), - CIcon(CIcons::NetworkCapabilityTextOnly, "text only"), - CIcon(CIcons::NetworkCapabilityUnknown, "unknown"), - CIcon(CIcons::NetworkCapabilityVoice, "voice"), - CIcon(CIcons::NetworkCapabilityVoiceBackground, "voice"), - CIcon(CIcons::NetworkCapabilityVoiceReceiveOnly, "voice receive"), - CIcon(CIcons::NetworkCapabilityVoiceReceiveOnlyBackground, "voice receive"), - CIcon(CIcons::NetworkRoleApproach, "ATC approach"), - CIcon(CIcons::NetworkRoleC1, "C1"), - CIcon(CIcons::NetworkRoleC3, "C3"), - CIcon(CIcons::NetworkRoleCenter, "ATC center"), - CIcon(CIcons::NetworkRoleDelivery, "ATC delivery"), - CIcon(CIcons::NetworkRoleFss, "FSS"), - CIcon(CIcons::NetworkRoleGround, "ATC ground"), - CIcon(CIcons::NetworkRoleI1, "I1 (instructor)"), - CIcon(CIcons::NetworkRoleI3, "I3 (instructor)"), - CIcon(CIcons::NetworkRoleMnt, "Mentor"), - CIcon(CIcons::NetworkRoleObs, "observer"), - CIcon(CIcons::NetworkRolePilot, "pilot"), - CIcon(CIcons::NetworkRoleS1, "S1"), - CIcon(CIcons::NetworkRoleS2, "S2"), - CIcon(CIcons::NetworkRoleS3, "S3"), - CIcon(CIcons::NetworkRoleSup, "supervisor"), - CIcon(CIcons::NetworkRoleTower, "ATC tower"), - CIcon(CIcons::NetworkRoleUnknown, "unknown"), - CIcon(CIcons::NetworkVatsimLogo, "VATSIM"), - CIcon(CIcons::NetworkVatsimLogoWhite, "VATSIM"), - CIcon(CIcons::NotSet, "?"), - CIcon(CIcons::StandardIconAppAircrafts16, "aircrafts"), - CIcon(CIcons::StandardIconAppAtc16, "ATC"), - CIcon(CIcons::StandardIconAppFlightPlan16, "flight plan"), - CIcon(CIcons::StandardIconAppLog16, "log"), - CIcon(CIcons::StandardIconAppMappings16, "mappings"), - CIcon(CIcons::StandardIconAppSettings16, "settings"), - CIcon(CIcons::StandardIconAppSimulator16, "simulator"), - CIcon(CIcons::StandardIconAppTextMessages16, "text messages"), - CIcon(CIcons::StandardIconAppUsers16, "users"), - CIcon(CIcons::StandardIconAppWeather16, "weather"), - CIcon(CIcons::StandardIconArrowMediumEast16, "arrow east"), - CIcon(CIcons::StandardIconArrowMediumNorth16, "arrow north"), - CIcon(CIcons::StandardIconArrowMediumSouth16, "arrow south"), - CIcon(CIcons::StandardIconArrowMediumWest16, "arrow west"), - CIcon(CIcons::StandardIconClose16, "close"), - CIcon(CIcons::StandardIconCross16, "cross"), - CIcon(CIcons::StandardIconCrossCircle16, "cross circle"), - CIcon(CIcons::StandardIconCrossSmall16, "cross (small)"), - CIcon(CIcons::StandardIconCrossWhite16, "cross white"), - CIcon(CIcons::StandardIconDelete16, "delete"), - CIcon(CIcons::StandardIconDockBottom16, "dock bottom"), - CIcon(CIcons::StandardIconDockTop16, "dock top"), - CIcon(CIcons::StandardIconEmpty, "empty"), - CIcon(CIcons::StandardIconEmpty16, "empty"), - CIcon(CIcons::StandardIconError16, "error"), - CIcon(CIcons::StandardIconFloatAll16, "float all"), - CIcon(CIcons::StandardIconFloatOne16, "floast one"), - CIcon(CIcons::StandardIconGlobe16, "globe"), - CIcon(CIcons::StandardIconHeadingOne16, "heading"), - CIcon(CIcons::StandardIconInfo16, "info"), - CIcon(CIcons::StandardIconJoystick16, "joystick"), - CIcon(CIcons::StandardIconLockClosed16, "lock"), - CIcon(CIcons::StandardIconLockOpen16, "lock open"), - CIcon(CIcons::StandardIconMonitorError16, "monitor error"), - CIcon(CIcons::StandardIconPaperPlane16, "plane"), - CIcon(CIcons::StandardIconPlugin16, "plugin"), - CIcon(CIcons::StandardIconRadar16, "radar"), - CIcon(CIcons::StandardIconRadio16, "radio"), - CIcon(CIcons::StandardIconRefresh16, "refresh"), - CIcon(CIcons::StandardIconResize16, "resize"), - CIcon(CIcons::StandardIconResizeHorizontal16, "resize (horizontal)"), - CIcon(CIcons::StandardIconResizeVertical16, "resize (vertical)"), - CIcon(CIcons::StandardIconSpeakerNetwork16, "speaker (network)"), - CIcon(CIcons::StandardIconStatusBar16, "status bar"), - CIcon(CIcons::StandardIconSwift24, "swift"), - CIcon(CIcons::StandardIconSwift48, "swift"), - CIcon(CIcons::StandardIconSwiftDatabase24, "swift"), - CIcon(CIcons::StandardIconSwiftDatabase48, "swift"), - CIcon(CIcons::StandardIconSwiftNova24, "swift"), - CIcon(CIcons::StandardIconSwiftNova48, "swift"), - CIcon(CIcons::StandardIconTableRelationship16, "relationship"), - CIcon(CIcons::StandardIconTableSheet16, "table sheet"), - CIcon(CIcons::StandardIconText16, "text"), - CIcon(CIcons::StandardIconTick16, "tick"), - CIcon(CIcons::StandardIconTickRed16, "tick red"), - CIcon(CIcons::StandardIconTickSmall16, "tick (small)"), - CIcon(CIcons::StandardIconTickWhite16, "tick white"), - CIcon(CIcons::StandardIconUnknown16, "unknwon"), - CIcon(CIcons::StandardIconUser16, "user"), - CIcon(CIcons::StandardIconUsers16, "users"), - CIcon(CIcons::StandardIconViewMulticolumn16, "view multicolumn"), - CIcon(CIcons::StandardIconViewTile16, "view tile"), - CIcon(CIcons::StandardIconVolumeHigh16, "volume hight"), - CIcon(CIcons::StandardIconVolumeLow16, "volume low"), - CIcon(CIcons::StandardIconVolumeMuted16, "muted"), - CIcon(CIcons::StandardIconWarning16, "warning"), - CIcon(CIcons::StandardIconWeatherCloudy16, "cloudy"), - CIcon(CIcons::StandardIconWrench16, "wrench") + CIcon(CIcons::ApplicationAircraft, "aircraft"), + CIcon(CIcons::ApplicationAircraftIcao, "ICAO aircraft"), + CIcon(CIcons::ApplicationAirlineIcao, "ICAO airlines"), + CIcon(CIcons::ApplicationAtc, "ATC"), + CIcon(CIcons::ApplicationAudio, "audio"), + CIcon(CIcons::ApplicationCockpit, "cockpit"), + CIcon(CIcons::ApplicationCountries, "countries"), + CIcon(CIcons::ApplicationDatabase, "database"), + CIcon(CIcons::ApplicationDbStash, "DB stash"), + CIcon(CIcons::ApplicationDistributors, "distributors"), + CIcon(CIcons::ApplicationFlightPlan, "flightplan"), + CIcon(CIcons::ApplicationLog, "log"), + CIcon(CIcons::ApplicationMappings, "mappings"), + CIcon(CIcons::ApplicationLiveries, "liveries"), + CIcon(CIcons::ApplicationModels, "models"), + CIcon(CIcons::ApplicationSettings, "settings"), + CIcon(CIcons::ApplicationSimulator, "simulator"), + CIcon(CIcons::ApplicationTextMessages, "text messages"), + CIcon(CIcons::ApplicationWeather, "weather"), + CIcon(CIcons::AviationAtis, "ATIS"), + CIcon(CIcons::AviationAttitudeIndicator, "attitude indicator"), + CIcon(CIcons::AviationMetar, "METAR"), + CIcon(CIcons::GeoPosition, "geo position"), + CIcon(CIcons::NetworkCapabilityTextOnly, "text only"), + CIcon(CIcons::NetworkCapabilityUnknown, "unknown"), + CIcon(CIcons::NetworkCapabilityVoice, "voice"), + CIcon(CIcons::NetworkCapabilityVoiceBackground, "voice"), + CIcon(CIcons::NetworkCapabilityVoiceReceiveOnly, "voice receive"), + CIcon(CIcons::NetworkCapabilityVoiceReceiveOnlyBackground, "voice receive"), + CIcon(CIcons::NetworkRoleApproach, "ATC approach"), + CIcon(CIcons::NetworkRoleC1, "C1"), + CIcon(CIcons::NetworkRoleC3, "C3"), + CIcon(CIcons::NetworkRoleCenter, "ATC center"), + CIcon(CIcons::NetworkRoleDelivery, "ATC delivery"), + CIcon(CIcons::NetworkRoleFss, "FSS"), + CIcon(CIcons::NetworkRoleGround, "ATC ground"), + CIcon(CIcons::NetworkRoleI1, "I1 (instructor)"), + CIcon(CIcons::NetworkRoleI3, "I3 (instructor)"), + CIcon(CIcons::NetworkRoleMnt, "Mentor"), + CIcon(CIcons::NetworkRoleObs, "observer"), + CIcon(CIcons::NetworkRolePilot, "pilot"), + CIcon(CIcons::NetworkRoleS1, "S1"), + CIcon(CIcons::NetworkRoleS2, "S2"), + CIcon(CIcons::NetworkRoleS3, "S3"), + CIcon(CIcons::NetworkRoleSup, "supervisor"), + CIcon(CIcons::NetworkRoleTower, "ATC tower"), + CIcon(CIcons::NetworkRoleUnknown, "unknown"), + CIcon(CIcons::NetworkVatsimLogo, "VATSIM"), + CIcon(CIcons::NetworkVatsimLogoWhite, "VATSIM"), + CIcon(CIcons::NotSet, "?"), + CIcon(CIcons::StandardIconAppAircrafts16, "aircrafts"), + CIcon(CIcons::StandardIconAppAtc16, "ATC"), + CIcon(CIcons::StandardIconAppFlightPlan16, "flight plan"), + CIcon(CIcons::StandardIconAppLog16, "log"), + CIcon(CIcons::StandardIconAppMappings16, "mappings"), + CIcon(CIcons::StandardIconAppSettings16, "settings"), + CIcon(CIcons::StandardIconAppSimulator16, "simulator"), + CIcon(CIcons::StandardIconAppTextMessages16, "text messages"), + CIcon(CIcons::StandardIconAppUsers16, "users"), + CIcon(CIcons::StandardIconAppWeather16, "weather"), + CIcon(CIcons::StandardIconArrowMediumEast16, "arrow east"), + CIcon(CIcons::StandardIconArrowMediumNorth16, "arrow north"), + CIcon(CIcons::StandardIconArrowMediumSouth16, "arrow south"), + CIcon(CIcons::StandardIconArrowMediumWest16, "arrow west"), + CIcon(CIcons::StandardIconClose16, "close"), + CIcon(CIcons::StandardIconColor16, "color"), + CIcon(CIcons::StandardIconColorPicker16, "color picker"), + CIcon(CIcons::StandardIconColorSwatch16, "color swatch"), + CIcon(CIcons::StandardIconCross16, "cross"), + CIcon(CIcons::StandardIconCrossCircle16, "cross circle"), + CIcon(CIcons::StandardIconCrossSmall16, "cross (small)"), + CIcon(CIcons::StandardIconCrossWhite16, "cross white"), + CIcon(CIcons::StandardIconDatabase16, "database"), + CIcon(CIcons::StandardIconDatabaseAdd16, "add to database"), + CIcon(CIcons::StandardIconDatabaseConnect16, "connect database"), + CIcon(CIcons::StandardIconDatabaseDelete16, "delete from database"), + CIcon(CIcons::StandardIconDatabaseEdit16, "edit database"), + CIcon(CIcons::StandardIconDatabaseError16, "error"), + CIcon(CIcons::StandardIconDatabaseKey16, "key"), + CIcon(CIcons::StandardIconDatabaseTable16, "table"), + CIcon(CIcons::StandardIconDelete16, "delete"), + CIcon(CIcons::StandardIconDockBottom16, "dock bottom"), + CIcon(CIcons::StandardIconDockTop16, "dock top"), + CIcon(CIcons::StandardIconDragAndDrop16, "drag and drop"), + CIcon(CIcons::StandardIconEmpty, "empty"), + CIcon(CIcons::StandardIconEmpty16, "empty"), + CIcon(CIcons::StandardIconError16, "error"), + CIcon(CIcons::StandardIconFloatAll16, "float all"), + CIcon(CIcons::StandardIconFloatOne16, "floast one"), + CIcon(CIcons::StandardIconGlobe16, "globe"), + CIcon(CIcons::StandardIconHeadingOne16, "heading"), + CIcon(CIcons::StandardIconInfo16, "info"), + CIcon(CIcons::StandardIconJoystick16, "joystick"), + CIcon(CIcons::StandardIconLockClosed16, "lock"), + CIcon(CIcons::StandardIconLockOpen16, "lock open"), + CIcon(CIcons::StandardIconMonitorError16, "monitor error"), + CIcon(CIcons::StandardIconPaperPlane16, "plane"), + CIcon(CIcons::StandardIconPaintCan16, "paint can"), + CIcon(CIcons::StandardIconPlugin16, "plugin"), + CIcon(CIcons::StandardIconRadar16, "radar"), + CIcon(CIcons::StandardIconRadio16, "radio"), + CIcon(CIcons::StandardIconRefresh16, "refresh"), + CIcon(CIcons::StandardIconResize16, "resize"), + CIcon(CIcons::StandardIconResizeHorizontal16, "resize (horizontal)"), + CIcon(CIcons::StandardIconResizeVertical16, "resize (vertical)"), + CIcon(CIcons::StandardIconSpeakerNetwork16, "speaker (network)"), + CIcon(CIcons::StandardIconStatusBar16, "status bar"), + CIcon(CIcons::StandardIconTableRelationship16, "relationship"), + CIcon(CIcons::StandardIconTableSheet16, "table sheet"), + CIcon(CIcons::StandardIconText16, "text"), + CIcon(CIcons::StandardIconTick16, "tick"), + CIcon(CIcons::StandardIconTickRed16, "tick red"), + CIcon(CIcons::StandardIconTickSmall16, "tick (small)"), + CIcon(CIcons::StandardIconTickWhite16, "tick white"), + CIcon(CIcons::StandardIconUnknown16, "unknwon"), + CIcon(CIcons::StandardIconUser16, "user"), + CIcon(CIcons::StandardIconUsers16, "users"), + CIcon(CIcons::StandardIconViewMulticolumn16, "view multicolumn"), + CIcon(CIcons::StandardIconViewTile16, "view tile"), + CIcon(CIcons::StandardIconVolumeHigh16, "volume hight"), + CIcon(CIcons::StandardIconVolumeLow16, "volume low"), + CIcon(CIcons::StandardIconVolumeMuted16, "muted"), + CIcon(CIcons::StandardIconWarning16, "warning"), + CIcon(CIcons::StandardIconWeatherCloudy16, "cloudy"), + CIcon(CIcons::StandardIconWrench16, "wrench"), + CIcon(CIcons::Swift16, "swift"), + CIcon(CIcons::Swift24, "swift"), + CIcon(CIcons::Swift48, "swift"), + CIcon(CIcons::SwiftDatabase16, "swift"), + CIcon(CIcons::SwiftDatabase24, "swift"), + CIcon(CIcons::SwiftDatabase48, "swift"), + CIcon(CIcons::SwiftNova16, "swift"), + CIcon(CIcons::SwiftNova24, "swift"), + CIcon(CIcons::SwiftNova48, "swift") }); return icons; } @@ -160,4 +184,4 @@ namespace BlackMisc { return CIcon::iconByIndex(index); } -} +} // ns diff --git a/src/blackmisc/icons.cpp b/src/blackmisc/icons.cpp index 868193e1e..381eec805 100644 --- a/src/blackmisc/icons.cpp +++ b/src/blackmisc/icons.cpp @@ -11,6 +11,7 @@ #include #include #include +#include namespace BlackMisc { @@ -39,6 +40,24 @@ namespace BlackMisc return pm; } + const QPixmap &CIcons::color16() + { + static const QPixmap pm(":/diagona/icons/diagona/icons/color.png"); + return pm; + } + + const QPixmap &CIcons::colorPicker16() + { + static const QPixmap pm(":/diagona/icons/diagona/icons/ui-color-picker.png"); + return pm; + } + + const QPixmap &CIcons::colorSwatch16() + { + static const QPixmap pm(":/diagona/icons/diagona/icons/color-swatches.png"); + return pm; + } + const QPixmap &CIcons::resize16() { static const QPixmap pm(":/diagona/icons/diagona/icons/arrow-resize-135.png"); @@ -189,6 +208,12 @@ namespace BlackMisc return pm; } + const QPixmap &CIcons::paintCan16() + { + static const QPixmap pm(":/pastel/icons/pastel/16/paintcan.png"); + return pm; + } + const QPixmap &CIcons::plugin16() { static const QPixmap pm(":/pastel/icons/pastel/16/plugin.png"); @@ -207,6 +232,12 @@ namespace BlackMisc return pm; } + const QPixmap &CIcons::dragAndDrop16() + { + static const QPixmap pm(":/diagona/icons/diagona/icons/document-insert.png"); + return pm; + } + const QPixmap &CIcons::floatAll16() { static const QPixmap pm(":/pastel/icons/pastel/16/application-cascade.png"); @@ -327,6 +358,78 @@ namespace BlackMisc return pm; } + const QPixmap &CIcons::database16() + { + static const QPixmap pm(":/pastel/icons/pastel/16/database.png"); + return pm; + } + + const QPixmap &CIcons::databaseAdd16() + { + static const QPixmap pm(":/pastel/icons/pastel/16/database-add.png"); + return pm; + } + + const QPixmap &CIcons::databaseConnect16() + { + static const QPixmap pm(":/pastel/icons/pastel/16/database-conenct.png"); + return pm; + } + + const QPixmap &CIcons::databaseDelete16() + { + static const QPixmap pm(":/pastel/icons/pastel/16/database-delete.png"); + return pm; + } + + const QPixmap &CIcons::databaseEdit16() + { + static const QPixmap pm(":/pastel/icons/pastel/16/database-edit.png"); + return pm; + } + + const QPixmap &CIcons::databaseError16() + { + static const QPixmap pm(":/pastel/icons/pastel/16/database-error.png"); + return pm; + } + + const QPixmap &CIcons::databaseKey16() + { + static const QPixmap pm(":/pastel/icons/pastel/16/database-key.png"); + return pm; + } + + const QPixmap &CIcons::databaseTable16() + { + static const QPixmap pm(":/pastel/icons/pastel/16/database-table.png"); + return pm; + } + + const QPixmap &CIcons::preloader64() + { + static const QPixmap pm(":/preloaders/icons/preloaders/FillingRing64.gif"); + return pm; + } + + const QPixmap &CIcons::preloader32() + { + static const QPixmap pm(":/preloaders/icons/preloaders/FillingRing32.gif"); + return pm; + } + + const QPixmap &CIcons::preloader16() + { + static const QPixmap pm(":/preloaders/icons/preloaders/FillingRing16.gif"); + return pm; + } + + const QPixmap &CIcons::swift16() + { + static const QPixmap pm(swift48().scaled(16, 16)); + return pm; + } + const QPixmap &CIcons::swift24() { static const QPixmap pm(":/own/icons/own/swift/swift24.png"); @@ -351,6 +454,12 @@ namespace BlackMisc return pm; } + const QPixmap &CIcons::swiftDatabase16() + { + static const QPixmap pm(":/own/icons/own/swift/swiftDatabase16.png"); + return pm; + } + const QPixmap &CIcons::swiftDatabase24() { static const QPixmap pm(":/own/icons/own/swift/swiftDatabase24.png"); @@ -363,6 +472,12 @@ namespace BlackMisc return pm; } + const QPixmap &CIcons::swiftNova16() + { + static const QPixmap pm(swiftNova48().scaled(16, 16)); + return pm; + } + const QPixmap &CIcons::appWeather16() { return weatherCloudy16(); @@ -403,7 +518,7 @@ namespace BlackMisc return radar16(); } - const QPixmap &CIcons::appAircrafts16() + const QPixmap &CIcons::appAircraft16() { return paperPlane16(); } @@ -428,6 +543,46 @@ namespace BlackMisc return tableRelationship16(); } + const QPixmap &CIcons::appDatabase16() + { + return database16(); + } + + const QPixmap &CIcons::appAircraftIcao16() + { + return paperPlane16(); + } + + const QPixmap &CIcons::appAirlineIcao16() + { + return paperPlane16(); + } + + const QPixmap &CIcons::appLiveries16() + { + return paintCan16(); + } + + const QPixmap &CIcons::appModels16() + { + return appMappings16(); + } + + const QPixmap &CIcons::appCountries16() + { + return globe16(); + } + + const QPixmap &CIcons::appDistributors16() + { + return users16(); + } + + const QPixmap &CIcons::appDbStash16() + { + return databaseAdd16(); + } + const QPixmap &CIcons::roleC1() { static const QPixmap pm(":/vatsim/icons/vatsim/C1.png"); @@ -624,127 +779,301 @@ namespace BlackMisc { switch (index) { - case ApplicationIconAircrafts: return appAircrafts16(); - case ApplicationIconAtc: return appAtc16(); - case ApplicationIconAudio: return appAudio16(); - case ApplicationIconCockpit: return appCockpit16(); - case ApplicationIconFlightPlan: return appFlightPlan16(); - case ApplicationIconLog: return appLog16(); - case ApplicationIconMappings: return appMappings16(); - case ApplicationIconSettings: return appSettings16(); - case ApplicationIconSimulator: return appSimulator16(); - case ApplicationIconTextMessages: return appTextMessages16(); - case ApplicationIconWeather: return appWeather16(); - case AviationAtis: return atis(); - case AviationAttitudeIndicator: return attitudeIndicator16(); - case AviationMetar: return metar(); - case GeoPosition: return geoPosition16(); - case NetworkCapabilityTextOnly: return capabilityTextOnly(); - case NetworkCapabilityUnknown: return capabilityUnknown(); - case NetworkCapabilityVoice: return capabilityVoice(); - case NetworkCapabilityVoiceBackground: return capabilityVoiceBackground(); - case NetworkCapabilityVoiceReceiveOnly: return capabilityVoiceReceiveOnly(); - case NetworkCapabilityVoiceReceiveOnlyBackground: return capabilityVoiceReceiveOnlyBackground(); - case NetworkRoleApproach: return roleApproach(); - case NetworkRoleC1: return roleC1(); - case NetworkRoleC3: return roleC3(); - case NetworkRoleCenter: return roleCenter(); - case NetworkRoleDelivery: return roleDelivery(); - case NetworkRoleFss: return roleFss(); - case NetworkRoleGround: return roleGround(); - case NetworkRoleI1: return roleI1(); - case NetworkRoleI3: return roleI3(); - case NetworkRoleMnt: return roleMnt(); - case NetworkRoleObs: return roleObs(); - case NetworkRolePilot: return rolePilot(); - case NetworkRoleS1: return roleS1(); - case NetworkRoleS2: return roleS2(); - case NetworkRoleS3: return roleS3(); - case NetworkRoleSup: return roleSup(); - case NetworkRoleTower: return roleTower(); - case NetworkRoleUnknown: return roleUnknown(); - case NetworkVatsimLogo: return vatsimLogo16(); - case NetworkVatsimLogoWhite: return vatsimLogoWhite16(); - case NotSet: return empty(); - case StandardIconAppAircrafts16: return appAircrafts16(); - case StandardIconAppAtc16: return appAtc16(); - case StandardIconAppFlightPlan16: return appFlightPlan16(); - case StandardIconAppLog16: return appLog16(); - case StandardIconAppMappings16: return appMappings16(); - case StandardIconAppSettings16: return appSettings16(); - case StandardIconAppSimulator16: return appSimulator16(); - case StandardIconAppTextMessages16: return appTextMessages16(); - case StandardIconAppUsers16: return appUsers16(); - case StandardIconAppWeather16: return appWeather16(); - case StandardIconArrowMediumEast16: return arrowMediumEast16(); - case StandardIconArrowMediumNorth16: return arrowMediumNorth16(); - case StandardIconArrowMediumSouth16: return arrowMediumSouth16(); - case StandardIconArrowMediumWest16: return arrowMediumWest16(); - case StandardIconClose16: return close16(); - case StandardIconCross16: return cross16(); - case StandardIconCrossCircle16: return crossCircle16(); - case StandardIconCrossSmall16: return crossSmall16(); - case StandardIconCrossWhite16: return crossWhite16(); - case StandardIconDelete16: return delete16(); - case StandardIconDockBottom16: return dockBottom16(); - case StandardIconDockTop16: return dockTop16(); - case StandardIconEmpty16: return empty16(); - case StandardIconEmpty: return empty(); - case StandardIconError16: return error16(); - case StandardIconFloatAll16: return floatAll16(); - case StandardIconFloatOne16: return floatOne16(); - case StandardIconGlobe16: return globe16(); - case StandardIconHeadingOne16: return headingOne16(); - case StandardIconInfo16: return info16(); - case StandardIconJoystick16: return joystick16(); - case StandardIconMonitorError16: return monitorError16(); - case StandardIconPaperPlane16: return paperPlane16(); - case StandardIconPlugin16: return plugin16(); - case StandardIconRadar16: return radar16(); - case StandardIconRadio16: return radio16(); - case StandardIconRefresh16: return refresh16(); - case StandardIconResize16: return resize16(); - case StandardIconResizeHorizontal16: return resizeHorizontal16(); - case StandardIconResizeVertical16: return resizeVertical16(); - case StandardIconSpeakerNetwork16: return speakerNetwork16(); - case StandardIconStatusBar16: return statusBar16(); - case StandardIconSwift24: return swift24(); - case StandardIconSwift48: return swift48(); - case StandardIconSwiftNova24: return swiftNova24(); - case StandardIconSwiftNova48: return swiftNova48(); - case StandardIconTableRelationship16: return tableRelationship16(); - case StandardIconTableSheet16: return tableSheet16(); - case StandardIconText16: return text16(); - case StandardIconTick16: return tick16(); - case StandardIconTickRed16: return tickRed16(); - case StandardIconTickSmall16: return tickSmall16(); - case StandardIconTickWhite16: return tickWhite16(); - case StandardIconUnknown16: return unknown16(); - case StandardIconUser16: return user16(); - case StandardIconUsers16: return users16(); - case StandardIconViewMulticolumn16: return viewMultiColumn(); - case StandardIconViewTile16: return viewTile(); - case StandardIconVolumeHigh16: return volumeHigh16(); - case StandardIconVolumeLow16: return volumeLow16(); - case StandardIconVolumeMuted16: return volumeMuted16(); - case StandardIconWarning16: return warning16(); - case StandardIconWeatherCloudy16: return weatherCloudy16(); - case StandardIconWrench16: return wrench16(); - default: return empty(); + case ApplicationAircraft: + return appAircraft16(); + case ApplicationAircraftIcao: + return appAircraftIcao16(); + case ApplicationAirlineIcao: + return appAirlineIcao16(); + case ApplicationAtc: + return appAtc16(); + case ApplicationAudio: + return appAudio16(); + case ApplicationCockpit: + return appCockpit16(); + case ApplicationCountries: + return appCountries16(); + case ApplicationDatabase: + return appDatabase16(); + case ApplicationDbStash: + return appDbStash16(); + case ApplicationDistributors: + return appDistributors16(); + case ApplicationFlightPlan: + return appFlightPlan16(); + case ApplicationLiveries: + return appLiveries16(); + case ApplicationLog: + return appLog16(); + case ApplicationMappings: + return appMappings16(); + case ApplicationModels: + return appModels16(); + case ApplicationSettings: + return appSettings16(); + case ApplicationSimulator: + return appSimulator16(); + case ApplicationTextMessages: + return appTextMessages16(); + case ApplicationWeather: + return appWeather16(); + case AviationAtis: + return atis(); + case AviationAttitudeIndicator: + return attitudeIndicator16(); + case AviationMetar: + return metar(); + case GeoPosition: + return geoPosition16(); + case NetworkCapabilityTextOnly: + return capabilityTextOnly(); + case NetworkCapabilityUnknown: + return capabilityUnknown(); + case NetworkCapabilityVoice: + return capabilityVoice(); + case NetworkCapabilityVoiceBackground: + return capabilityVoiceBackground(); + case NetworkCapabilityVoiceReceiveOnly: + return capabilityVoiceReceiveOnly(); + case NetworkCapabilityVoiceReceiveOnlyBackground: + return capabilityVoiceReceiveOnlyBackground(); + case NetworkRoleApproach: + return roleApproach(); + case NetworkRoleC1: + return roleC1(); + case NetworkRoleC3: + return roleC3(); + case NetworkRoleCenter: + return roleCenter(); + case NetworkRoleDelivery: + return roleDelivery(); + case NetworkRoleFss: + return roleFss(); + case NetworkRoleGround: + return roleGround(); + case NetworkRoleI1: + return roleI1(); + case NetworkRoleI3: + return roleI3(); + case NetworkRoleMnt: + return roleMnt(); + case NetworkRoleObs: + return roleObs(); + case NetworkRolePilot: + return rolePilot(); + case NetworkRoleS1: + return roleS1(); + case NetworkRoleS2: + return roleS2(); + case NetworkRoleS3: + return roleS3(); + case NetworkRoleSup: + return roleSup(); + case NetworkRoleTower: + return roleTower(); + case NetworkRoleUnknown: + return roleUnknown(); + case NetworkVatsimLogo: + return vatsimLogo16(); + case NetworkVatsimLogoWhite: + return vatsimLogoWhite16(); + case NotSet: + return empty(); + case StandardIconAppAircrafts16: + return appAircraft16(); + case StandardIconAppAtc16: + return appAtc16(); + case StandardIconAppFlightPlan16: + return appFlightPlan16(); + case StandardIconAppLog16: + return appLog16(); + case StandardIconAppMappings16: + return appMappings16(); + case StandardIconAppSettings16: + return appSettings16(); + case StandardIconAppSimulator16: + return appSimulator16(); + case StandardIconAppTextMessages16: + return appTextMessages16(); + case StandardIconAppUsers16: + return appUsers16(); + case StandardIconAppWeather16: + return appWeather16(); + case StandardIconArrowMediumEast16: + return arrowMediumEast16(); + case StandardIconArrowMediumNorth16: + return arrowMediumNorth16(); + case StandardIconArrowMediumSouth16: + return arrowMediumSouth16(); + case StandardIconArrowMediumWest16: + return arrowMediumWest16(); + case StandardIconClose16: + return close16(); + case StandardIconColor16: + return color16(); + case StandardIconColorPicker16: + return colorPicker16(); + case StandardIconColorSwatch16: + return colorSwatch16(); + case StandardIconCross16: + return cross16(); + case StandardIconCrossCircle16: + return crossCircle16(); + case StandardIconCrossSmall16: + return crossSmall16(); + case StandardIconCrossWhite16: + return crossWhite16(); + case StandardIconDatabase16: + return database16(); + case StandardIconDatabaseAdd16: + return databaseAdd16(); + case StandardIconDatabaseConnect16: + return databaseConnect16(); + case StandardIconDatabaseDelete16: + return databaseDelete16(); + case StandardIconDatabaseEdit16: + return databaseEdit16(); + case StandardIconDatabaseError16: + return databaseError16(); + case StandardIconDatabaseKey16: + return databaseKey16(); + case StandardIconDatabaseTable16: + return databaseTable16(); + case StandardIconDelete16: + return delete16(); + case StandardIconDockBottom16: + return dockBottom16(); + case StandardIconDockTop16: + return dockTop16(); + case StandardIconDragAndDrop16: + return dragAndDrop16(); + case StandardIconEmpty16: + return empty16(); + case StandardIconEmpty: + return empty(); + case StandardIconError16: + return error16(); + case StandardIconFloatAll16: + return floatAll16(); + case StandardIconFloatOne16: + return floatOne16(); + case StandardIconGlobe16: + return globe16(); + case StandardIconHeadingOne16: + return headingOne16(); + case StandardIconInfo16: + return info16(); + case StandardIconJoystick16: + return joystick16(); + case StandardIconMonitorError16: + return monitorError16(); + case StandardIconPaperPlane16: + return paperPlane16(); + case StandardIconPaintCan16: + return paintCan16(); + case StandardIconPlugin16: + return plugin16(); + case StandardIconRadar16: + return radar16(); + case StandardIconRadio16: + return radio16(); + case StandardIconRefresh16: + return refresh16(); + case StandardIconResize16: + return resize16(); + case StandardIconResizeHorizontal16: + return resizeHorizontal16(); + case StandardIconResizeVertical16: + return resizeVertical16(); + case StandardIconSpeakerNetwork16: + return speakerNetwork16(); + case StandardIconStatusBar16: + return statusBar16(); + case StandardIconTableRelationship16: + return tableRelationship16(); + case StandardIconTableSheet16: + return tableSheet16(); + case StandardIconText16: + return text16(); + case StandardIconTick16: + return tick16(); + case StandardIconTickRed16: + return tickRed16(); + case StandardIconTickSmall16: + return tickSmall16(); + case StandardIconTickWhite16: + return tickWhite16(); + case StandardIconUnknown16: + return unknown16(); + case StandardIconUser16: + return user16(); + case StandardIconUsers16: + return users16(); + case StandardIconViewMulticolumn16: + return viewMultiColumn(); + case StandardIconViewTile16: + return viewTile(); + case StandardIconVolumeHigh16: + return volumeHigh16(); + case StandardIconVolumeLow16: + return volumeLow16(); + case StandardIconVolumeMuted16: + return volumeMuted16(); + case StandardIconWarning16: + return warning16(); + case StandardIconWeatherCloudy16: + return weatherCloudy16(); + case StandardIconWrench16: + return wrench16(); + case Swift16: + return swift16(); + case Swift24: + return swift24(); + case Swift48: + return swift48(); + case SwiftNova16: + return swiftNova16(); + case SwiftNova24: + return swiftNova24(); + case SwiftNova48: + return swiftNova48(); + case SwiftDatabase16: + return swiftDatabase16(); + case SwiftDatabase24: + return swiftDatabase24(); + case SwiftDatabase48: + return swiftDatabase48(); + default: + return empty(); } } QPixmap CIcons::pixmapByIndex(CIcons::IconIndex index, int rotateDegrees) { - const QPixmap original = pixmapByIndex(index); - if (rotateDegrees == 0) return original; - QMatrix rm; - rm.rotate(rotateDegrees); - QPixmap rotated = original.transformed(rm); - int xoffset = (rotated.width() - original.width()) / 2; - int yoffset = (rotated.height() - original.height()) / 2; - rotated = rotated.copy(xoffset, yoffset, original.width(), original.height()); - return rotated; + if (rotateDegrees == 0) { return pixmapByIndex(index); } + return rotate(rotateDegrees, pixmapByIndex(index)); + } + + const QPixmap &CIcons::pixmapByResourceFileName(const QString &fileName) + { + Q_ASSERT_X(!fileName.isEmpty(), Q_FUNC_INFO, "missing filename"); + if (!getResourceFileCache().contains(fileName)) + { + QString path = fileName.contains("resources") ? + QCoreApplication::applicationDirPath().append("/").append(fileName) : + QCoreApplication::applicationDirPath().append("/resources/").append(fileName); + QPixmap pm; + bool s = pm.load(path); + if (s) + { + getResourceFileCache().insert(fileName, pm); + } + else + { + getResourceFileCache().insert(fileName, CIcons::empty()); + } + } + return getResourceFileCache()[fileName]; } QImage CIcons::changeImageBackgroundColor(const QImage &imgSource, Qt::GlobalColor backgroundColor) @@ -757,6 +1086,23 @@ namespace BlackMisc return destBackgroundImg; } + QPixmap CIcons::rotate(int rotateDegrees, const QPixmap &original) + { + QMatrix rm; + rm.rotate(rotateDegrees); + QPixmap rotated = original.transformed(rm); + int xoffset = (rotated.width() - original.width()) / 2; + int yoffset = (rotated.height() - original.height()) / 2; + rotated = rotated.copy(xoffset, yoffset, original.width(), original.height()); + return rotated; + } + + QMap &CIcons::getResourceFileCache() + { + static QMap cache; + return cache; + } + QPixmap CIcons::changeResourceBackgroundColor(const QString &resource, Qt::GlobalColor backgroundColor) { QImage imgSource(resource); diff --git a/src/blackmisc/icons.h b/src/blackmisc/icons.h index 90bdb6898..2a836bb85 100644 --- a/src/blackmisc/icons.h +++ b/src/blackmisc/icons.h @@ -14,6 +14,7 @@ #include "blackmiscexport.h" #include +#include namespace BlackMisc { @@ -29,17 +30,25 @@ namespace BlackMisc enum IconIndex { // !! keep indexes alphabetically sorted and in sync with CIconList - ApplicationIconAircrafts, - ApplicationIconAtc, - ApplicationIconAudio, - ApplicationIconCockpit, - ApplicationIconFlightPlan, - ApplicationIconLog, - ApplicationIconMappings, - ApplicationIconSettings, - ApplicationIconSimulator, - ApplicationIconTextMessages, - ApplicationIconWeather, + ApplicationAircraft = 0, + ApplicationAircraftIcao, + ApplicationAirlineIcao, + ApplicationAtc, + ApplicationAudio, + ApplicationCockpit, + ApplicationCountries, + ApplicationDatabase, + ApplicationDbStash, + ApplicationDistributors, + ApplicationFlightPlan, + ApplicationLiveries, + ApplicationLog, + ApplicationMappings, + ApplicationModels, + ApplicationSettings, + ApplicationSimulator, + ApplicationTextMessages, + ApplicationWeather, AviationAttitudeIndicator, AviationAtis, AviationMetar, @@ -86,13 +95,25 @@ namespace BlackMisc StandardIconArrowMediumSouth16, StandardIconArrowMediumWest16, StandardIconClose16, + StandardIconColor16, + StandardIconColorPicker16, + StandardIconColorSwatch16, StandardIconCross16, StandardIconCrossCircle16, StandardIconCrossSmall16, StandardIconCrossWhite16, + StandardIconDatabase16, + StandardIconDatabaseAdd16, + StandardIconDatabaseConnect16, + StandardIconDatabaseDelete16, + StandardIconDatabaseEdit16, + StandardIconDatabaseError16, + StandardIconDatabaseKey16, + StandardIconDatabaseTable16, StandardIconDelete16, StandardIconDockBottom16, StandardIconDockTop16, + StandardIconDragAndDrop16, StandardIconEmpty, StandardIconEmpty16, StandardIconError16, @@ -106,6 +127,7 @@ namespace BlackMisc StandardIconLockOpen16, StandardIconMonitorError16, StandardIconPaperPlane16, + StandardIconPaintCan16, StandardIconPlugin16, StandardIconRadar16, StandardIconRadio16, @@ -115,12 +137,6 @@ namespace BlackMisc StandardIconResizeVertical16, StandardIconSpeakerNetwork16, StandardIconStatusBar16, - StandardIconSwift24, - StandardIconSwift48, - StandardIconSwiftDatabase24, - StandardIconSwiftDatabase48, - StandardIconSwiftNova24, - StandardIconSwiftNova48, StandardIconTableRelationship16, StandardIconTableSheet16, StandardIconText16, @@ -138,7 +154,26 @@ namespace BlackMisc StandardIconVolumeMuted16, StandardIconWarning16, StandardIconWeatherCloudy16, - StandardIconWrench16 + StandardIconWrench16, + Swift16, + Swift24, + Swift48, + SwiftDatabase16, + SwiftDatabase24, + SwiftDatabase48, + SwiftNova16, + SwiftNova24, + SwiftNova48, + + // --------------------------- + // Icon is not from resources, but generated at runtime + // --------------------------- + IconIsGenerated, + + // --------------------------- + // Icon is not from resources, but a file + // --------------------------- + IconIsFile }; // ------------------------------------------------------------- @@ -157,6 +192,15 @@ namespace BlackMisc //! Close static const QPixmap &close16(); + //! Color + static const QPixmap &color16(); + + //! Color picker + static const QPixmap &colorPicker16(); + + //! Color swatch + static const QPixmap &colorSwatch16(); + //! Resize static const QPixmap &resize16(); @@ -232,6 +276,9 @@ namespace BlackMisc //! Lock static const QPixmap &lockClosed16(); + //! Paint can + static const QPixmap &paintCan16(); + //! Plugin static const QPixmap &plugin16(); @@ -241,6 +288,9 @@ namespace BlackMisc //! Docking static const QPixmap &dockBottom16(); + //! Drag and drop + static const QPixmap &dragAndDrop16(); + //! Float all static const QPixmap &floatAll16(); @@ -301,24 +351,82 @@ namespace BlackMisc //! Arrow static const QPixmap &arrowMediumWest16(); + // -------------------------------------------------- + // -- Database + // -------------------------------------------------- + + //! Database + static const QPixmap &database16(); + + //! Database add + static const QPixmap &databaseAdd16(); + + //! Database connect + static const QPixmap &databaseConnect16(); + + //! Database delete + static const QPixmap &databaseDelete16(); + + //! Database edit + static const QPixmap &databaseEdit16(); + + //! Database error + static const QPixmap &databaseError16(); + + //! Database key + static const QPixmap &databaseKey16(); + + //! Database table + static const QPixmap &databaseTable16(); + + // -------------------------------------------------- + // -- Preloader icons + // -------------------------------------------------- + + //! Preloader + static const QPixmap &preloader64(); + + //! Preloader + static const QPixmap &preloader32(); + + //! Preloader + static const QPixmap &preloader16(); + + // -------------------------------------------------- + // -- swift + // -------------------------------------------------- + + //! swift icon + static const QPixmap &swift16(); + //! swift icon static const QPixmap &swift24(); //! swift icon static const QPixmap &swift48(); + //! swift icon / database + static const QPixmap &swiftDatabase16(); + //! swift icon / database static const QPixmap &swiftDatabase24(); //! swift icon / database static const QPixmap &swiftDatabase48(); + //! swift icon (nova) + static const QPixmap &swiftNova16(); + //! swift icon (nova) static const QPixmap &swiftNova24(); //! swift icon (nova) static const QPixmap &swiftNova48(); + // -------------------------------------------------- + // -- application icons + // -------------------------------------------------- + //! Application weather static const QPixmap &appWeather16(); @@ -344,7 +452,7 @@ namespace BlackMisc static const QPixmap &appAtc16(); //! Application aircrafts - static const QPixmap &appAircrafts16(); + static const QPixmap &appAircraft16(); //! Application mappings static const QPixmap &appMappings16(); @@ -358,6 +466,30 @@ namespace BlackMisc //! Voice rooms static const QPixmap &appVoiceRooms16(); + //! App.database + static const QPixmap &appDatabase16(); + + //! Aircraft ICAO + static const QPixmap &appAircraftIcao16(); + + //! Airline ICAO + static const QPixmap &appAirlineIcao16(); + + //! Liveries + static const QPixmap &appLiveries16(); + + //! Models + static const QPixmap &appModels16(); + + //! Countries + static const QPixmap &appCountries16(); + + //! Distributors + static const QPixmap &appDistributors16(); + + //! Stash + static const QPixmap &appDbStash16(); + // ------------------------------------------------------------- // Network and aviation // ------------------------------------------------------------- @@ -471,6 +603,13 @@ namespace BlackMisc //! Pixmap by given index rotated static QPixmap pixmapByIndex(IconIndex index, int rotateDegrees); + // ------------------------------------------------------------- + // By file from swift resource directory + // ------------------------------------------------------------- + + //! Pixmap by given index + static const QPixmap &pixmapByResourceFileName(const QString &fileName); + // ------------------------------------------------------------- // Utility functions // ------------------------------------------------------------- @@ -483,6 +622,13 @@ namespace BlackMisc //! Change image background color static QImage changeImageBackgroundColor(const QImage &imgSource, Qt::GlobalColor backgroundColor); + + //! Rotate by pixmap + static QPixmap rotate(int rotateDegrees, const QPixmap &original); + + private: + //! File cache for the loaded + static QMap &getResourceFileCache(); }; } #endif // guard diff --git a/src/blackmisc/icons/famfamfam/License.txt b/src/blackmisc/icons/famfamfam/License.txt new file mode 100644 index 000000000..1020f893c --- /dev/null +++ b/src/blackmisc/icons/famfamfam/License.txt @@ -0,0 +1,3 @@ +I also love to hear of my work being used, feel encouraged to send an email with a link or screenshot of the icons in their new home to mjames at gmail dot com. This work is licensed under a Creative Commons Attribution 2.5 License. This means you may use it for any purpose, and make any changes you like. All I ask is that you include a link back to this page in your credits (although a giant link on every page of your website really isn't needed, contact me to discuss specifics). +The icons can also be used under Creative Commons Attribution 3.0 License (Hi Debian folks!) with the following requirements: +As an author, I would appreciate a reference to my authorship of the Silk icon set contents within a readme file or equivalent documentation for the software which includes the set or a subset of the icons contained within. \ No newline at end of file diff --git a/src/blackmisc/icons/own/swift/swift16Database.png b/src/blackmisc/icons/own/swift/swift16Database.png new file mode 100644 index 0000000000000000000000000000000000000000..729947075a12251feb2c05fdf83aeca300bffc2b GIT binary patch literal 916 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 literal 0 HcmV?d00001 diff --git a/src/blackmisc/icons/preloaders/FillingRing64.gif b/src/blackmisc/icons/preloaders/FillingRing64.gif new file mode 100644 index 0000000000000000000000000000000000000000..9427a5f7677ec5321cf4d6c677551f371755c048 GIT binary patch literal 19096 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 literal 0 HcmV?d00001 diff --git a/src/blackmisc/icons/preloaders/FloatingRays16.gif b/src/blackmisc/icons/preloaders/FloatingRays16.gif new file mode 100644 index 0000000000000000000000000000000000000000..96930036064ed715e04a3b28fb0143ad1324f74f GIT binary patch literal 4297 zcmb`~du$Vj9S3kf&*!(#ar}OrW1r9TF`y}9EtloiNaAc#HGp>9HK4N2B!73(OArfovgO4DvsXxb>Nx(bzjk0UAVHuazI z7k`oP`F`(vzgs7+UHP>Jo5H4eS)uR;{rPPE!dn+=zEyMWgKKAAIkWqz-IxD-xpRN# zjgM}e`{lX9@j~f}(%Ik7wmsiA`qF6Qqm4JN-#B;n+}!(feFJ?rKfO8q`gG~?()>t% z_R{RNzh67^>Y27@+vcv!_4V}K{N(2Je}_R(_R$kEDf>ZNMGc1 z^&UP{oHmM4$leu4FzTOJv)< z+I+QBkq^Ve_dYVcw#k1~V{Tacz_C6*mt?8(cG4KBs}y1}o^YG?h^&<09>1C-yz zN7@A&kqpq$BLZWmTGr^FpgVnAy#@nU&&KqTUXwywZ93Y;NQzjB3Li;NU{v0S;RPVx-tjk z)HhNvNB5Bh$`0_w>hHoP5q%Tc=0~mwnVIbIA@;%K%QGi)H%jlXV$Z)r?>zhczW19C zr8O}t_lKs6@)wUU=ihOgCZ}T^Yuc9@cX8f!UYp`4Li)Z$HhzSF{yK8MC&=&1KlZj(zZdp57Jp$TpbL1!f`LFF@J49z`vHw! zL}mcznp+?8XJ$6N+p)5eiFayq*V-zo{x)-oUU4?ErfJ(`bY=C>KR)z~R#d(`kr*N= zM(Z4J&itaKHpS`IKPNi%dM~qIs`zSncl#*5TMmw7KA@n9huMXt!}4ISw2DbjciJna+J zJ2{U|;TOG5O|#3$IPd_dDTmvCj8#QguZvJBt=i(2@A3NZF`JDgOI{V+;gtW4h~<0_ zYmfKLGe__0vD_^n;r76@j|U&^1TaLQerF$Wdt8$C8Eu9!ra%UkPY#3tY3XjceRV(= zoY)6>956M=4O@XWFBa{>O5iWVKv}j~Fmz>vOMFXsi>AfyrF@Rak-2fo=zT3uiNgfA)K3ANe+<)A?o+3)I(_V)8MDO%lIy$VY7 zP}?|%BVZ5tId{P4423vVhsQ)Ji~X(*x>LL^e8gys>WMnR8BR@=6Nj=o~ z6B2R1bh&M0Gs33r9ZSV1^Vad9{K)9VOZ#|7>3zDv!tBSku~boG>K(R>n|}M1Ka$Ic z7nt$;9y|~Wis2nhgeIO7nb>+mgy`<=8{mUZ(cD$8G)6_0zLwK!za4n2T*m~9)ttSu z$m1+7c3ao^$6IJU6AdsSYH!kDY1Y3+QipPk%hWqB{Dm=IINQ)XYz2-kJn8Ztg9|MO zFRZZ25XO^^e#;;|+WVa}*L3B^#n-4AVWM=Y;>%tad+kBqp=uYi(YmD0AuMhdH^kbc&)GoI@@$^WI=!n#_h6K53m~*N6=lgs2wf5hi z9WcO1puzw~XXO_iFr--?lRgHaDDSXT-r()SV*Z;0>he8|1VD@0A{JB_z=#4VEsE&p zM)>x%mc_MZ&rGn@mRQAmSrav|{;^oHG+OS>bWACgLTvp{3m<1zjSMwU{j<+&ZeX)l zqh@coj<={c*Kk^rw2EBV=pwXKpnqU6%e&p1ALsO5yLa!t4yDoMh zLE5`(XEJD2#aySt=AfvK)(yq<<|6~dkN;!XoILL^_?PA!Vt8)D^5Cz^Nd4w}-TMbqKTl`<($_Qdq!2LkA)ik#awTSuPVdtm z94zseb-blgh+2|l+>jQAOSUGQ+Ccd+@+Af@J9RyykD5!OdL|Jp@Iie^!rW65suwJw Qt+@mldVR3`B~U;7AFdv+r2qf` literal 0 HcmV?d00001 diff --git a/src/blackmisc/icons/preloaders/FloatingRays32.gif b/src/blackmisc/icons/preloaders/FloatingRays32.gif new file mode 100644 index 0000000000000000000000000000000000000000..f14e60010fbd754623dead4979b6b8114d7ad264 GIT binary patch literal 7270 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 literal 0 HcmV?d00001 diff --git a/src/blackmisc/icons/preloaders/FloatingRays64.gif b/src/blackmisc/icons/preloaders/FloatingRays64.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc1a6764f2b26b18e605a2657b1f8352f81ba664 GIT binary patch literal 14574 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

AEl}|tHfl+n1Dr!b;sr2B9^Pg%9Nd4i(-kLpt z*=?of*-+>=wCD!sgk?PNDQ^EGu3I~m7qR3N*PY%?d&d{}9|}!FIdA90Okl=oXLDi$ z9N^9dsv=o}*9rW*Yw}%LNdZB9**}l;WfCadY=2oE9o{y8N6P}tnwMql6gnP^S6pg%8&|IFEN_(DN}w4a1QZQR6L z11*D}&GkJa?0yP|wIEYl&WkDS0KxZ;kZA~Tm`1s4Ul;6>un;e|OIOlxxG9U@A@5&3 z)UuSI00@#s79*beaR8K6BUx%a7@7v9vS^X%y6m_Gsk3<+X_@M&&%t7(PG%Sd%@}=N z9xmUS6@qum8C{k0*|L>{F?P_eTIA-#tj(hmbt0A=VCcrDqo+1&eo@Bx)ki~5SosT^3BUB8xEmaT zD5nz^P*TB1-EbPw|?`=&2a!nWN zv_ZGGYZ;Bzisorj+Ex*?#+R)sFzj$Tv5-(y6GF!N90gR*V$)C_%URcU*SYwh%5H-|mv&e~T!rBb+3V>6wyWqw*O_9Es+2e36e|<&8%x z%nv8+SzQ@-W3+z5Vpf)K!xaP`7$h)Zt}_)j=YKZsf4PK#O#R0e1DOJIY(};pi)?0A z{`lDVAB${eR(>C>fBx5?=?^DnW+hl*e|?LZ!9G5Hz7O2Q3@3u7-9Ke=!vHjGqvB!U z))oFC!Gz3X9}tI%bcZ70t1XrqYD=L3v2JSuFlJh2ZuC?>!%5qzWT{_LsOHanyL_{} z?J}H*v^1%+ph9x!>X$TXi^jT&(EkG33Acc#ZPRJG4zMK6=cdrfgGNXw2Dg zmxd;m1LGdaB-Qbq=!NxcJ9U z3rqM>fzIS%+hRQRXff0LiQ-m^maL0*@s?r%T=#lNM{5u^Pv6PBpyQV%2yGK!8PIUmPf2C!ZH;@KfddAT>TXZo72DHebm2uk9y?~LUbqQWkaS4ZQgC-|m zyLTRE9KGo3;a!vyIg04@Eb>K)%U;9Tzr72*z~`nNHCI!Zck5#9^_{m2o$i0E(0o;w z`+L!j)}C*_FJd%@DbAePF}24ei37m(hl7=-h1PQ%{51i55~d44|v>xtSXkuUk;RFnD560%RnOCeI$ zRbp(@DuNg<>q`uev`W2$hFI)|DsB05n%9tAnfb?4$bB=rgqO5xgJwRwaRX7QDx7lw zHN5{+ZR;z99qlDY(?*Rxi)7G)`*7y2O^+}|n#wf|I@~pIq;D=ZLvspY(g``pE0w`y zbaN+VUGiNSYXjZ&6if5^)R*5fjV4YgOXnmnn{~ANxFEP|ifnwH@O)t&575?IT8e+pp0b#*Sb4qb)C>N7w88-7C%s z`Gz~qVBY=LNEHh|Hm=qxlJ;!fsbb%?BZ23=?Y~1dx7iIGMj$+%C%|*<^nXiJFZA-> zH^{PRi^?eeoh;3yJ>f_oL(a_`?*+6Hlo%i^!s>q2UNlephR?+aKD5q#-7iU=Bg2z! IAaUOR4-SMflmGw# literal 0 HcmV?d00001 diff --git a/src/blackmisc/icons/preloaders/License.txt b/src/blackmisc/icons/preloaders/License.txt new file mode 100644 index 000000000..02427dbdd --- /dev/null +++ b/src/blackmisc/icons/preloaders/License.txt @@ -0,0 +1,5 @@ +You are encouraged and legally entitled to copy and modify any animated GIF and APNG images, generated by http://preloaders.net web-site. +All animated GIF and APNG images are completely free to use in all projects (web and desktop applications, freeware and commercial projects) +You are encouraged, but NOT obligated to place any reference to http://preloaders.net web-site to use it`s content in any projects and applications, WITH THE EXCEPTION of any other animated images generator applications, which must indicate the source of the used image with a visible link to Preloaders.net web-site on one or more pages that is/are linked to from the main page of the web-site that uses the image from Preloaders.net web-application +Preloaders.net project reserves the right to refuse service to anyone without any explanation and/or notification +When using animations from "Social bookmarks" category you agree to terms of use and privacy policy of a particular logo provided by it`s owner \ No newline at end of file diff --git a/src/blackmisc/icons/preloaders/Preloaders.net.url b/src/blackmisc/icons/preloaders/Preloaders.net.url new file mode 100644 index 000000000..57e02c771 --- /dev/null +++ b/src/blackmisc/icons/preloaders/Preloaders.net.url @@ -0,0 +1,2 @@ +[InternetShortcut] +URL=http://preloaders.net/