Merge "add wireless network connecting animation"

This commit is contained in:
石博文 2016-08-30 08:02:40 +00:00 committed by Deepin Code Review
commit 48bdbf7467
98 changed files with 183 additions and 52 deletions

View File

@ -7,11 +7,12 @@
DWIDGET_USE_NAMESPACE
AccessPointWidget::AccessPointWidget(const AccessPoint &ap)
: QWidget(nullptr),
: QFrame(nullptr),
m_active(false),
m_activeState(NetworkDevice::Unknow),
m_ap(ap),
m_ssidBtn(new QPushButton(this)),
m_indicator(new DPictureSequenceView(this)),
m_disconnectBtn(new DImageButton(this)),
m_securityIcon(new QLabel),
m_strengthIcon(new QLabel)
@ -25,6 +26,14 @@ AccessPointWidget::AccessPointWidget(const AccessPoint &ap)
m_disconnectBtn->setHoverPic(":/wireless/resources/wireless/disconnect.png");
m_disconnectBtn->setPressPic(":/wireless/resources/wireless/disconnect_pressed.png");
QStringList indicatorList;
for (uint i(1); i != 91; ++i)
indicatorList << QString(":/wireless/indicator/resources/wireless/spinner14/Spinner%1.png").arg(i, 2, 10, QChar('0'));
m_indicator->setPictureSequence(indicatorList);
m_indicator->setFixedSize(14, 14);
m_indicator->play();
m_indicator->setVisible(false);
if (ap.secured())
m_securityIcon->setPixmap(QPixmap(":/wireless/resources/wireless/security.svg"));
else
@ -40,16 +49,13 @@ AccessPointWidget::AccessPointWidget(const AccessPoint &ap)
infoLayout->addWidget(m_strengthIcon);
infoLayout->addSpacing(10);
infoLayout->addWidget(m_ssidBtn);
infoLayout->addWidget(m_indicator);
infoLayout->addWidget(m_disconnectBtn);
infoLayout->addSpacing(20);
infoLayout->setSpacing(0);
infoLayout->setContentsMargins(15, 0, 0, 0);
HorizontalSeperator *seperator = new HorizontalSeperator;
seperator->setFixedHeight(1);
QVBoxLayout *centeralLayout = new QVBoxLayout;
centeralLayout->addWidget(seperator);
centeralLayout->addLayout(infoLayout);
centeralLayout->setSpacing(0);
centeralLayout->setMargin(0);
@ -62,6 +68,13 @@ AccessPointWidget::AccessPointWidget(const AccessPoint &ap)
"border:none;"
"text-align:left;"
"}"
"AccessPointWidget {"
"border-top:1px solid rgba(255, 255, 255, .1);"
"}"
"AccessPointWidget:hover {"
"border:none;"
"background-color:rgba(255, 255, 255, .1);"
"}"
"AccessPointWidget[active=true] #Ssid {"
// "color:#2ca7f8;"
"}");
@ -72,17 +85,32 @@ AccessPointWidget::AccessPointWidget(const AccessPoint &ap)
bool AccessPointWidget::active() const
{
return m_active;
return m_activeState == NetworkDevice::Activated;
}
void AccessPointWidget::setActive(const bool active)
void AccessPointWidget::setActiveState(const NetworkDevice::NetworkState state)
{
if (m_active == active)
if (m_activeState == state)
return;
m_disconnectBtn->setVisible(active);
m_active = active;
m_activeState = state;
setStyleSheet(styleSheet());
const bool isActive = active();
m_disconnectBtn->setVisible(isActive);
m_indicator->setVisible(!isActive && state > NetworkDevice::Disconnected);
}
void AccessPointWidget::enterEvent(QEvent *e)
{
QWidget::enterEvent(e);
m_disconnectBtn->setNormalPic(":/wireless/resources/wireless/disconnect.png");
}
void AccessPointWidget::leaveEvent(QEvent *e)
{
QWidget::leaveEvent(e);
m_disconnectBtn->setNormalPic(":/wireless/resources/wireless/selected.png");
}
void AccessPointWidget::setStrengthIcon(const int strength)
@ -95,12 +123,12 @@ void AccessPointWidget::setStrengthIcon(const int strength)
void AccessPointWidget::ssidClicked()
{
setActiveState(NetworkDevice::Prepare);
emit requestActiveAP(QDBusObjectPath(m_ap.path()), m_ap.ssid());
}
void AccessPointWidget::disconnectBtnClicked()
{
setActiveState(NetworkDevice::Unknow);
emit requestDeactiveAP(m_ap);
setActive(false);
}

View File

@ -2,6 +2,7 @@
#define ACCESSPOINTWIDGET_H
#include "accesspoint.h"
#include "networkdevice.h"
#include <QWidget>
#include <QLabel>
@ -9,23 +10,26 @@
#include <QDBusObjectPath>
#include <dimagebutton.h>
#include <dpicturesequenceview.h>
class AccessPointWidget : public QWidget
class AccessPointWidget : public QFrame
{
Q_OBJECT
Q_PROPERTY(bool active READ active WRITE setActive DESIGNABLE true)
Q_PROPERTY(bool active READ active DESIGNABLE true)
public:
explicit AccessPointWidget(const AccessPoint &ap);
bool active() const;
void setActive(const bool active);
void setActiveState(const NetworkDevice::NetworkState state);
signals:
void requestActiveAP(const QDBusObjectPath &apPath, const QString &ssid) const;
void requestDeactiveAP(const AccessPoint &ap) const;
private:
void enterEvent(QEvent *e);
void leaveEvent(QEvent *e);
void setStrengthIcon(const int strength);
private slots:
@ -33,10 +37,11 @@ private slots:
void disconnectBtnClicked();
private:
bool m_active;
NetworkDevice::NetworkState m_activeState;
AccessPoint m_ap;
QPushButton *m_ssidBtn;
Dtk::Widget::DPictureSequenceView *m_indicator;
Dtk::Widget::DImageButton *m_disconnectBtn;
QLabel *m_securityIcon;
QLabel *m_strengthIcon;

View File

@ -21,15 +21,15 @@ DeviceControlWidget::DeviceControlWidget(QWidget *parent)
infoLayout->setSpacing(0);
infoLayout->setContentsMargins(15, 0, 5, 0);
m_seperator = new HorizontalSeperator;
m_seperator->setFixedHeight(1);
m_seperator->setColor(Qt::black);
// m_seperator = new HorizontalSeperator;
// m_seperator->setFixedHeight(1);
// m_seperator->setColor(Qt::black);
QVBoxLayout *centeralLayout = new QVBoxLayout;
centeralLayout->addStretch();
centeralLayout->addLayout(infoLayout);
centeralLayout->addStretch();
centeralLayout->addWidget(m_seperator);
// centeralLayout->addWidget(m_seperator);
centeralLayout->setMargin(0);
centeralLayout->setSpacing(0);
@ -49,7 +49,7 @@ void DeviceControlWidget::setDeviceEnabled(const bool enable)
m_switchBtn->setChecked(enable);
}
void DeviceControlWidget::setSeperatorVisible(const bool visible)
{
m_seperator->setVisible(visible);
}
//void DeviceControlWidget::setSeperatorVisible(const bool visible)
//{
// m_seperator->setVisible(visible);
//}

View File

@ -17,7 +17,7 @@ public:
void setDeviceName(const QString &name);
void setDeviceEnabled(const bool enable);
void setSeperatorVisible(const bool visible);
// void setSeperatorVisible(const bool visible);
signals:
void deviceEnableChanged(const bool enable) const;
@ -25,7 +25,7 @@ signals:
private:
QLabel *m_deviceName;
Dtk::Widget::DSwitchButton *m_switchBtn;
HorizontalSeperator *m_seperator;
// HorizontalSeperator *m_seperator;
};
#endif // DEVICECONTROLWIDGET_H

View File

@ -212,14 +212,14 @@ void WirelessList::updateAPList()
{
// sort ap list by strength
std::sort(m_apList.begin(), m_apList.end(), std::greater<AccessPoint>());
const bool wirelessActived = m_device.state() == NetworkDevice::Activated;
// const bool wirelessActived = m_device.state() == NetworkDevice::Activated;
for (auto ap : m_apList)
{
AccessPointWidget *apw = new AccessPointWidget(ap);
apw->setFixedHeight(ITEM_HEIGHT);
if (wirelessActived && ap == m_activeAP)
apw->setActive(true);
if (ap == m_activeAP)
apw->setActiveState(m_device.state());
connect(apw, &AccessPointWidget::requestActiveAP, this, &WirelessList::activateAP);
connect(apw, &AccessPointWidget::requestDeactiveAP, this, &WirelessList::deactiveAP);
@ -229,7 +229,7 @@ void WirelessList::updateAPList()
++avaliableAPCount;
}
}
m_controlPanel->setSeperatorVisible(avaliableAPCount);
// m_controlPanel->setSeperatorVisible(avaliableAPCount);
const int contentHeight = avaliableAPCount * ITEM_HEIGHT;
m_centeralWidget->setFixedHeight(contentHeight);
@ -274,25 +274,7 @@ void WirelessList::deviceStateChanegd()
break;
}
}
// for (auto wireless : infoList.value().toArray())
// {
// const QJsonObject info = wireless.toObject();
// if (info.value("Path") == m_device.path())
// {
// const NetworkDevice prevInfo = m_device;
// m_device = NetworkDevice(NetworkDevice::Wireless, info);
// setDeviceInfo();
// if (prevInfo.state() != m_device.state())
// emit wirelessStateChanged(m_device.state());
// if (prevInfo.activeAp() != m_device.activeAp())
// onActiveAPChanged();
// break;
// }
// }
break;
}
}

View File

@ -7,9 +7,15 @@
WirelessItem::WirelessItem(const QUuid &uuid)
: DeviceItem(uuid),
m_refershTimer(new QTimer(this)),
m_wirelessApplet(new QWidget),
m_APList(nullptr)
{
m_refershTimer->setSingleShot(false);
m_refershTimer->setInterval(100);
connect(m_refershTimer, &QTimer::timeout, this, static_cast<void (WirelessItem::*)()>(&WirelessItem::update));
QMetaObject::invokeMethod(this, "init", Qt::QueuedConnection);
}
@ -82,11 +88,28 @@ void WirelessItem::mousePressEvent(QMouseEvent *e)
const QPixmap WirelessItem::iconPix(const Dock::DisplayMode displayMode, const int size)
{
QString type;
if (m_APList->wirelessState() != NetworkDevice::Activated)
const auto state = m_APList->wirelessState();
if (state <= NetworkDevice::Disconnected)
{
type = "disconnect";
m_refershTimer->stop();
}
else
{
const int strength = m_APList->activeAPStrgength();
int strength = 0;
if (state == NetworkDevice::Activated)
{
strength = m_APList->activeAPStrgength();
m_refershTimer->stop();
}
else
{
strength = QTime::currentTime().msec() / 10 % 100;
if (!m_refershTimer->isActive())
m_refershTimer->start();
}
if (strength == 100)
type = "8";
else

View File

@ -38,6 +38,7 @@ private slots:
private:
QHash<QString, QPixmap> m_icons;
QTimer *m_refershTimer;
QWidget *m_wirelessApplet;
WirelessList *m_APList;
};

View File

@ -24,4 +24,96 @@
<file>resources/wireless/disconnect.png</file>
<file>resources/wireless/selected.png</file>
</qresource>
<qresource prefix="/wireless/indicator">
<file>resources/wireless/spinner14/Spinner01.png</file>
<file>resources/wireless/spinner14/Spinner02.png</file>
<file>resources/wireless/spinner14/Spinner03.png</file>
<file>resources/wireless/spinner14/Spinner04.png</file>
<file>resources/wireless/spinner14/Spinner05.png</file>
<file>resources/wireless/spinner14/Spinner06.png</file>
<file>resources/wireless/spinner14/Spinner07.png</file>
<file>resources/wireless/spinner14/Spinner08.png</file>
<file>resources/wireless/spinner14/Spinner09.png</file>
<file>resources/wireless/spinner14/Spinner10.png</file>
<file>resources/wireless/spinner14/Spinner11.png</file>
<file>resources/wireless/spinner14/Spinner12.png</file>
<file>resources/wireless/spinner14/Spinner13.png</file>
<file>resources/wireless/spinner14/Spinner14.png</file>
<file>resources/wireless/spinner14/Spinner15.png</file>
<file>resources/wireless/spinner14/Spinner16.png</file>
<file>resources/wireless/spinner14/Spinner17.png</file>
<file>resources/wireless/spinner14/Spinner18.png</file>
<file>resources/wireless/spinner14/Spinner19.png</file>
<file>resources/wireless/spinner14/Spinner20.png</file>
<file>resources/wireless/spinner14/Spinner21.png</file>
<file>resources/wireless/spinner14/Spinner22.png</file>
<file>resources/wireless/spinner14/Spinner23.png</file>
<file>resources/wireless/spinner14/Spinner24.png</file>
<file>resources/wireless/spinner14/Spinner25.png</file>
<file>resources/wireless/spinner14/Spinner26.png</file>
<file>resources/wireless/spinner14/Spinner27.png</file>
<file>resources/wireless/spinner14/Spinner28.png</file>
<file>resources/wireless/spinner14/Spinner29.png</file>
<file>resources/wireless/spinner14/Spinner30.png</file>
<file>resources/wireless/spinner14/Spinner31.png</file>
<file>resources/wireless/spinner14/Spinner32.png</file>
<file>resources/wireless/spinner14/Spinner33.png</file>
<file>resources/wireless/spinner14/Spinner34.png</file>
<file>resources/wireless/spinner14/Spinner35.png</file>
<file>resources/wireless/spinner14/Spinner36.png</file>
<file>resources/wireless/spinner14/Spinner37.png</file>
<file>resources/wireless/spinner14/Spinner38.png</file>
<file>resources/wireless/spinner14/Spinner39.png</file>
<file>resources/wireless/spinner14/Spinner40.png</file>
<file>resources/wireless/spinner14/Spinner41.png</file>
<file>resources/wireless/spinner14/Spinner42.png</file>
<file>resources/wireless/spinner14/Spinner43.png</file>
<file>resources/wireless/spinner14/Spinner44.png</file>
<file>resources/wireless/spinner14/Spinner45.png</file>
<file>resources/wireless/spinner14/Spinner46.png</file>
<file>resources/wireless/spinner14/Spinner47.png</file>
<file>resources/wireless/spinner14/Spinner48.png</file>
<file>resources/wireless/spinner14/Spinner49.png</file>
<file>resources/wireless/spinner14/Spinner50.png</file>
<file>resources/wireless/spinner14/Spinner51.png</file>
<file>resources/wireless/spinner14/Spinner52.png</file>
<file>resources/wireless/spinner14/Spinner53.png</file>
<file>resources/wireless/spinner14/Spinner54.png</file>
<file>resources/wireless/spinner14/Spinner55.png</file>
<file>resources/wireless/spinner14/Spinner56.png</file>
<file>resources/wireless/spinner14/Spinner57.png</file>
<file>resources/wireless/spinner14/Spinner58.png</file>
<file>resources/wireless/spinner14/Spinner59.png</file>
<file>resources/wireless/spinner14/Spinner60.png</file>
<file>resources/wireless/spinner14/Spinner61.png</file>
<file>resources/wireless/spinner14/Spinner62.png</file>
<file>resources/wireless/spinner14/Spinner63.png</file>
<file>resources/wireless/spinner14/Spinner64.png</file>
<file>resources/wireless/spinner14/Spinner65.png</file>
<file>resources/wireless/spinner14/Spinner66.png</file>
<file>resources/wireless/spinner14/Spinner67.png</file>
<file>resources/wireless/spinner14/Spinner68.png</file>
<file>resources/wireless/spinner14/Spinner69.png</file>
<file>resources/wireless/spinner14/Spinner70.png</file>
<file>resources/wireless/spinner14/Spinner71.png</file>
<file>resources/wireless/spinner14/Spinner72.png</file>
<file>resources/wireless/spinner14/Spinner73.png</file>
<file>resources/wireless/spinner14/Spinner74.png</file>
<file>resources/wireless/spinner14/Spinner75.png</file>
<file>resources/wireless/spinner14/Spinner76.png</file>
<file>resources/wireless/spinner14/Spinner77.png</file>
<file>resources/wireless/spinner14/Spinner78.png</file>
<file>resources/wireless/spinner14/Spinner79.png</file>
<file>resources/wireless/spinner14/Spinner80.png</file>
<file>resources/wireless/spinner14/Spinner81.png</file>
<file>resources/wireless/spinner14/Spinner82.png</file>
<file>resources/wireless/spinner14/Spinner83.png</file>
<file>resources/wireless/spinner14/Spinner84.png</file>
<file>resources/wireless/spinner14/Spinner85.png</file>
<file>resources/wireless/spinner14/Spinner86.png</file>
<file>resources/wireless/spinner14/Spinner87.png</file>
<file>resources/wireless/spinner14/Spinner88.png</file>
<file>resources/wireless/spinner14/Spinner89.png</file>
<file>resources/wireless/spinner14/Spinner90.png</file>
</qresource>
</RCC>

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 426 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 B