syncthingtray/model/syncthingicons.h

189 lines
5.0 KiB
C
Raw Normal View History

2017-02-20 18:03:20 +01:00
#ifndef DATA_SYNCTHINGICONS_H
#define DATA_SYNCTHINGICONS_H
#include "./global.h"
#include <QIcon>
2017-05-01 03:34:43 +02:00
#include <QSize>
2017-02-20 18:03:20 +01:00
2019-05-19 17:56:11 +02:00
#include <vector>
QT_FORWARD_DECLARE_CLASS(QColor)
2017-02-20 18:03:20 +01:00
namespace Data {
enum class StatusEmblem {
None,
Scanning,
Synchronizing,
Alert,
Paused,
Complete,
Add,
};
struct StatusIconColorSet {
StatusIconColorSet(const QColor &backgroundStart, const QColor &backgroundEnd, const QColor &foreground);
StatusIconColorSet(QColor &&backgroundStart, QColor &&backgroundEnd, QColor &&foreground);
StatusIconColorSet(const QString &backgroundStart, const QString &backgroundEnd, const QString &foreground);
QColor backgroundStart;
QColor backgroundEnd;
QColor foreground;
};
inline StatusIconColorSet::StatusIconColorSet(const QColor &backgroundStart, const QColor &backgroundEnd, const QColor &foreground)
: backgroundStart(backgroundStart)
, backgroundEnd(backgroundEnd)
, foreground(foreground)
2019-05-19 17:56:11 +02:00
{
}
inline StatusIconColorSet::StatusIconColorSet(QColor &&backgroundStart, QColor &&backgroundEnd, QColor &&foreground)
: backgroundStart(backgroundStart)
, backgroundEnd(backgroundEnd)
, foreground(foreground)
2019-05-19 17:56:11 +02:00
{
}
inline StatusIconColorSet::StatusIconColorSet(const QString &backgroundStart, const QString &backgroundEnd, const QString &foreground)
: backgroundStart(backgroundStart)
, backgroundEnd(backgroundEnd)
, foreground(foreground)
2019-05-19 17:56:11 +02:00
{
}
QByteArray LIB_SYNCTHING_MODEL_EXPORT makeSyncthingIcon(
const StatusIconColorSet &colors = StatusIconColorSet{ QStringLiteral("#26B6DB"), QStringLiteral("#0882C8"), QStringLiteral("#FFFFFF") },
StatusEmblem statusEmblem = StatusEmblem::None);
QPixmap LIB_SYNCTHING_MODEL_EXPORT renderSvgImage(const QString &path, const QSize &size = QSize(128, 128), int margin = 0);
QPixmap LIB_SYNCTHING_MODEL_EXPORT renderSvgImage(const QByteArray &contents, const QSize &size = QSize(128, 128), int margin = 0);
QByteArray LIB_SYNCTHING_MODEL_EXPORT loadFontAwesomeIcon(const QString &iconName, const QColor &color, bool solid = true);
2019-05-19 17:56:11 +02:00
struct LIB_SYNCTHING_MODEL_EXPORT StatusIconSettings {
explicit StatusIconSettings();
explicit StatusIconSettings(const QString &str);
StatusIconColorSet defaultColor;
StatusIconColorSet errorColor;
StatusIconColorSet warningColor;
StatusIconColorSet idleColor;
StatusIconColorSet scanningColor;
StatusIconColorSet synchronizingColor;
StatusIconColorSet pausedColor;
StatusIconColorSet disconnectedColor;
2019-05-19 17:56:11 +02:00
static constexpr auto distinguishableColorCount = 8;
struct ColorMapping {
QString colorName;
StatusEmblem defaultEmblem;
StatusIconColorSet &setting;
2019-05-19 17:56:11 +02:00
};
std::vector<ColorMapping> colorMapping();
QString toString() const;
};
2017-05-01 03:34:43 +02:00
struct StatusIcons {
StatusIcons();
StatusIcons(const StatusIconSettings &settings);
2017-02-20 18:03:20 +01:00
QIcon disconnected;
QIcon idling;
QIcon scanninig;
QIcon notify;
QIcon pause;
QIcon sync;
2018-03-18 03:09:07 +01:00
QIcon syncComplete;
2017-02-20 18:03:20 +01:00
QIcon error;
QIcon errorSync;
2018-05-01 22:24:41 +02:00
QIcon newItem;
2017-02-20 18:03:20 +01:00
};
inline StatusIcons::StatusIcons()
{
}
struct FontAwesomeIcons {
FontAwesomeIcons(const QColor &color, const QSize &size, int margin);
QIcon hashtag;
QIcon folderOpen;
QIcon globe;
QIcon home;
QIcon shareAlt;
QIcon refresh;
QIcon clock;
QIcon exchangeAlt;
QIcon exclamationTriangle;
QIcon cogs;
QIcon link;
QIcon eye;
QIcon fileArchive;
QIcon folder;
QIcon certificate;
QIcon networkWired;
QIcon cloudDownloadAlt;
QIcon cloudUploadAlt;
QIcon tag;
};
class LIB_SYNCTHING_MODEL_EXPORT IconManager : public QObject {
Q_OBJECT
public:
static IconManager &instance();
void applySettings(const StatusIconSettings &settings);
const StatusIcons &statusIcons() const;
const FontAwesomeIcons &fontAwesomeIconsForLightTheme() const;
const FontAwesomeIcons &fontAwesomeIconsForDarkTheme() const;
Q_SIGNALS:
void statusIconsChanged();
private:
IconManager();
StatusIcons m_statusIcons;
FontAwesomeIcons m_fontAwesomeIconsForLightTheme;
FontAwesomeIcons m_fontAwesomeIconsForDarkTheme;
};
inline void IconManager::applySettings(const StatusIconSettings &settings)
{
m_statusIcons = StatusIcons(settings);
emit statusIconsChanged();
}
inline const StatusIcons &IconManager::statusIcons() const
{
return m_statusIcons;
}
inline const FontAwesomeIcons &IconManager::fontAwesomeIconsForLightTheme() const
{
return m_fontAwesomeIconsForLightTheme;
}
inline const FontAwesomeIcons &IconManager::fontAwesomeIconsForDarkTheme() const
{
return m_fontAwesomeIconsForDarkTheme;
}
inline const StatusIcons &statusIcons()
{
return IconManager::instance().statusIcons();
}
inline const FontAwesomeIcons &fontAwesomeIconsForLightTheme()
{
return IconManager::instance().fontAwesomeIconsForLightTheme();
}
inline const FontAwesomeIcons &fontAwesomeIconsForDarkTheme()
{
return IconManager::instance().fontAwesomeIconsForDarkTheme();
}
2017-02-20 18:03:20 +01:00
} // namespace Data
#endif // DATA_SYNCTHINGICONS_H