Move icon rendering to model backend
This commit is contained in:
parent
eab769b654
commit
8c6b0fd3d4
|
@ -16,6 +16,7 @@ set(HEADER_FILES
|
|||
syncthingdirectorymodel.h
|
||||
syncthingdevicemodel.h
|
||||
syncthingdownloadmodel.h
|
||||
syncthingicons.h
|
||||
colors.h
|
||||
)
|
||||
set(SRC_FILES
|
||||
|
@ -23,6 +24,7 @@ set(SRC_FILES
|
|||
syncthingdirectorymodel.cpp
|
||||
syncthingdevicemodel.cpp
|
||||
syncthingdownloadmodel.cpp
|
||||
syncthingicons.cpp
|
||||
)
|
||||
set(RES_FILES
|
||||
resources/${META_PROJECT_NAME}icons.qrc
|
||||
|
@ -46,7 +48,7 @@ find_package(syncthingconnector ${META_APP_VERSION} REQUIRED)
|
|||
use_syncthingconnector()
|
||||
|
||||
# link also explicitely against the following Qt 5 modules
|
||||
list(APPEND ADDITIONAL_QT_MODULES Network Gui Widgets)
|
||||
list(APPEND ADDITIONAL_QT_MODULES Network Gui Widgets Svg)
|
||||
|
||||
# include modules to apply configuration
|
||||
include(BasicConfig)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "./syncthingdevicemodel.h"
|
||||
#include "./syncthingicons.h"
|
||||
#include "./colors.h"
|
||||
|
||||
#include "../connector/syncthingconnection.h"
|
||||
|
@ -10,13 +11,7 @@ namespace Data {
|
|||
|
||||
SyncthingDeviceModel::SyncthingDeviceModel(SyncthingConnection &connection, QObject *parent) :
|
||||
SyncthingModel(connection, parent),
|
||||
m_devs(connection.devInfo()),
|
||||
m_unknownIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-disconnected.svg"))),
|
||||
m_idleIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-ok.svg"))),
|
||||
m_syncIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-sync.svg"))),
|
||||
m_errorIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-error.svg"))),
|
||||
m_pausedIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-pause.svg"))),
|
||||
m_otherIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-default.svg")))
|
||||
m_devs(connection.devInfo())
|
||||
{
|
||||
connect(&m_connection, &SyncthingConnection::newConfig, this, &SyncthingDeviceModel::newConfig);
|
||||
connect(&m_connection, &SyncthingConnection::newDevices, this, &SyncthingDeviceModel::newDevices);
|
||||
|
@ -168,17 +163,17 @@ QVariant SyncthingDeviceModel::data(const QModelIndex &index, int role) const
|
|||
case Qt::DecorationRole:
|
||||
switch(index.column()) {
|
||||
case 0:
|
||||
if(dev.paused) {
|
||||
return m_pausedIcon;
|
||||
if(dev.paused) {
|
||||
return statusIcons().pause;
|
||||
} else {
|
||||
switch(dev.status) {
|
||||
case SyncthingDevStatus::Unknown:
|
||||
case SyncthingDevStatus::Disconnected: return m_unknownIcon;
|
||||
case SyncthingDevStatus::Disconnected: return statusIcons().disconnected;
|
||||
case SyncthingDevStatus::OwnDevice:
|
||||
case SyncthingDevStatus::Idle: return m_idleIcon;
|
||||
case SyncthingDevStatus::Synchronizing: return m_syncIcon;
|
||||
case SyncthingDevStatus::Idle: return statusIcons().idling;
|
||||
case SyncthingDevStatus::Synchronizing: return statusIcons().sync;
|
||||
case SyncthingDevStatus::OutOfSync:
|
||||
case SyncthingDevStatus::Rejected: return m_errorIcon;
|
||||
case SyncthingDevStatus::Rejected: return statusIcons().error;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -41,12 +41,6 @@ private Q_SLOTS:
|
|||
|
||||
private:
|
||||
const std::vector<SyncthingDev> &m_devs;
|
||||
const QIcon m_unknownIcon;
|
||||
const QIcon m_idleIcon;
|
||||
const QIcon m_syncIcon;
|
||||
const QIcon m_errorIcon;
|
||||
const QIcon m_pausedIcon;
|
||||
const QIcon m_otherIcon;
|
||||
};
|
||||
|
||||
} // namespace Data
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "./syncthingdirectorymodel.h"
|
||||
#include "./syncthingicons.h"
|
||||
#include "./colors.h"
|
||||
|
||||
#include "../connector/syncthingconnection.h"
|
||||
|
@ -12,13 +13,7 @@ namespace Data {
|
|||
|
||||
SyncthingDirectoryModel::SyncthingDirectoryModel(SyncthingConnection &connection, QObject *parent) :
|
||||
SyncthingModel(connection, parent),
|
||||
m_dirs(connection.dirInfo()),
|
||||
m_unknownIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-disconnected.svg"))),
|
||||
m_idleIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-ok.svg"))),
|
||||
m_syncIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-sync.svg"))),
|
||||
m_errorIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-error.svg"))),
|
||||
m_pausedIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-pause.svg"))),
|
||||
m_otherIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-default.svg")))
|
||||
m_dirs(connection.dirInfo())
|
||||
{
|
||||
connect(&m_connection, &SyncthingConnection::newConfig, this, &SyncthingDirectoryModel::newConfig);
|
||||
connect(&m_connection, &SyncthingConnection::newDirs, this, &SyncthingDirectoryModel::newDirs);
|
||||
|
@ -188,13 +183,13 @@ QVariant SyncthingDirectoryModel::data(const QModelIndex &index, int role) const
|
|||
switch(index.column()) {
|
||||
case 0:
|
||||
switch(dir.status) {
|
||||
case SyncthingDirStatus::Unknown: return m_unknownIcon;
|
||||
case SyncthingDirStatus::Unshared: return m_unknownIcon;
|
||||
case SyncthingDirStatus::Idle: return m_idleIcon;
|
||||
case SyncthingDirStatus::Scanning: return m_otherIcon;
|
||||
case SyncthingDirStatus::Synchronizing: return m_syncIcon;
|
||||
case SyncthingDirStatus::Paused: return m_pausedIcon;
|
||||
case SyncthingDirStatus::OutOfSync: return m_errorIcon;
|
||||
case SyncthingDirStatus::Unknown:
|
||||
case SyncthingDirStatus::Unshared: return statusIcons().disconnected;
|
||||
case SyncthingDirStatus::Idle: return statusIcons().idling;
|
||||
case SyncthingDirStatus::Scanning: return statusIcons().scanninig;
|
||||
case SyncthingDirStatus::Synchronizing: return statusIcons().sync;
|
||||
case SyncthingDirStatus::Paused: return statusIcons().pause;
|
||||
case SyncthingDirStatus::OutOfSync: return statusIcons().error;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -34,12 +34,6 @@ private Q_SLOTS:
|
|||
|
||||
private:
|
||||
const std::vector<SyncthingDir> &m_dirs;
|
||||
const QIcon m_unknownIcon;
|
||||
const QIcon m_idleIcon;
|
||||
const QIcon m_syncIcon;
|
||||
const QIcon m_errorIcon;
|
||||
const QIcon m_pausedIcon;
|
||||
const QIcon m_otherIcon;
|
||||
};
|
||||
|
||||
} // namespace Data
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
#include "./syncthingicons.h"
|
||||
|
||||
#include <QSvgRenderer>
|
||||
#include <QPainter>
|
||||
|
||||
namespace Data {
|
||||
|
||||
/*!
|
||||
* \brief Renders an SVG image to a QPixmap.
|
||||
* \remarks If instantiating QIcon directly from SVG image the icon is not displayed in the tray under Plasma 5. It works
|
||||
* with Tint2, however.
|
||||
*/
|
||||
QPixmap renderSvgImage(const QString &path, const QSize &size)
|
||||
{
|
||||
QSvgRenderer renderer(path);
|
||||
QPixmap pm(size);
|
||||
pm.fill(QColor(Qt::transparent));
|
||||
QPainter painter(&pm);
|
||||
renderer.render(&painter, pm.rect());
|
||||
return pm;
|
||||
}
|
||||
|
||||
StatusIcons::StatusIcons() :
|
||||
disconnected(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-disconnected.svg")))),
|
||||
idling(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-ok.svg")))),
|
||||
scanninig(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-default.svg")))),
|
||||
notify(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-notify.svg")))),
|
||||
pause(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-pause.svg")))),
|
||||
sync(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-sync.svg")))),
|
||||
error(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-error.svg")))),
|
||||
errorSync(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-error-sync.svg"))))
|
||||
{}
|
||||
|
||||
const StatusIcons LIB_SYNCTHING_MODEL_EXPORT &statusIcons()
|
||||
{
|
||||
static const StatusIcons icons;
|
||||
return icons;
|
||||
}
|
||||
|
||||
} // namespace Data
|
|
@ -0,0 +1,30 @@
|
|||
#ifndef DATA_SYNCTHINGICONS_H
|
||||
#define DATA_SYNCTHINGICONS_H
|
||||
|
||||
#include "./global.h"
|
||||
|
||||
#include <QSize>
|
||||
#include <QIcon>
|
||||
|
||||
namespace Data {
|
||||
|
||||
QPixmap LIB_SYNCTHING_MODEL_EXPORT renderSvgImage(const QString &path, const QSize &size = QSize(128, 128));
|
||||
|
||||
struct StatusIcons
|
||||
{
|
||||
StatusIcons();
|
||||
QIcon disconnected;
|
||||
QIcon idling;
|
||||
QIcon scanninig;
|
||||
QIcon notify;
|
||||
QIcon pause;
|
||||
QIcon sync;
|
||||
QIcon error;
|
||||
QIcon errorSync;
|
||||
};
|
||||
|
||||
const StatusIcons LIB_SYNCTHING_MODEL_EXPORT &statusIcons();
|
||||
|
||||
} // namespace Data
|
||||
|
||||
#endif // DATA_SYNCTHINGICONS_H
|
|
@ -125,7 +125,7 @@ find_package(syncthingmodel ${META_APP_VERSION} REQUIRED)
|
|||
use_syncthingmodel()
|
||||
|
||||
# link also explicitely against the following Qt 5 modules
|
||||
list(APPEND ADDITIONAL_QT_MODULES Network Svg)
|
||||
list(APPEND ADDITIONAL_QT_MODULES Network)
|
||||
|
||||
# include modules to apply configuration
|
||||
include(BasicConfig)
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
#include "../application/settings.h"
|
||||
|
||||
#include "../../model/syncthingicons.h"
|
||||
|
||||
#include "../../connector/syncthingconnection.h"
|
||||
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
|
||||
# include "../../connector/syncthingservice.h"
|
||||
|
@ -12,7 +14,6 @@
|
|||
#include <qtutilities/misc/dialogutils.h>
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QSvgRenderer>
|
||||
#include <QPainter>
|
||||
#include <QPixmap>
|
||||
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
|
||||
|
@ -34,15 +35,6 @@ namespace QtGui {
|
|||
TrayIcon::TrayIcon(QObject *parent) :
|
||||
QSystemTrayIcon(parent),
|
||||
m_initialized(false),
|
||||
m_size(QSize(128, 128)),
|
||||
m_statusIconDisconnected(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-disconnected.svg")))),
|
||||
m_statusIconIdling(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-ok.svg")))),
|
||||
m_statusIconScanning(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-default.svg")))),
|
||||
m_statusIconNotify(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-notify.svg")))),
|
||||
m_statusIconPause(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-pause.svg")))),
|
||||
m_statusIconSync(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-sync.svg")))),
|
||||
m_statusIconError(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-error.svg")))),
|
||||
m_statusIconErrorSync(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-error-sync.svg")))),
|
||||
m_trayMenu(this),
|
||||
m_status(SyncthingStatus::Disconnected)
|
||||
#ifdef QT_UTILITIES_SUPPORT_DBUS_NOTIFICATIONS
|
||||
|
@ -185,7 +177,7 @@ void TrayIcon::updateStatusIconAndText(SyncthingStatus status)
|
|||
const auto &settings = Settings::values();
|
||||
switch(status) {
|
||||
case SyncthingStatus::Disconnected:
|
||||
setIcon(m_statusIconDisconnected);
|
||||
setIcon(statusIcons().disconnected);
|
||||
if(connection.autoReconnectInterval() > 0) {
|
||||
setToolTip(tr("Not connected to Syncthing - trying to reconnect every %1 ms")
|
||||
.arg(connection.autoReconnectInterval()));
|
||||
|
@ -208,7 +200,7 @@ void TrayIcon::updateStatusIconAndText(SyncthingStatus status)
|
|||
}
|
||||
break;
|
||||
case SyncthingStatus::Reconnecting:
|
||||
setIcon(m_statusIconDisconnected);
|
||||
setIcon(statusIcons().disconnected);
|
||||
setToolTip(tr("Reconnecting ..."));
|
||||
break;
|
||||
default:
|
||||
|
@ -217,31 +209,31 @@ void TrayIcon::updateStatusIconAndText(SyncthingStatus status)
|
|||
#endif
|
||||
if(connection.hasOutOfSyncDirs()) {
|
||||
if(status == SyncthingStatus::Synchronizing) {
|
||||
setIcon(m_statusIconErrorSync);
|
||||
setIcon(statusIcons().errorSync);
|
||||
setToolTip(tr("Synchronization is ongoing but at least one directory is out of sync"));
|
||||
} else {
|
||||
setIcon(m_statusIconError);
|
||||
setIcon(statusIcons().error);
|
||||
setToolTip(tr("At least one directory is out of sync"));
|
||||
}
|
||||
} else if(connection.hasUnreadNotifications()) {
|
||||
setIcon(m_statusIconNotify);
|
||||
setIcon(statusIcons().notify);
|
||||
setToolTip(tr("Notifications available"));
|
||||
} else {
|
||||
switch(status) {
|
||||
case SyncthingStatus::Idle:
|
||||
setIcon(m_statusIconIdling);
|
||||
setIcon(statusIcons().idling);
|
||||
setToolTip(tr("Syncthing is idling"));
|
||||
break;
|
||||
case SyncthingStatus::Scanning:
|
||||
setIcon(m_statusIconScanning);
|
||||
setIcon(statusIcons().scanninig);
|
||||
setToolTip(tr("Syncthing is scanning"));
|
||||
break;
|
||||
case SyncthingStatus::Paused:
|
||||
setIcon(m_statusIconPause);
|
||||
setIcon(statusIcons().pause);
|
||||
setToolTip(tr("At least one device is paused"));
|
||||
break;
|
||||
case SyncthingStatus::Synchronizing:
|
||||
setIcon(m_statusIconSync);
|
||||
setIcon(statusIcons().sync);
|
||||
setToolTip(tr("Synchronization is ongoing"));
|
||||
break;
|
||||
default:
|
||||
|
@ -283,19 +275,4 @@ void TrayIcon::updateStatusIconAndText(SyncthingStatus status)
|
|||
m_status = status;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Renders an SVG image to a QPixmap.
|
||||
* \remarks If instantiating QIcon directly from SVG image the icon is not displayed under Plasma 5. It would work
|
||||
* with Tint2, tough.
|
||||
*/
|
||||
QPixmap TrayIcon::renderSvgImage(const QString &path)
|
||||
{
|
||||
QSvgRenderer renderer(path);
|
||||
QPixmap pm(m_size);
|
||||
pm.fill(QColor(Qt::transparent));
|
||||
QPainter painter(&pm);
|
||||
renderer.render(&painter, pm.rect());
|
||||
return pm;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -39,18 +39,7 @@ private slots:
|
|||
void handleSyncthingNotificationAction(const QString &action);
|
||||
|
||||
private:
|
||||
QPixmap renderSvgImage(const QString &path);
|
||||
|
||||
bool m_initialized;
|
||||
const QSize m_size;
|
||||
const QIcon m_statusIconDisconnected;
|
||||
const QIcon m_statusIconIdling;
|
||||
const QIcon m_statusIconScanning;
|
||||
const QIcon m_statusIconNotify;
|
||||
const QIcon m_statusIconPause;
|
||||
const QIcon m_statusIconSync;
|
||||
const QIcon m_statusIconError;
|
||||
const QIcon m_statusIconErrorSync;
|
||||
TrayMenu m_trayMenu;
|
||||
QMenu m_contextMenu;
|
||||
Data::SyncthingStatus m_status;
|
||||
|
|
Loading…
Reference in New Issue