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 change= s based on security type and component look changes when connection state d= o. 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/86a568f91bf8e598d0bb740bb952cf4a70= 622a04 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 +#include "remoteactivatable.h" + +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +#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::SkipMainCompon= entRegistration)) +static const int m_iconSize =3D 48; = ConnectionItem::ConnectionItem(RemoteActivatable *activatable, QObject *pa= rent) : QObject(parent), @@ -14,6 +45,12 @@ ConnectionItem::ConnectionItem(RemoteActivatable *activa= table, QObject *parent) if (remote && (remote->activationState() =3D=3D Knm::InterfaceConnecti= on::Activating || remote->activationState() =3D=3D Knm::InterfaceConnecti= on::Activated)) { m_connected =3D true; + if(remote->activationState() =3D=3D Knm::InterfaceConnection::Acti= vated) { + m_status =3D "connected"; + } else { + m_status =3D "connecting"; + } + } if(remote) { connect(remote, SIGNAL(activationStateChanged(Knm::InterfaceConnec= tion::ActivationState,Knm::InterfaceConnection::ActivationState)), @@ -21,20 +58,48 @@ ConnectionItem::ConnectionItem(RemoteActivatable *activ= atable, QObject *parent) } } = -QString ConnectionItem::ssid() +QString ConnectionItem::protectedIcon() { - RemoteWirelessNetwork *rwic; - RemoteWirelessInterfaceConnection *rwic2; - rwic =3D qobject_cast(m_activatable); - if(rwic) { - return rwic->ssid(); + if(m_activatable) { + bool isShared =3D false; + if (m_activatable) { + isShared =3D m_activatable->isShared(); + } + RemoteWirelessNetwork *rwic; + RemoteWirelessInterfaceConnection *rwic2; + RemoteWirelessObject *wobj; + rwic =3D qobject_cast(m_activatable); + if(rwic) { + wobj =3D rwic; + } + rwic2 =3D qobject_cast(m_acti= vatable); + if(rwic2) { + wobj =3D rwic2; + } + if(wobj) { + Knm::WirelessSecurity::Type best =3D Knm::WirelessSecurity::be= st(wobj->interfaceCapabilities(), !isShared, (wobj->operationMode() =3D=3D = NetworkManager::WirelessDevice::Adhoc), wobj->apCapabilities(), wobj->wpaFl= ags(), wobj->rsnFlags()); + return Knm::WirelessSecurity::iconName(best); + } } - rwic2 =3D qobject_cast(m_activata= ble); - if(rwic2) { - return rwic2->ssid(); + return QString(); +} + +QString ConnectionItem::ssid() +{ + if(m_activatable) { + RemoteWirelessNetwork *rwic; + RemoteWirelessInterfaceConnection *rwic2; + rwic =3D qobject_cast(m_activatable); + if(rwic) { + return rwic->ssid(); + } + rwic2 =3D qobject_cast(m_acti= vatable); + 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 =3D interfaceConnection(); + if (remote && (remote->activationState() =3D=3D Knm::InterfaceConn= ection::Activating || + remote->activationState() =3D=3D Knm::InterfaceConn= ection::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 =3D qobject_cast(m_activatable); - if(rwic) { - return rwic->strength(); + if (!NetworkManager::isNetworkingEnabled()) { + KNotification::event(Event::NetworkingDisabled, i18nc("@info:statu= s Notification when the networking subsystem (NetworkManager, etc) is disab= led", "Networking system disabled"), QPixmap(), 0, KNotification::CloseOnTi= meout, *s_networkManagementComponentData)->sendEvent(); + } else if (!NetworkManager::isWirelessEnabled() && + m_activatable && + m_activatable->activatableType() =3D=3D Knm::Activatable::W= irelessInterfaceConnection) { + KNotification::event(Event::RfOff, i18nc("@info:status Notificatio= n 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 =3D qobject_cast(m_activata= ble); - if(rwic2) { - return rwic2->strength(); +} + +int ConnectionItem::signalStrength() +{ + if(m_activatable) { + RemoteWirelessNetwork *rwic; + RemoteWirelessInterfaceConnection *rwic2; + rwic =3D qobject_cast(m_activatable); + if(rwic) { + return rwic->strength(); + } + rwic2 =3D qobject_cast(m_acti= vatable); + 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::Acti= vationState oldState, Knm::InterfaceConnection::ActivationState newState) { Q_UNUSED(oldState); = - kDebug() << "mudou o estado da conexao"; - switch (newState) { case Knm::InterfaceConnection::Activated: + m_status =3D "connected"; m_connected =3D true; - kDebug() << "mudou para ativado"; break; case Knm::InterfaceConnection::Unknown: + m_status =3D "not connected"; m_connected =3D false; - kDebug() << "mudou para desconectado"; break; case Knm::InterfaceConnection::Activating: + m_status =3D "connecting"; m_connected =3D 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 *paren= t) roles[SsidRole] =3D "ssid"; roles[StrengthRole] =3D "strength"; roles[ConnectedRole] =3D "connectedNetwork"; + roles[StatusRole] =3D "networkStatus"; + roles[ProtectedIconRole] =3D "protectedIcon"; setRoleNames(roles); } = @@ -24,56 +26,62 @@ QVariant ConnectionsListModel::data(const QModelIndex &= index, int role) const if(index.row() < 0 || index.row() >=3D connections.size() || !index.is= Valid()) 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 =3D qobject_castconnections.at(index.row()); - rwic-> - return ; - case ApCapabilitiesRole: - RemoteWirelessInterfaceConnection *rwic =3D qobject_castconnections.at(index.row()); - break; - case WpaFlagsRole: - RemoteWirelessInterfaceConnection *rwic =3D qobject_castconnections.at(index.row()); - break; - case RsnFlagsRole: - RemoteWirelessInterfaceConnection *rwic =3D qobject_castconnections.at(index.row()); - break; - case OperationModeRole: - RemoteWirelessInterfaceConnection *rwic =3D qobject_castconnections.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 =3D qobject_castconnections.at(index.row()); + rwic-> + return ; + case ApCapabilitiesRole: + RemoteWirelessInterfaceConnection *rwic =3D qobject_castconnections.at(index.row()); + break; + case WpaFlagsRole: + RemoteWirelessInterfaceConnection *rwic =3D qobject_castconnections.at(index.row()); + break; + case RsnFlagsRole: + RemoteWirelessInterfaceConnection *rwic =3D qobject_castconnections.at(index.row()); + break; + case OperationModeRole: + RemoteWirelessInterfaceConnection *rwic =3D qobject_castconnections.at(index.row()); + break; + **/ + default: + return QVariant(); + } } = return QVariant(); @@ -83,7 +91,7 @@ void ConnectionsListModel::disconnectFrom(QVariant uuid) { QString connectionId =3D uuid.toString(); if(connectionId !=3D "") { foreach (ConnectionItem *item, connections) { - if (item !=3D 0 && item->connectionUuid() =3D=3D connectionId)= { + if (item && item->connectionUuid() =3D=3D 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 =3D connections.at(index); + if(item !=3D 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 =3D 0); @@ -55,6 +57,8 @@ public: public slots: void itemChanged(); void disconnectFrom(QVariant uuid); + void connectTo(int index); + private: QList connections; = diff --git a/applet/qml/ConnectionsListWidget.qml b/applet/qml/ConnectionsL= istWidget.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 =3D 0.2; else opacity =3D 1; } diff --git a/applet/qml/WirelessNetworkItem.qml b/applet/qml/WirelessNetwor= kItem.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 =3D "hover" = onExited: shadow.state =3D "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 =3D=3D "connected") Font.Bold = + else Font.Normal + } + font.italic: { + if(wifiStatus =3D=3D "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