syncthingtray/model/syncthingicons.h

175 lines
4.3 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 GradientColor {
2019-05-19 17:56:11 +02:00
GradientColor(const QColor &start, const QColor &end);
GradientColor(QColor &&start, QColor &&end);
GradientColor(const QString &start, const QString &end);
2019-05-19 17:56:11 +02:00
QColor start;
QColor end;
};
inline GradientColor::GradientColor(const QColor &start, const QColor &end)
2019-05-19 17:56:11 +02:00
: start(start)
, end(end)
{
}
inline GradientColor::GradientColor(QColor &&start, QColor &&end)
2019-05-19 17:56:11 +02:00
: start(start)
, end(end)
{
}
inline GradientColor::GradientColor(const QString &start, const QString &end)
: start(start)
, end(end)
2019-05-19 17:56:11 +02:00
{
}
QByteArray LIB_SYNCTHING_MODEL_EXPORT makeSyncthingIcon(
const GradientColor &gradientColor = GradientColor{ QStringLiteral("#26B6DB"), QStringLiteral("#0882C8") },
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);
GradientColor defaultColor;
GradientColor errorColor;
GradientColor warningColor;
GradientColor idleColor;
2019-05-19 17:56:11 +02:00
GradientColor scanningColor;
GradientColor synchronizingColor;
GradientColor pausedColor;
GradientColor disconnectedColor;
2019-05-19 17:56:11 +02:00
static constexpr auto distinguishableColorCount = 8;
struct ColorMapping {
QString colorName;
StatusEmblem defaultEmblem;
GradientColor &setting;
};
std::vector<ColorMapping> colorMapping();
QString toString() const;
};
2017-05-01 03:34:43 +02:00
struct StatusIcons {
StatusIcons(const StatusIconSettings &settings = StatusIconSettings());
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
};
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:
static IconManager &instance(const StatusIconSettings *settingsForFirstTimeSetup = nullptr);
void applySettings(const StatusIconSettings &settings);
const StatusIcons &statusIcons() const;
const FontAwesomeIcons &fontAwesomeIconsForLightTheme() const;
const FontAwesomeIcons &fontAwesomeIconsForDarkTheme() const;
private:
IconManager(const StatusIconSettings *settings = nullptr);
StatusIcons m_statusIcons;
FontAwesomeIcons m_fontAwesomeIconsForLightTheme;
FontAwesomeIcons m_fontAwesomeIconsForDarkTheme;
};
inline void IconManager::applySettings(const StatusIconSettings &settings)
{
m_statusIcons = StatusIcons(settings);
}
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