[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