[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [networkmanagement/arthur] applet: Possibility to connect to a wireless network from QML,
From: Arthur Ribeiro <arthurdesribeiro () gmail ! com>
Date: 2012-06-30 21:39:25
Message-ID: 20120630213925.D2A4EA60A6 () git ! kde ! org
[Download RAW message or body]
Git commit 86a568f91bf8e598d0bb740bb952cf4a70622a04 by Arthur Ribeiro.
Committed on 30/06/2012 at 23:39.
Pushed by arthurribeiro into branch 'arthur'.
Possibility to connect to a wireless network from QML, security icon changes based on \
security type and component look changes when connection state do.
M +118 -24 applet/connectionitem.cpp
M +5 -0 applet/connectionitem.h
M +68 -51 applet/connectionslistmodel.cpp
M +5 -1 applet/connectionslistmodel.h
M +5 -1 applet/qml/ConnectionsListWidget.qml
M +0 -1 applet/qml/DisconnectButton.qml
M +16 -11 applet/qml/WirelessNetworkItem.qml
http://commits.kde.org/networkmanagement/86a568f91bf8e598d0bb740bb952cf4a70622a04
diff --git a/applet/connectionitem.cpp b/applet/connectionitem.cpp
index 0bd3b0a..9f86296 100644
--- a/applet/connectionitem.cpp
+++ b/applet/connectionitem.cpp
@@ -1,6 +1,37 @@
#include "connectionitem.h"
+#include "activatableitem.h"
#include <kdebug.h>
+#include "remoteactivatable.h"
+
+#include <QPainter>
+#include <QGraphicsSceneHoverEvent>
+#include <QSize>
+
+#include <KIcon>
+#include <KNotification>
+#include <KGlobalSettings>
+
+#include <Plasma/Animation>
+#include <Plasma/PushButton>
+
+#include <QtNetworkManager/manager.h>
+#include <QtNetworkManager/wirelessdevice.h>
+
+#include <activatable.h>
+#include <remotewirelessobject.h>
+#include <remotewirelessinterfaceconnection.h>
+#include <remotewirelessnetwork.h>
+#include <wirelesssecurityidentifier.h>
+
+#include "activatableitem.h"
+//#include "wirelessinterfaceconnectionitem.h"
+#include "wirelessnetworkitem.h"
+
+#include "../libs/service/events.h"
+
+K_GLOBAL_STATIC_WITH_ARGS(KComponentData, s_networkManagementComponentData, \
("networkmanagement", "networkmanagement", \
KComponentData::SkipMainComponentRegistration)) +static const int m_iconSize = 48;
ConnectionItem::ConnectionItem(RemoteActivatable *activatable, QObject *parent) :
QObject(parent),
@@ -14,6 +45,12 @@ ConnectionItem::ConnectionItem(RemoteActivatable *activatable, \
QObject *parent)
if (remote && (remote->activationState() == Knm::InterfaceConnection::Activating \
||
remote->activationState() == \
Knm::InterfaceConnection::Activated)) { m_connected = true;
+ if(remote->activationState() == Knm::InterfaceConnection::Activated) {
+ m_status = "connected";
+ } else {
+ m_status = "connecting";
+ }
+
}
if(remote) {
connect(remote, \
SIGNAL(activationStateChanged(Knm::InterfaceConnection::ActivationState,Knm::InterfaceConnection::ActivationState)),
@@ -21,20 +58,48 @@ ConnectionItem::ConnectionItem(RemoteActivatable *activatable, \
QObject *parent) }
}
-QString ConnectionItem::ssid()
+QString ConnectionItem::protectedIcon()
{
- RemoteWirelessNetwork *rwic;
- RemoteWirelessInterfaceConnection *rwic2;
- rwic = qobject_cast<RemoteWirelessNetwork *>(m_activatable);
- if(rwic) {
- return rwic->ssid();
+ if(m_activatable) {
+ bool isShared = false;
+ if (m_activatable) {
+ isShared = m_activatable->isShared();
+ }
+ RemoteWirelessNetwork *rwic;
+ RemoteWirelessInterfaceConnection *rwic2;
+ RemoteWirelessObject *wobj;
+ rwic = qobject_cast<RemoteWirelessNetwork *>(m_activatable);
+ if(rwic) {
+ wobj = rwic;
+ }
+ rwic2 = qobject_cast<RemoteWirelessInterfaceConnection *>(m_activatable);
+ if(rwic2) {
+ wobj = rwic2;
+ }
+ if(wobj) {
+ Knm::WirelessSecurity::Type best = \
Knm::WirelessSecurity::best(wobj->interfaceCapabilities(), !isShared, \
(wobj->operationMode() == NetworkManager::WirelessDevice::Adhoc), \
wobj->apCapabilities(), wobj->wpaFlags(), wobj->rsnFlags()); + return \
Knm::WirelessSecurity::iconName(best); + }
}
- rwic2 = qobject_cast<RemoteWirelessInterfaceConnection *>(m_activatable);
- if(rwic2) {
- return rwic2->ssid();
+ return QString();
+}
+
+QString ConnectionItem::ssid()
+{
+ if(m_activatable) {
+ RemoteWirelessNetwork *rwic;
+ RemoteWirelessInterfaceConnection *rwic2;
+ rwic = qobject_cast<RemoteWirelessNetwork *>(m_activatable);
+ if(rwic) {
+ return rwic->ssid();
+ }
+ rwic2 = qobject_cast<RemoteWirelessInterfaceConnection *>(m_activatable);
+ if(rwic2) {
+ return rwic2->ssid();
+ }
}
- return QString();
+ return "";
}
QString ConnectionItem::connectionUuid()
@@ -62,17 +127,43 @@ void ConnectionItem::disconnect() {
}
}
-int ConnectionItem::signalStrength()
+void ConnectionItem::connectNetwork() {
+ if(m_activatable) {
+ RemoteInterfaceConnection * remote = interfaceConnection();
+ if (remote && (remote->activationState() == \
Knm::InterfaceConnection::Activating || + \
remote->activationState() == Knm::InterfaceConnection::Activated)) { + // \
Show interface details + } else {
+ QTimer::singleShot(0, m_activatable, SLOT(activate()));
+ }
+ }
+ QTimer::singleShot(0, this, SLOT(notifyNetworkingState()));
+}
+
+void ConnectionItem::notifyNetworkingState()
{
- RemoteWirelessNetwork *rwic;
- RemoteWirelessInterfaceConnection *rwic2;
- rwic = qobject_cast<RemoteWirelessNetwork *>(m_activatable);
- if(rwic) {
- return rwic->strength();
+ if (!NetworkManager::isNetworkingEnabled()) {
+ KNotification::event(Event::NetworkingDisabled, i18nc("@info:status \
Notification when the networking subsystem (NetworkManager, etc) is disabled", \
"Networking system disabled"), QPixmap(), 0, KNotification::CloseOnTimeout, \
*s_networkManagementComponentData)->sendEvent(); + } else if \
(!NetworkManager::isWirelessEnabled() && + m_activatable &&
+ m_activatable->activatableType() == \
Knm::Activatable::WirelessInterfaceConnection) { + \
KNotification::event(Event::RfOff, i18nc("@info:status Notification for radio kill \
switch turned off", "Wireless hardware disabled"), \
KIcon("network-wireless").pixmap(QSize(m_iconSize,m_iconSize)), 0, \
KNotification::CloseOnTimeout, *s_networkManagementComponentData)->sendEvent(); }
- rwic2 = qobject_cast<RemoteWirelessInterfaceConnection *>(m_activatable);
- if(rwic2) {
- return rwic2->strength();
+}
+
+int ConnectionItem::signalStrength()
+{
+ if(m_activatable) {
+ RemoteWirelessNetwork *rwic;
+ RemoteWirelessInterfaceConnection *rwic2;
+ rwic = qobject_cast<RemoteWirelessNetwork *>(m_activatable);
+ if(rwic) {
+ return rwic->strength();
+ }
+ rwic2 = qobject_cast<RemoteWirelessInterfaceConnection *>(m_activatable);
+ if(rwic2) {
+ return rwic2->strength();
+ }
}
return 0;
@@ -89,24 +180,27 @@ bool ConnectionItem::connected()
return m_connected;
}
+QString ConnectionItem::status()
+{
+ return m_status;
+}
+
void ConnectionItem::activationStateChanged(Knm::InterfaceConnection::ActivationState \
oldState, Knm::InterfaceConnection::ActivationState newState) {
Q_UNUSED(oldState);
- kDebug() << "mudou o estado da conexao";
-
switch (newState) {
case Knm::InterfaceConnection::Activated:
+ m_status = "connected";
m_connected = true;
- kDebug() << "mudou para ativado";
break;
case Knm::InterfaceConnection::Unknown:
+ m_status = "not connected";
m_connected = false;
- kDebug() << "mudou para desconectado";
break;
case Knm::InterfaceConnection::Activating:
+ m_status = "connecting";
m_connected = true;
- kDebug() << "mudou para ativando";
break;
}
diff --git a/applet/connectionitem.h b/applet/connectionitem.h
index 217af2f..ff59d91 100644
--- a/applet/connectionitem.h
+++ b/applet/connectionitem.h
@@ -21,10 +21,14 @@ public:
RemoteInterfaceConnection* interfaceConnection() const;
bool equals(const ConnectionItem *item);
void disconnect();
+ void connectNetwork();
+ QString status();
+ QString protectedIcon();
protected Q_SLOTS:
void handlePropertiesChanges(int strength);
void activationStateChanged(Knm::InterfaceConnection::ActivationState oldState, \
Knm::InterfaceConnection::ActivationState newState); + void \
notifyNetworkingState();
Q_SIGNALS:
void itemChanged();
@@ -32,6 +36,7 @@ Q_SIGNALS:
private:
RemoteActivatable *m_activatable;
bool m_connected;
+ QString m_status;
};
#endif
diff --git a/applet/connectionslistmodel.cpp b/applet/connectionslistmodel.cpp
index a4b4235..665468c 100644
--- a/applet/connectionslistmodel.cpp
+++ b/applet/connectionslistmodel.cpp
@@ -16,6 +16,8 @@ ConnectionsListModel::ConnectionsListModel(QObject *parent)
roles[SsidRole] = "ssid";
roles[StrengthRole] = "strength";
roles[ConnectedRole] = "connectedNetwork";
+ roles[StatusRole] = "networkStatus";
+ roles[ProtectedIconRole] = "protectedIcon";
setRoleNames(roles);
}
@@ -24,56 +26,62 @@ QVariant ConnectionsListModel::data(const QModelIndex &index, int \
role) const
if(index.row() < 0 || index.row() >= connections.size() || !index.isValid())
return QVariant();
- switch(role) {
- case DeviceUniRole:
- return connections.at(index.row())->deviceUni();
- case ActivatableTypeRole:
- return connections.at(index.row())->activatableType();
- case IsSharedRole:
- return connections.at(index.row())->isShared();
- case ConnectionTypeRole:
- //return connections.at(index.row())->connectionType();
- return QVariant();
- case ConnectionUuidRole:
- return connections.at(index.row())->connectionUuid();
- case ConnectionNameRole:
- //return connections.at(index.row())->connectionName();
- return QVariant();
- case ActivationStateRole:
- //return connections.at(index.row())->activationStateRole();
- return QVariant();
- case OldActivationStateRole:
- //return connections.at(index.row())->oldActivationState();
- return QVariant();
- case HasDefaultRouteRole:
- //return connections.at(index.row())->hasDefaultRoute();
- return QVariant();
- case SsidRole:
- return connections.at(index.row())->ssid();
- case StrengthRole:
- return connections.at(index.row())->signalStrength();
- case ConnectedRole:
- return connections.at(index.row())->connected();
- /**
- case InterfaceCapabilitiesRole:
- RemoteWirelessInterfaceConnection *rwic = \
qobject_cast<RemoteWirelessInterfaceConnection \
*>connections.at(index.row());
- rwic->
- return ;
- case ApCapabilitiesRole:
- RemoteWirelessInterfaceConnection *rwic = \
qobject_cast<RemoteWirelessInterfaceConnection \
*>connections.at(index.row());
- break;
- case WpaFlagsRole:
- RemoteWirelessInterfaceConnection *rwic = \
qobject_cast<RemoteWirelessInterfaceConnection \
*>connections.at(index.row());
- break;
- case RsnFlagsRole:
- RemoteWirelessInterfaceConnection *rwic = \
qobject_cast<RemoteWirelessInterfaceConnection \
*>connections.at(index.row());
- break;
- case OperationModeRole:
- RemoteWirelessInterfaceConnection *rwic = \
qobject_cast<RemoteWirelessInterfaceConnection \
*>connections.at(index.row());
- break;
- **/
- default:
- return QVariant();
+ if(connections.at(index.row())) {
+ switch(role) {
+ case DeviceUniRole:
+ return connections.at(index.row())->deviceUni();
+ case ActivatableTypeRole:
+ return connections.at(index.row())->activatableType();
+ case IsSharedRole:
+ return connections.at(index.row())->isShared();
+ case ConnectionTypeRole:
+ //return connections.at(index.row())->connectionType();
+ return QVariant();
+ case ConnectionUuidRole:
+ return connections.at(index.row())->connectionUuid();
+ case ConnectionNameRole:
+ //return connections.at(index.row())->connectionName();
+ return QVariant();
+ case ActivationStateRole:
+ //return connections.at(index.row())->activationStateRole();
+ return QVariant();
+ case OldActivationStateRole:
+ //return connections.at(index.row())->oldActivationState();
+ return QVariant();
+ case HasDefaultRouteRole:
+ //return connections.at(index.row())->hasDefaultRoute();
+ return QVariant();
+ case SsidRole:
+ return connections.at(index.row())->ssid();
+ case StrengthRole:
+ return connections.at(index.row())->signalStrength();
+ case ConnectedRole:
+ return connections.at(index.row())->connected();
+ case StatusRole:
+ return connections.at(index.row())->status();
+ case ProtectedIconRole:
+ return connections.at(index.row())->protectedIcon();
+ /**
+ case InterfaceCapabilitiesRole:
+ RemoteWirelessInterfaceConnection *rwic = \
qobject_cast<RemoteWirelessInterfaceConnection *>connections.at(index.row()); + \
rwic-> + return ;
+ case ApCapabilitiesRole:
+ RemoteWirelessInterfaceConnection *rwic = \
qobject_cast<RemoteWirelessInterfaceConnection *>connections.at(index.row()); + \
break; + case WpaFlagsRole:
+ RemoteWirelessInterfaceConnection *rwic = \
qobject_cast<RemoteWirelessInterfaceConnection *>connections.at(index.row()); + \
break; + case RsnFlagsRole:
+ RemoteWirelessInterfaceConnection *rwic = \
qobject_cast<RemoteWirelessInterfaceConnection *>connections.at(index.row()); + \
break; + case OperationModeRole:
+ RemoteWirelessInterfaceConnection *rwic = \
qobject_cast<RemoteWirelessInterfaceConnection *>connections.at(index.row()); + \
break; + **/
+ default:
+ return QVariant();
+ }
}
return QVariant();
@@ -83,7 +91,7 @@ void ConnectionsListModel::disconnectFrom(QVariant uuid) {
QString connectionId = uuid.toString();
if(connectionId != "") {
foreach (ConnectionItem *item, connections) {
- if (item != 0 && item->connectionUuid() == connectionId) {
+ if (item && item->connectionUuid() == connectionId) {
item->disconnect();
}
}
@@ -91,6 +99,15 @@ void ConnectionsListModel::disconnectFrom(QVariant uuid) {
}
+void ConnectionsListModel::connectTo(int index) {
+ if(index > -1 && index < connections.size()) {
+ ConnectionItem *item = connections.at(index);
+ if(item != 0) {
+ item->connectNetwork();
+ }
+ }
+}
+
int ConnectionsListModel::rowCount(const QModelIndex &parent) const {
Q_UNUSED(parent);
return connections.size();
diff --git a/applet/connectionslistmodel.h b/applet/connectionslistmodel.h
index c51f21d..d8ffea2 100644
--- a/applet/connectionslistmodel.h
+++ b/applet/connectionslistmodel.h
@@ -31,7 +31,9 @@ public:
WpaFlagsRole,
RsnFlagsRole,
OperationModeRole,
- ConnectedRole
+ ConnectedRole,
+ StatusRole,
+ ProtectedIconRole
};
ConnectionsListModel(QObject *parent = 0);
@@ -55,6 +57,8 @@ public:
public slots:
void itemChanged();
void disconnectFrom(QVariant uuid);
+ void connectTo(int index);
+
private:
QList<ConnectionItem *> connections;
diff --git a/applet/qml/ConnectionsListWidget.qml \
b/applet/qml/ConnectionsListWidget.qml index 3c5c225..be6c162 100644
--- a/applet/qml/ConnectionsListWidget.qml
+++ b/applet/qml/ConnectionsListWidget.qml
@@ -44,11 +44,15 @@ Item {
uuid: connectionUuid;
networkName: ssid;
signalStrengthValue: strength;
- protectedNetwork: modelProtectedNetwork;
+ protectedNetworkIcon: protectedIcon;
connected: connectedNetwork;
+ wifiStatus: networkStatus;
onDisconnect: {
connectionsListModel.disconnectFrom(uuid);
}
+ onConnectionClicked: {
+ connectionsListModel.connectTo(index);
+ }
}
Rectangle {
diff --git a/applet/qml/DisconnectButton.qml b/applet/qml/DisconnectButton.qml
index f819507..395431c 100644
--- a/applet/qml/DisconnectButton.qml
+++ b/applet/qml/DisconnectButton.qml
@@ -34,7 +34,6 @@ Item {
opacity: (status) ? 1 : 0.2
onStatusChanged: {
- console.log("mudou o status");
if(!status) opacity = 0.2;
else opacity = 1;
}
diff --git a/applet/qml/WirelessNetworkItem.qml b/applet/qml/WirelessNetworkItem.qml
index 1f6be58..0eb6dc2 100644
--- a/applet/qml/WirelessNetworkItem.qml
+++ b/applet/qml/WirelessNetworkItem.qml
@@ -30,11 +30,13 @@ Item {
property string uuid;
property string networkName;
+ property string wifiStatus;
property double signalStrengthValue;
property bool connected;
- property bool protectedNetwork: true
+ property string protectedNetworkIcon;
signal disconnect(string uuidProperty)
+ signal connectionClicked(int index)
Rectangle {
anchors.leftMargin: 2
@@ -56,6 +58,8 @@ Item {
onEntered: shadow.state = "hover"
onExited: shadow.state = "hidden"
+
+ onClicked: connectionClicked(index);
}
@@ -78,19 +82,20 @@ Item {
anchors.verticalCenter: parent.verticalCenter
spacing: 5
- QIconItem {
- id: connectionIcon
-
- icon: QIcon("network-wireless-connected-100")
- width: 16
- height: 16
- visible: true
- anchors.verticalCenter: parent.verticalCenter
+ WirelessNetworkIcon {
+ status: wifiStatus
}
PlasmaComponents.Label {
text: networkName
- font.weight: (connected) ? Font.Bold : Font.Normal
+ font.weight: {
+ if(wifiStatus == "connected") Font.Bold
+ else Font.Normal
+ }
+ font.italic: {
+ if(wifiStatus == "connecting") true
+ else false
+ }
}
}
@@ -117,7 +122,7 @@ Item {
QIconItem {
id: protectIcon
- icon: (protectedNetwork) ? QIcon("security-high") : \
QIcon("security-low") + icon: QIcon(protectedNetworkIcon)
width: 22
height: 22
visible: true
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic