draw wireless icon

Change-Id: I559cfa7713177124cb1e584db0987500d57f0f2e
This commit is contained in:
石博文 2016-07-25 14:51:06 +08:00 committed by Hualet Wang
parent ca672a04e0
commit 2af94c195d
8 changed files with 78 additions and 11 deletions

View File

@ -1,11 +1,12 @@
#include "wirelessitem.h"
#include "util/imageutil.h"
#include <QPainter>
WirelessItem::WirelessItem(const QUuid &uuid)
: DeviceItem(NetworkDevice::Wireless, uuid)
{
}
QWidget *WirelessItem::itemApplet()
@ -17,16 +18,45 @@ void WirelessItem::paintEvent(QPaintEvent *e)
{
DeviceItem::paintEvent(e);
const Dock::DisplayMode displayMode = qApp->property(PROP_DISPLAY_MODE).value<Dock::DisplayMode>();
const int iconSize = std::min(width(), height()) * 0.8;
const QPixmap pixmap = iconPix(displayMode, iconSize);
QPainter painter(this);
painter.fillRect(rect(), Qt::red);
if (displayMode == Dock::Fashion)
{
const QPixmap pixmap = backgroundPix(iconSize);
painter.drawPixmap(rect().center() - pixmap.rect().center(), pixmap);
}
painter.drawPixmap(rect().center() - pixmap.rect().center(), pixmap);
}
const QPixmap WirelessItem::icon(const QString &key)
void WirelessItem::resizeEvent(QResizeEvent *e)
{
if (!m_icons.contains(key))
{
DeviceItem::resizeEvent(e);
}
m_icons.clear();
}
const QPixmap WirelessItem::iconPix(const Dock::DisplayMode displayMode, const int size)
{
const QString key = QString("wireless-%1%2")
.arg(8)
.arg(displayMode == Dock::Fashion ? "" : "-symbolic");
if (!m_icons.contains(key))
m_icons.insert(key, ImageUtil::loadSvg(":/wireless/resources/wireless/" + key + ".svg", size));
return m_icons.value(key);
}
const QPixmap WirelessItem::backgroundPix(const int size)
{
const QString key = "wireless-background";
if (!m_icons.contains(key))
m_icons.insert(key, ImageUtil::loadSvg(":/wireless/resources/wireless/" + key + ".svg", size));
return m_icons.value(key);
}

View File

@ -1,6 +1,8 @@
#ifndef WIRELESSITEM_H
#define WIRELESSITEM_H
#include "constants.h"
#include "deviceitem.h"
#include <QHash>
@ -16,9 +18,11 @@ public:
protected:
void paintEvent(QPaintEvent *e);
void resizeEvent(QResizeEvent *e);
private:
const QPixmap icon(const QString &key);
const QPixmap iconPix(const Dock::DisplayMode displayMode, const int size);
const QPixmap backgroundPix(const int size);
private:
QHash<QString, QPixmap> m_icons;

View File

@ -21,6 +21,11 @@ bool NetworkDevice::operator==(const NetworkDevice &device) const
return m_uuid == device.m_uuid;
}
NetworkDevice::NetworkState NetworkDevice::state() const
{
return NetworkState(m_infoObj.value("State").toInt());
}
NetworkDevice::NetworkType NetworkDevice::type() const
{
return m_type;

View File

@ -10,6 +10,11 @@
class NetworkDevice
{
public:
enum NetworkState {
Unknow = 0,
Connected = 100,
};
enum NetworkType {
None = 0,
Generic = 1 << 0,
@ -26,6 +31,7 @@ public:
bool operator==(const QUuid &uuid) const;
bool operator==(const NetworkDevice &device) const;
NetworkState state() const;
NetworkType type() const;
const QUuid uuid() const;
const QString path() const;

View File

@ -37,11 +37,18 @@ const QSet<QUuid> NetworkManager::activeConnSet() const
return m_activeConnSet;
}
NetworkDevice::NetworkState NetworkManager::deviceState(const QUuid &uuid) const
{
const auto item = device(uuid);
if (item == m_deviceSet.cend())
return NetworkDevice::Unknow;
return item->state();
}
const QString NetworkManager::deviceHwAddr(const QUuid &uuid) const
{
const auto item = std::find_if(m_deviceSet.cbegin(), m_deviceSet.cend(),
[&] (const NetworkDevice &dev) {return dev == uuid;});
const auto item = device(uuid);
if (item == m_deviceSet.cend())
return QString();
@ -81,6 +88,12 @@ NetworkManager::NetworkManager(QObject *parent)
connect(m_networkInter, &DBusNetwork::ActiveConnectionsChanged, this, &NetworkManager::reloadActiveConnections);
}
const QSet<NetworkDevice>::const_iterator NetworkManager::device(const QUuid &uuid) const
{
return std::find_if(m_deviceSet.cbegin(), m_deviceSet.cend(),
[&] (const NetworkDevice &dev) {return dev == uuid;});
}
void NetworkManager::reloadDevices()
{
const QJsonDocument doc = QJsonDocument::fromJson(m_networkInter->devices().toUtf8());

View File

@ -22,6 +22,7 @@ public:
const QSet<NetworkDevice> deviceList() const;
const QSet<QUuid> activeConnSet() const;
NetworkDevice::NetworkState deviceState(const QUuid &uuid) const;
const QString deviceHwAddr(const QUuid &uuid) const;
const QJsonObject deviceInfo(const QUuid &uuid) const;
@ -35,6 +36,8 @@ signals:
private:
explicit NetworkManager(QObject *parent = 0);
const QSet<NetworkDevice>::const_iterator device(const QUuid &uuid) const;
private slots:
void reloadDevices();
void reloadActiveConnections();

View File

@ -54,7 +54,7 @@ void NetworkPlugin::deviceAdded(const NetworkDevice &device)
switch (device.type())
{
case NetworkDevice::Wired: item = new WiredItem(device.uuid()); break;
// case NetworkDevice::Wireless: item = new WirelessItem(device.uuid()); break;
case NetworkDevice::Wireless: item = new WirelessItem(device.uuid()); break;
default:;
}

View File

@ -13,5 +13,11 @@
<file>resources/wireless/wireless-8.svg</file>
<file>resources/wireless/wireless-background.svg</file>
<file>resources/wireless/wireless-disconnect.svg</file>
<file>resources/wireless/wireless-0-symbolic.svg</file>
<file>resources/wireless/wireless-2-symbolic.svg</file>
<file>resources/wireless/wireless-4-symbolic.svg</file>
<file>resources/wireless/wireless-6-symbolic.svg</file>
<file>resources/wireless/wireless-8-symbolic.svg</file>
<file>resources/wireless/wirelss-disconnect-symbolic.svg</file>
</qresource>
</RCC>