Index: networkstatus/connectionmanager.cpp =================================================================== --- /dev/null +++ networkstatus/connectionmanager.cpp @@ -0,0 +1,171 @@ +/* This file is part of kdepim. + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include +#include +#include + +#include "connectionmanager.h" +#include "connectionmanager_p.h" + +// Connection manager itself +ConnectionManager::ConnectionManager( QObject * parent, const char * name ) : DCOPObject( "ConnectionManager" ), QObject( parent, name ), d( new ConnectionManagerPrivate( this ) ) +{ + d->service = new NetworkStatusIface_stub( kapp->dcopClient(), "kded", "networkstatus" ); + + connectDCOPSignal( "kded", "networkstatus", "statusChange(int)", "slotStatusChanged(int)", false ); + + initialise(); +} + +ConnectionManager::~ConnectionManager() +{ + delete d; +} + +ConnectionManager *ConnectionManager::s_self = 0L; + +ConnectionManager *ConnectionManager::self() +{ + static KStaticDeleter deleter; + if(!s_self) + deleter.setObject( s_self, new ConnectionManager( 0, "connection_manager" ) ); + return s_self; +} + +void ConnectionManager::initialise() +{ + // determine initial state and set the state object accordingly. + d->status = ( NetworkStatus::Status )d->service->status(); +} + +NetworkStatus::Status ConnectionManager::status() +{ + return d->status; +} + +void ConnectionManager::slotStatusChanged( int status ) +{ + d->status = ( NetworkStatus::Status )status; + switch ( status ) { + case NetworkStatus::NoNetworks: + break; + case NetworkStatus::Unreachable: + break; + case NetworkStatus::OfflineDisconnected: + case NetworkStatus::OfflineFailed: + case NetworkStatus::ShuttingDown: + case NetworkStatus::Offline: + case NetworkStatus::Establishing: + if ( d->disconnectPolicy == Managed ) { + emit d->disconnected(); + } else if ( d->disconnectPolicy == OnNextChange ) { + setDisconnectPolicy( Manual ); + emit d->disconnected(); + } + break; + case NetworkStatus::Online: + if ( d->disconnectPolicy == Managed ) { + emit d->connected(); + } else if ( d->disconnectPolicy == OnNextChange ) { + setConnectPolicy( Manual ); + emit d->connected(); + } + break; + default: + kdDebug() << k_funcinfo << "Unrecognised status code!" << endl; + } + emit statusChanged( d->status ); +} + +ConnectionManager::ConnectionPolicy ConnectionManager::connectPolicy() const +{ + return d->connectPolicy; +} + +void ConnectionManager::setConnectPolicy( ConnectionManager::ConnectionPolicy policy ) +{ + d->connectPolicy = policy; +} + +ConnectionManager::ConnectionPolicy ConnectionManager::disconnectPolicy() const +{ + return d->disconnectPolicy; +} + +void ConnectionManager::setDisconnectPolicy( ConnectionManager::ConnectionPolicy policy ) +{ + d->disconnectPolicy = policy; +} + +void ConnectionManager::setManualConnectionPolicies() +{ + d->connectPolicy = ConnectionManager::Manual; + d->disconnectPolicy = ConnectionManager::Manual; +} + +void ConnectionManager::setManagedConnectionPolicies() +{ + d->connectPolicy = ConnectionManager::Managed; + d->disconnectPolicy = ConnectionManager::Managed; +} + +void ConnectionManager::registerConnectSlot( QObject * receiver, const char * member ) +{ + d->connectReceiver = receiver; + d->connectSlot = member; + connect( d, SIGNAL( connected() ), receiver, member ); +} + +void ConnectionManager::forgetConnectSlot() +{ + disconnect( d, SIGNAL( connected() ), d->connectReceiver, d->connectSlot ); + d->connectReceiver = 0; + d->connectSlot = 0; +} + +bool ConnectionManager::isConnectSlotRegistered() const +{ + return ( d->connectSlot != 0 ); +} + +void ConnectionManager::registerDisconnectSlot( QObject * receiver, const char * member ) +{ + d->disconnectReceiver = receiver; + d->disconnectSlot = member; + connect( d, SIGNAL( disconnected() ), receiver, member ); +} + +void ConnectionManager::forgetDisconnectSlot() +{ + disconnect( d, SIGNAL( disconnected() ), d->disconnectReceiver, d->disconnectSlot ); + d->disconnectReceiver = 0; + d->disconnectSlot = 0; +} + +bool ConnectionManager::isDisconnectSlotRegistered() const +{ + return ( d->disconnectSlot != 0 ); +} + +#include "connectionmanager.moc" + Index: networkstatus/connectionmanager.h =================================================================== --- /dev/null +++ networkstatus/connectionmanager.h @@ -0,0 +1,167 @@ +/* This file is part of kdepim. + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef KDE_CONNECTION_MANAGER_H +#define KDE_CONNECTION_MANAGER_H + +#include +#include + +#include + +class ConnectionManagerPrivate; + +class KDE_EXPORT ConnectionManager : public QObject, virtual public DCOPObject +{ +Q_OBJECT +K_DCOP +k_dcop: + void slotStatusChanged( int status ); +public: + /** + * This defines application policy in response to networking connect/disconnect events + * Manual - the app only disconnects when the user does so + * OnNextChange - the app should connect or disconnect the next time the network changes state, thereafter + * Manual + * Managed - the app should disconnect when the ConnectionManager thinks the system is + * offline + */ + enum ConnectionPolicy { Manual, OnNextChange, Managed }; + /** + * Set a policy to manage the application's connect behaviour + */ + void setConnectPolicy( ConnectionPolicy ); + /** + * Retrieve a policy managing the application's connect behaviour + */ + ConnectionPolicy connectPolicy() const; + + /** + * Set a policy to manage the application's disconnect behaviour + */ + void setDisconnectPolicy( ConnectionPolicy ); + + /** + * Retrieve a policy managing the application's disconnect behaviour + */ + ConnectionPolicy disconnectPolicy() const; + + /* + * We'll get logic of the form + * onStatusChange() { + * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange || + * ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::Managed ) + * { + * // do connect + * + * // reset the policy + * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange ) + * ConnectionManager::self()->setPolicy( ConnectionManager::ConnectionManager, + * ConnectionManager::Manual ); + * } + * + * Do we just use the CM for policy storage, or do we try to factor the logic to implement the + * policy into the CM too? + * + * could signal doConnect(), then reset the policy + * or could register a connect slot + * registerConnectMethod( QObject * receiver, const char * member ); + * unregisterConnectMethod(); + * etc. + * + * The problem with automatically controlled behaviour, where policy may change as a result of a + * connect, is that if it is also manually altered, the CM needs to be updated. But the CM needs to + * be updated in any case. + * CM need + */ + /** + * Lazy-method to set Manual on both policies + */ + void setManualConnectionPolicies(); + /** + * Lazy-method to set Managed on both policies + */ + void setManagedConnectionPolicies(); + + /** + * Record a slot to call on a given receiving QObject when + * 1) the network connection is online, + * 2) the policy mandates that the app connect + * + * Only one slot may be registered at any one time. If a second slot is + * registered, the first slot is forgotten + * @param receiver the QObject where the slot is located + * @param member the slot to call. Set up member using the SLOT() macro. + */ + void registerConnectSlot( QObject * receiver, const char * member ); + + /** + * Forget any connect slot previously registered + */ + void forgetConnectSlot(); + + /** + * Has any slot been registered to be called on connect? + */ + bool isConnectSlotRegistered() const; + + /** + * Record a slot to call on a given receiving QObject when + * 1) the network connection goes offline (in any way ), + * 2) the policy mandates that the app disconnect + * + * Only one slot may be registered at any one time. If a second slot is + * registered, the first slot is forgotten + * @param receiver the QObject where the slot is located + * @param member the slot to call. Set up member using the SLOT() macro. + */ + void registerDisconnectSlot( QObject * receiver, const char * member ); + + /** + * Forget any disconnect slot previously registered + */ + void forgetDisconnectSlot(); + + /** + * Has any slot been registered to be called on disconnect? + */ + bool isDisconnectSlotRegistered() const; + + /// existing API + + static ConnectionManager* self(); + virtual ~ConnectionManager(); + NetworkStatus::Status status(); +signals: + // signal that the network for a hostname is up/down + void statusChanged( NetworkStatus::Status status ); +private: + // sets up internal state + void initialise(); + // reread the desktop status from the daemon and update internal state + ConnectionManager( QObject *parent, const char * name ); + ConnectionManagerPrivate * d; + static ConnectionManager * s_self; +}; + +#endif + Index: networkstatus/connectionmanager_p.cpp =================================================================== --- /dev/null +++ networkstatus/connectionmanager_p.cpp @@ -0,0 +1,13 @@ +#include "connectionmanager_p.h" + +ConnectionManagerPrivate::ConnectionManagerPrivate(QObject * parent, const char * name ) : QObject( parent, name ), service( 0 ), connectPolicy( ConnectionManager::Managed ), + disconnectPolicy( ConnectionManager::Managed ), connectReceiver( 0 ), connectSlot( 0 ), + disconnectReceiver( 0 ), disconnectSlot( 0 ) +{ +} + +ConnectionManagerPrivate::~ConnectionManagerPrivate() +{ +} + +#include "connectionmanager_p.moc" Index: networkstatus/connectionmanager_p.h =================================================================== --- /dev/null +++ networkstatus/connectionmanager_p.h @@ -0,0 +1,55 @@ +/* This file is part of the KDE project + Copyright (C) 2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef CONNECTIONMANAGERPRIVATE_H +#define CONNECTIONMANAGERPRIVATE_H + +#include + +#include "connectionmanager.h" +#include "networkstatuscommon.h" +#include "networkstatusiface_stub.h" + + +// ConnectionManager's private parts +class ConnectionManagerPrivate : public QObject +{ +Q_OBJECT + friend class ConnectionManager; +public: + ConnectionManagerPrivate( QObject * parent = 0, const char * name = 0); + ~ConnectionManagerPrivate(); + // this holds the currently active state + NetworkStatus::Status status; + NetworkStatusIface_stub * service; + ConnectionManager::ConnectionPolicy connectPolicy; + ConnectionManager::ConnectionPolicy disconnectPolicy; + QObject * connectReceiver; + const char * connectSlot; + QObject * disconnectReceiver; + const char * disconnectSlot; +signals: + void connected(); + void disconnected(); +}; + +#endif Index: networkstatus/Makefile.am =================================================================== --- /dev/null +++ networkstatus/Makefile.am @@ -0,0 +1,45 @@ +#SUBDIRS = networkstatustray + +METASOURCES = AUTO + +INCLUDES = -I$(top_srcdir)/kded -I$(top_srcdir) $(all_includes) + +kde_module_LTLIBRARIES = kded_networkstatus.la + +kded_networkstatus_la_SOURCES = networkstatus.cpp networkstatus.skel \ + network.cpp +kded_networkstatus_la_LIBADD = $(LIB_KDECORE) $(LIB_KIO) ./libnetworkstatus.la +kded_networkstatus_la_LDFLAGS = $(all_libraries) -module -avoid-version + +servicesdir = $(kde_servicesdir)/kded + +services_DATA = networkstatus.desktop + +lib_LTLIBRARIES = libnetworkstatus.la libconnectionmanager.la + +libnetworkstatus_la_LIBADD = $(LIB_KDECORE) +libnetworkstatus_la_LDFLAGS = $(all_libraries) +libnetworkstatus_la_SOURCES = networkstatuscommon.cpp + +libconnectionmanager_la_LIBADD = $(LIB_KDECORE) libnetworkstatus.la +libconnectionmanager_la_LDFLAGS = $(all_libraries) +libconnectionmanager_la_SOURCES = connectionmanager.cpp connectionmanager_p.cpp networkstatusindicator.cpp connectionmanager.skel networkstatusiface.stub + +noinst_PROGRAMS = networkstatustestservice networkstatustestclient managedconnectiontestclient + +networkstatustestservice_LDFLAGS = $(all_libraries) +networkstatustestservice_LDADD = $(LIB_KFILE) libnetworkstatus.la +networkstatustestservice_SOURCES = testservice.cpp testserviceview.ui networkstatusiface.stub + +networkstatustestclient_LDFLAGS = $(all_libraries) +networkstatustestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la +networkstatustestclient_SOURCES = testclient.cpp testclientview.ui + +managedconnectiontestclient_LDFLAGS = $(all_libraries) +managedconnectiontestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la +managedconnectiontestclient_SOURCES = testclient2.cpp testclientview.ui + +noinst_HEADERS = network.h testservice.h testclient.h + +include_HEADERS = networkstatuscommon.h connectionmanager.h networkstatusindicator.h \ + networkstatusiface.h Index: networkstatus/network.cpp =================================================================== --- /dev/null +++ networkstatus/network.cpp @@ -0,0 +1,62 @@ +/* This file is part of kdepim. + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include + +#include "network.h" + +Network::Network( NetworkStatus::Properties properties ) + : m_name( properties.name ), m_status( properties.status ), m_service( properties.service ) +{ +} + +void Network::setStatus( NetworkStatus::Status status ) +{ + m_status = status; +} + +NetworkStatus::Status Network::status() +{ + return m_status; +} + +void Network::setName( const QString& name ) +{ + m_name = name; +} + +QString Network::name() +{ + return m_name; +} + +QString Network::service() +{ + return m_service; +} + +void Network::setService( const QString& service ) +{ + m_service = service; +} + +// vim: sw=4 ts=4 Index: networkstatus/network.h =================================================================== --- /dev/null +++ networkstatus/network.h @@ -0,0 +1,60 @@ +/* This file is part of kdepim. + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef NETWORKSTATUS_NETWORK_H +#define NETWORKSTATUS_NETWORK_H + +#include "networkstatuscommon.h" + +class Network +{ +public: + Network( const QString name ); + Network( NetworkStatus::Properties properties ); + /** + * Update the status of this network + */ + void setStatus( NetworkStatus::Status status ); + /** + * The connection status of this network + */ + NetworkStatus::Status status(); + /** + * The name of this network + */ + QString name(); + void setName( const QString& name ); + /** + * Returns the service owning this network + */ + QString service(); + void setService( const QString& service ); + +private: + Network( const Network & ); + QString m_name; + NetworkStatus::Status m_status; + QString m_service; +}; + +#endif +// vim: sw=4 ts=4 Index: networkstatus/networkstatuscommon.cpp =================================================================== --- /dev/null +++ networkstatus/networkstatuscommon.cpp @@ -0,0 +1,76 @@ +/* This file is part of kdepim. + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include "networkstatuscommon.h" + +QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p ) +{ + s << p.name; + s << (int)p.status; + s << p.service; + return s; +} + +QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p ) +{ + int status; + s >> p.name; + s >> status; + p.status = (NetworkStatus::Status)status; + s >> p.service; + return s; +} + +namespace NetworkStatus +{ + QString toString( NetworkStatus::Status st ) + { + QString str; + switch ( st ) { + case NetworkStatus::NoNetworks: + str = "NoNetworks"; + break; + case NetworkStatus::Unreachable: + str = "Unreachable"; + break; + case NetworkStatus::OfflineDisconnected: + str = "OfflineDisconnected"; + break; + case NetworkStatus::OfflineFailed: + str = "OfflineFailed"; + break; + case NetworkStatus::ShuttingDown: + str = "ShuttingDown"; + break; + case NetworkStatus::Offline: + str = "Offline"; + break; + case NetworkStatus::Establishing: + str = "Establishing"; + break; + case NetworkStatus::Online: + str = "Online"; + break; + } + return str; + } +} // namespace NetworkStatus Index: networkstatus/networkstatuscommon.h =================================================================== --- /dev/null +++ networkstatus/networkstatuscommon.h @@ -0,0 +1,52 @@ +/* This file is part of kdepim + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef NETWORKSTATUS_COMMON_H +#define NETWORKSTATUS_COMMON_H + +#include + +namespace NetworkStatus +{ + enum Status { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown, Offline, Establishing, Online }; + enum RequestResult { RequestAccepted = 1, Connected, UserRefused, Unavailable }; + enum UnusedDemandPolicy { All, User, None, Permanent }; + + // BINARY COMPATIBILITY ALERT BEGIN !!!! + struct Properties + { + QString name; + Status status; + UnusedDemandPolicy unused1; + QCString service; + bool unused3; + QStringList unused4; + }; + // BINARY COMPATIBILITY ALERT END !!!! + + QString toString( Status st ); +} + +QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p ); +QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p ); + +#endif Index: networkstatus/networkstatus.cpp =================================================================== --- /dev/null +++ networkstatus/networkstatus.cpp @@ -0,0 +1,163 @@ +/* This file is part of kdepim + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include "networkstatus.h" + +#include + +#include +#include +#include + +#include "network.h" +#include + +extern "C" { + KDE_EXPORT KDEDModule* create_networkstatus( const QCString& obj ) + { + return new NetworkStatusModule( obj ); + } +} + +// INTERNALLY USED STRUCTS AND TYPEDEFS + +typedef QMap< QString, Network * > NetworkMap; + +class NetworkStatusModule::Private +{ +public: + NetworkMap networks; + NetworkStatus::Status status; +}; + +// CTORS/DTORS + +NetworkStatusModule::NetworkStatusModule( const QCString & obj ) : KDEDModule( obj ), d( new Private ) +{ + d->status = NetworkStatus::NoNetworks; + connect( kapp->dcopClient(), SIGNAL( applicationRemoved( const QCString& ) ) , this, SLOT( unregisteredFromDCOP( const QCString& ) ) ); + // connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ) , this, SLOT( registeredToDCOP( const QCString& ) ) ); +} + +NetworkStatusModule::~NetworkStatusModule() +{ + NetworkMap::ConstIterator it; + const NetworkMap::ConstIterator end = d->networks.end(); + + for ( it = d->networks.begin(); it != end; ++it ) { + delete ( *it ); + } + + delete d; +} + +// CLIENT INTERFACE + +QStringList NetworkStatusModule::networks() +{ + kdDebug() << k_funcinfo << " contains " << d->networks.count() << " networks" << endl; + return d->networks.keys(); +} + +int NetworkStatusModule::status() +{ + kdDebug() << k_funcinfo << " status: " << (int)d->status << endl; + return (int)d->status; +} + +//protected: + +void NetworkStatusModule::updateStatus() +{ + NetworkStatus::Status bestStatus = NetworkStatus::NoNetworks; + const NetworkStatus::Status oldStatus = d->status; + + NetworkMap::ConstIterator it; + const NetworkMap::ConstIterator end = d->networks.end(); + for ( it = d->networks.begin(); it != end; ++it ) { + if ( ( *it )->status() > bestStatus ) + bestStatus = ( *it )->status(); + } + d->status = bestStatus; + + if ( oldStatus != d->status ) { + statusChange( (int)d->status ); + } +} + +void NetworkStatusModule::unregisteredFromDCOP( const QCString & appId ) +{ + // unregister and delete any networks owned by a service that has just unregistered + NetworkMap::Iterator it = d->networks.begin(); + const NetworkMap::Iterator end = d->networks.end(); + while (it != d->networks.end()) + { + if ( ( *it )->service() == QString( appId ) ) + { + NetworkMap::Iterator toRemove = it++; + delete *toRemove; + d->networks.remove( toRemove ); + updateStatus(); + continue; + } + ++it; + } +} + +// SERVICE INTERFACE // +void NetworkStatusModule::setNetworkStatus( const QString & networkName, int st ) +{ + kdDebug() << k_funcinfo << networkName << ", " << st << endl; + NetworkStatus::Status changedStatus = (NetworkStatus::Status)st; + Network * net = 0; + NetworkMap::Iterator it = d->networks.find( networkName ); + if ( it != d->networks.end() ) { + net = (*it); + net->setStatus( changedStatus ); + updateStatus(); + } + else + kdDebug() << " No network named '" << networkName << "' found." << endl; +} + +void NetworkStatusModule::registerNetwork( const NetworkStatus::Properties properties ) +{ + kdDebug() << k_funcinfo << properties.name << ", with status " << properties.status << endl; + + d->networks.insert( properties.name, new Network( properties ) ); + updateStatus(); +} + +void NetworkStatusModule::unregisterNetwork( const QString & networkName ) +{ + kdDebug() << k_funcinfo << networkName << endl; + + NetworkMap::Iterator it = d->networks.find( networkName ); + if ( it != d->networks.end() ) { + delete *it; + d->networks.remove( it ); + } + updateStatus(); +} + +#include "networkstatus.moc" +// vim: set noet sw=4 ts=4: Index: networkstatus/networkstatus.desktop =================================================================== --- /dev/null +++ networkstatus/networkstatus.desktop @@ -0,0 +1,98 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Network Status Daemon +Name[af]=Netwerk status bediener +Name[ar]=مراقب القرص و التنفيذ لحالة الشبكة +Name[bg]=Демон за състояние на мрежата +Name[ca]=Dimoni de l'estat de la xarxa +Name[cs]=Démon stavu sítě +Name[da]=Netværkstatusdæmon +Name[de]=Überwachung des Netzwerkstatus +Name[el]=Δαίμονας κατάστασης δικτύου +Name[es]=Daemon de estado de la red +Name[et]=Võrguoleku deemon +Name[eu]=Sarearen egoera deabrua +Name[fa]=شبح وضعیت شبکه +Name[fi]=Verkkotilan tarkkailija +Name[fr]=Suivi de l'état du réseau +Name[fy]=Netwurktastândaemon +Name[gl]=Daemon do Estado da Rede +Name[hu]=Hálózati állapotjelző szolgáltatás +Name[is]=Netstöðupúki +Name[it]=Demone dello stato della rete +Name[ja]=ネットワークステータスデーモン +Name[kk]=Желі күйінің қызметі +Name[km]=ដេមិន​ស្ថានភាព​បណ្ដាញ +Name[lt]=Tinklo statuso tarnyba +Name[mk]=Даемон за мрежен статус +Name[ms]=Daemon Berstatus Rangkaian +Name[nb]=Statusnisse for nettverket +Name[nds]=Nettwarkstatus-Dämoon +Name[ne]=सञ्जाल स्थिति डेइमन +Name[nl]=Netwerkstatusdaemon +Name[nn]=Statusnisse for nettverket +Name[pl]=Usługa stanu sieci +Name[pt]=Servidor de Estado de Rede +Name[pt_BR]=Daemon de Status da Rede +Name[ru]=Служба состояния сети +Name[sk]=Daemon stavu siete +Name[sl]=Demon za omrežno stanje +Name[sr]=Демон за статус мреже +Name[sr@Latn]=Demon za status mreže +Name[sv]=Nätverksstatusdemon +Name[ta]=வலைப்பின்னல் நிலை டெமான் +Name[tr]=Ağ Durum İzleyici +Name[uk]=Демон стану мережі +Name[zh_CN]=网络状态守护程序 +Name[zh_TW]=網路狀態守護程式 +Comment=Tracks status of network interfaces and provides notification to applications using the network. +Comment[af]=Hou tred van die status van netwerk intervlakke en verskaf kennisgewings na programme wat die netwerk gebruik. +Comment[bg]=Следене на състоянието на мрежата и предаване на информацията на програмите, които имат нужда +Comment[ca]=Controla l'estat de les interfícies de xarxa i proporciona notificacions a les aplicacions que usen la xarxa. +Comment[cs]=Zjiš'tuje stav síťových rozhraní a upozorňuje v případě přístupu aplikací k síti. +Comment[da]=Sporer status af netværksgrænseflade og sørger for meddelelser til programmer der bruger netværket. +Comment[de]=Überprüft den Netzwerk-Status und benachrichtigt anfragende Anwendungen +Comment[el]=Παρακολουθεί την κατάσταση του δικτύου και παρέχει ειδοποιήσεις σε εφαρμογές που χρησιμοποιούν το δίκτυο. +Comment[es]=Sigue la pista de las interfaces de red y proporciona notificaciones a las aplicaciones que están usando la red. +Comment[et]=Jälgib võrguliideste olekut ja annab sellest võrgu vahendusel rakendustele teada. +Comment[eu]=Sare interfazeen egoera jarraitzen du eta sarea darabilten aplikazioei jakinarazten die. +Comment[fa]=وضعیت واسطهای شبکه را شیار داده و با استفاده از شبکه، برای کاربردها اخطار فراهم می‌کند. +Comment[fi]=Tarkkailee verkkoliitäntöjen tilaa ja varoittaa verkkoa käyttäviä sovelluksia. +Comment[fr]=Surveille l'état des interfaces réseaux et fournit des notifications aux applications qui utilisent le réseau +Comment[fy]=Hâldt de tastân by fan de Netwurkynterfaces en hâldt dêr de tapassings fan op de hichte. +Comment[gl]=Monitoriza o estado das interfaces de rede e fornece notificacións ás aplicacións que usen a rede. +Comment[hu]=Figyeli a hálózati csatolók állapotát és értesítési lehetőséget biztosít hálózati alkalmazások számára. +Comment[is]=Fylgist með stöðu netkorta og sendir tilkynningar til forrita sem nota netið. +Comment[it]=Controlla lo stato delle interfacce di rete e fornisce notifiche alle applicazioni che usano al rete. +Comment[ja]=ネットワークインターフェースの状態を追跡し、ネットワークを用いるアプリケーションに通知します +Comment[kk]=Желі интерфейстерінің күйін бақылап, желіні қолданатын бағдарламаларын құлақтандыру қызметі. +Comment[km]=តាមដាន​ស្ថានភាព​របស់​ចំណុច​ប្រទាក់​បណ្ដាញ ព្រម​ទាំង​ផ្ដល់​នូវ​ការ​ជូនដំណឹង​ទៅ​កម្មវិធី ដែល​ប្រើ​បណ្ដាញ ។ +Comment[lt]=Seka tinklo sąsajų būseną ir informuoja apie jas programas, naudojančias tinklą +Comment[mk]=Го следи статусот на мрежните интерфејси и дава известувања на апликациите што ја користат мрежата. +Comment[ms]=Menjejak status antara muka rangkaian dan memberitahu aplikasi yang menggunakan rangkaian tersebut. +Comment[nb]=Overvåker status for nettverksgrensesnitt og varsler programmer som bruker nettverket. +Comment[nds]=Överwacht den Tostand vun Nettwark-Koppelsteden un sendt Narichten na Programmen, de dat Nettwark bruukt. +Comment[ne]=सञ्जाल इन्टरफेसको स्थिति ट्र्याक गर्दछ र सञ्जाल प्रयोग गरेर अनुप्रयोगमा जानकारी उपलब्ध गराउछ । +Comment[nl]=Houdt de status bij van de netwerkinterfaces en houdt daar de toepassingen van op de hoogte. +Comment[nn]=Overvakar status for nettverksgrensesnitt og varslar program som brukar nettverket. +Comment[pl]=Śledzi stan interfejsów sieciowych i powiadamia programy używające sieci. +Comment[pt]=Vigia o estado das interfaces de rede e avisa as aplicações que utilizam a rede. +Comment[pt_BR]=Controla o status das interfaces de rede e fornece notificações para aplicativos utilizando a rede. +Comment[ru]=Служба отслеживания состояния сетевых интерфейсов и обращения приложений к сети. +Comment[sk]=Sleduje stav sieťových rozhraní a poskytuje upozornenia aplikáciám používajúcim sieť. +Comment[sl]=Sledi stanju omrežnim vmesnikom in omogoča obvestila programom, ki uporabljajo omrežje +Comment[sr]=Прати статус мрежних интерфејса и пружа обавештења програмима који користе мрежу. +Comment[sr@Latn]=Prati status mrežnih interfejsa i pruža obaveštenja programima koji koriste mrežu. +Comment[sv]=Bevakar status för nätverksgränssnitt och tillhandahåller underrättelser till program som använder nätverket. +Comment[ta]=வலைப்பின்னலைப் பயன்படுத்தி வலைப்பின்னல் இடைமுகங்களின் நிலையை கண்காணிக்கிறது மற்றும் பயன்பாடுகளுக்கு அறிவிப்பை வழங்குகிறது. +Comment[uk]=Слідкує за станом інтерфейсів мережі і сповіщає програми, які користуються мережею. +Comment[zh_CN]=跟踪网卡的状态并为应用程序提供使用网络的通知。 +Comment[zh_TW]=追蹤網路介面的狀態,並提供使用網路的應用程式的通知。 +Type=Service +ServiceTypes=KDEDModule +X-KDE-ModuleType=Library +X-KDE-Library=networkstatus +X-KDE-FactoryName=networkstatus +X-KDE-Kded-autoload=true +X-KDE-Kded-load-on-demand=true + Index: networkstatus/networkstatus.h =================================================================== --- /dev/null +++ networkstatus/networkstatus.h @@ -0,0 +1,66 @@ +/* This file is part of kdepim + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef KDED_NETWORKSTATUS_H +#define KDED_NETWORKSTATUS_H + +#include + +#include "networkstatuscommon.h" +#include "network.h" + +class NetworkStatusModule : virtual public KDEDModule +{ +Q_OBJECT +K_DCOP +public: + NetworkStatusModule( const QCString& obj ); + ~NetworkStatusModule(); +k_dcop: + // Client interface + QStringList networks(); + int status(); + // Service interface + void setNetworkStatus( const QString & networkName, int status ); + void registerNetwork( NetworkStatus::Properties properties ); + void unregisterNetwork( const QString & networkName ); +k_dcop_signals: + /** + * A status change occurred affecting the overall connectivity + * @param status The new status + */ + void statusChange( int status ); +protected slots: + //void registeredToDCOP( const QCString& appId ); + void unregisteredFromDCOP( const QCString& appId ); + +protected: + // recalculate cached status + void updateStatus(); + +private: + class Private; + Private *d; +}; + +#endif +// vim: sw=4 ts=4 Index: networkstatus/networkstatusiface.h =================================================================== --- /dev/null +++ networkstatus/networkstatusiface.h @@ -0,0 +1,50 @@ +/* This file is part of kdepim. + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef KDED_NETWORKSTATUSIFACE_H +#define KDED_NETWORKSTATUSIFACE_H + +#include +#include + +#include "networkstatuscommon.h" + +class NetworkStatusIface : virtual public DCOPObject +{ +K_DCOP +k_dcop: + // Client interface + virtual QStringList networks() = 0; + virtual int status() = 0; + // Service interface + virtual void setNetworkStatus( const QString & networkName, int status ) = 0; + virtual void registerNetwork( NetworkStatus::Properties properties ) = 0; + virtual void unregisterNetwork( const QString & networkName ) = 0 ; +k_dcop_signals: + /** + * A status change occurred affecting the overall connectivity + * @param status The new status + */ + virtual void statusChange( int status ) = 0; +}; +#endif +// vim: sw=4 ts=4 Index: networkstatus/networkstatusindicator.cpp =================================================================== --- /dev/null +++ networkstatus/networkstatusindicator.cpp @@ -0,0 +1,64 @@ +/* This file is part of the KDE project + Copyright (C) 2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include +#include +#include +#include + +#include "connectionmanager.h" + +#include "networkstatusindicator.h" + +StatusBarNetworkStatusIndicator::StatusBarNetworkStatusIndicator( + QWidget * parent, const char * name ) : QHBox( parent, name )/*, d( new StatusBarNetworkStatusIndicatorPrivate )*/ +{ + setMargin( 2 ); + setSpacing( 1 ); + QLabel * label = new QLabel( this, "offlinemodelabel" ); + label->setPixmap( SmallIcon("connect_no") ); + QToolTip::add( label, i18n( "The desktop is offline" ) ); + + connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), + SLOT( networkStatusChanged( NetworkStatus::Status) ) ); + +} + +void StatusBarNetworkStatusIndicator::init() +{ + networkStatusChanged( ConnectionManager::self()->status()); +} + +StatusBarNetworkStatusIndicator::~StatusBarNetworkStatusIndicator() +{ +} + +void StatusBarNetworkStatusIndicator::networkStatusChanged( NetworkStatus::Status status ) +{ + if ( status == NetworkStatus::Online || status == NetworkStatus::NoNetworks ) { + hide(); + } else { + show(); + } +} + +#include "networkstatusindicator.moc" Index: networkstatus/networkstatusindicator.h =================================================================== --- /dev/null +++ networkstatus/networkstatusindicator.h @@ -0,0 +1,42 @@ +/* This file is part of the KDE project + Copyright (C) 2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef KDE_NETWORKSTATUS_INDICATOR_H +#define KDE_NETWORKSTATUS_INDICATOR_H + +#include +#include +#include + +class StatusBarNetworkStatusIndicator : public QHBox +{ +Q_OBJECT +public: + StatusBarNetworkStatusIndicator( QWidget * parent, const char * name ); + virtual ~StatusBarNetworkStatusIndicator(); + void init(); +protected slots: + void networkStatusChanged( NetworkStatus::Status status ); +}; + +#endif + Index: networkstatus/networkstatus.kdevelop =================================================================== --- /dev/null +++ networkstatus/networkstatus.kdevelop @@ -0,0 +1,108 @@ + + + + Will Stephenson + wstephenson@suse.de + $VERSION$ + KDevKDEAutoProject + C++ + + Qt + KDE + + + + + + + + + + false + false + + + *.o,*.lo,CVS + false + + + + + ada + ada_bugs_gcc + bash + bash_bugs + clanlib + fortran_bugs_gcc + gnome1 + gnustep + gtk + gtk_bugs + haskell + haskell_bugs_ghc + java_bugs_gcc + java_bugs_sun + opengl + pascal_bugs_fp + php + php_bugs + perl + perl_bugs + python + python_bugs + ruby + ruby_bugs + sdl + stl + sw + w3c-dom-level2-html + w3c-svg + w3c-uaag10 + wxwidgets_bugs + + + qmake User Guide + + + + + libtool + + + + + + + + + + + + + + + + + + executable + + + kded_networkstatus.la + + + + + + true + true + true + false + true + true + true + 250 + 400 + 250 + + + Index: networkstatus/README.statetransition =================================================================== --- /dev/null +++ networkstatus/README.statetransition @@ -0,0 +1,29 @@ +This table defines the actions to be taken on state transition. + +TODO: potentially add extra states OnlineReading and OnlineWriting + + NEW + |Offline | Online | +---+---+----------------+---------------+ + | | |N|set online | + | | |L|reload | + | O | |C|resources | + | F | +---------------+ + | F | |L|set online | +O | | |C|reload res. | +L | | | |write res. | +D +---+----------------+---------------+ + | |N|set offline | | + | |C| | | + | | | | | + | O +---------------+| | + | N |U|set offline | | + | |W|write locally | | + | |C|(subject to | | + | | | save policy)| | +---+---+----------------+---------------+ +LC = Local changes exist +NLC = No local changes exist +UWC = Unsaved changes exist +NC = no changes exist + Index: networkstatus/.svn/dir-prop-base =================================================================== --- /dev/null +++ networkstatus/.svn/dir-prop-base @@ -0,0 +1,11 @@ +K 10 +svn:ignore +V 83 +Makefile +Makefile.in +Makefile.calls.in +Makefile.rules.in +*_skel.cpp +*.kidl +Doxyfile +END Index: networkstatus/.svn/entries =================================================================== --- /dev/null +++ networkstatus/.svn/entries @@ -0,0 +1,342 @@ +8 + +dir +712059 +svn+ssh://mueller@svn.kde.org/home/kde/branches/work/~wstephens/kdelibs/networkstatus +svn+ssh://mueller@svn.kde.org/home/kde + + + +2007-08-06T09:06:39.201606Z +696919 +wstephens +has-props + +svn:special svn:externals svn:needs-lock + + + + + + + + + + + +283d02a7-25f6-0310-bc7c-ecb5cbfe19da + +network.h +file + + + + +2007-09-13T13:09:10.000000Z +034300313451d5b6a95bff1022861227 +2007-08-06T09:06:39.201606Z +696919 +wstephens +has-props + +networkstatusindicator.h +file + + + + +2007-09-13T13:09:10.000000Z +bbc7c6ea3b8da983d477d53556e39dd0 +2007-08-06T09:06:39.201606Z +696919 +wstephens + +connectionmanager.h +file + + + + +2007-09-13T13:09:10.000000Z +7992e623b84fd99f9ff17c613a7269a3 +2007-08-06T09:06:39.201606Z +696919 +wstephens +has-props + +testservice.cpp +file + + + + +2007-09-13T13:09:10.000000Z +527dc95a7ae39d565bd29d5fe59de31a +2007-08-06T09:06:39.201606Z +696919 +wstephens +has-props + +testclient2.cpp +file + + + + +2007-09-13T13:09:10.000000Z +c426585cf5d9e3f4b06adcaff0a3ef32 +2007-08-06T09:06:39.201606Z +696919 +wstephens + +networkstatus.h +file + + + + +2007-09-13T13:09:10.000000Z +8ca1d871b31d5840e2e3d24da4693f1d +2007-08-06T09:06:39.201606Z +696919 +wstephens +has-props + +testclientview.ui +file + + + + +2007-09-13T13:09:10.000000Z +8f63eb3db978c53143417ad33d45076b +2007-08-06T09:06:39.201606Z +696919 +wstephens + +testservice.h +file + + + + +2007-09-13T13:09:10.000000Z +2b5693b2e174ebf96e460a52cfcf9739 +2007-08-06T09:06:39.201606Z +696919 +wstephens +has-props + +testclient2.h +file + + + + +2007-09-13T13:09:10.000000Z +3b9f645e56a92014b7a6547c5bc88527 +2007-08-06T09:06:39.201606Z +696919 +wstephens + +README.statetransition +file + + + + +2007-09-13T13:09:10.000000Z +0091b6bdce4abe1e1260bf2a4cce984f +2005-02-11T15:15:30.000000Z +388364 +wstephens +has-props + +networkstatuscommon.cpp +file + + + + +2007-09-13T13:09:10.000000Z +1516e99224ce850fb6d134346fd9d074 +2007-08-06T09:06:39.201606Z +696919 +wstephens +has-props + +connectionmanager_p.cpp +file + + + + +2007-09-13T13:09:10.000000Z +07e9643c6cdb39d28abc9c8992bcab23 +2007-08-06T09:06:39.201606Z +696919 +wstephens + +networkstatuscommon.h +file +712062 + + + +2007-09-13T13:10:21.000000Z +a4f22eecd7d0a0fdcc78c9c31d5f14fd +2007-09-13T13:12:05.866586Z +712062 +mueller +has-props + +testclient.cpp +file + + + + +2007-09-13T13:09:10.000000Z +d932143bab5c7985bc48e64e2bf0c227 +2007-08-06T09:06:39.201606Z +696919 +wstephens + +connectionmanager_p.h +file + + + + +2007-09-13T13:09:10.000000Z +34ed7e34d50ae4b36342a6cc250ad386 +2007-08-06T09:06:39.201606Z +696919 +wstephens + +testclient.h +file + + + + +2007-09-13T13:09:10.000000Z +67d3671e5fbeb51a333550f52ec34294 +2007-08-06T09:06:39.201606Z +696919 +wstephens + +networkstatus.kdevelop +file + + + + +2007-09-13T13:09:10.000000Z +64e6cd906f82dad6a3c70a8dd7e69c3c +2005-01-24T08:48:57.000000Z +381869 +wstephens +has-props + +networkstatus.desktop +file + + + + +2007-09-13T13:09:10.000000Z +1bc32c39d8c6ed9c63e6fdc1b3d34aba +2007-08-06T09:06:39.201606Z +696919 +wstephens +has-props + +testserviceview.ui +file + + + + +2007-09-13T13:09:10.000000Z +f8883c2425f16054c8cfd99a6c288000 +2007-08-06T09:06:39.201606Z +696919 +wstephens + +Makefile.am +file +712061 + + + +2007-09-13T13:10:11.000000Z +70d1b224f8edc970fbdf2f4af63282f0 +2007-09-13T13:11:26.289844Z +712061 +mueller +has-props + +network.cpp +file + + + + +2007-09-13T13:09:10.000000Z +1f481f54f0161b8a65d00753d6397904 +2007-08-06T09:06:39.201606Z +696919 +wstephens +has-props + +networkstatusindicator.cpp +file + + + + +2007-09-13T13:09:10.000000Z +243176eca79394c0e2a763b1e56a0690 +2007-08-06T09:06:39.201606Z +696919 +wstephens + +networkstatusiface.h +file + + + + +2007-09-13T13:09:10.000000Z +285a14008068eb0cd26e3af2bb8fbb92 +2007-08-06T09:06:39.201606Z +696919 +wstephens + +connectionmanager.cpp +file + + + + +2007-09-13T13:09:10.000000Z +922d360b2e43b6b35f56c0d97ab1afa9 +2007-08-06T09:06:39.201606Z +696919 +wstephens +has-props + +networkstatus.cpp +file + + + + +2007-09-13T13:09:10.000000Z +433313b5f03259de305b6d722c0251e5 +2007-08-06T09:06:39.201606Z +696919 +wstephens +has-props + Index: networkstatus/.svn/format =================================================================== --- /dev/null +++ networkstatus/.svn/format @@ -0,0 +1 @@ +8 Index: networkstatus/.svn/prop-base/connectionmanager.cpp.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/prop-base/connectionmanager.cpp.svn-base @@ -0,0 +1,13 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +K 13 +svn:mime-type +V 13 +text/x-c++src +END Index: networkstatus/.svn/prop-base/connectionmanager.h.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/prop-base/connectionmanager.h.svn-base @@ -0,0 +1,13 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +K 13 +svn:mime-type +V 11 +text/x-chdr +END Index: networkstatus/.svn/prop-base/Makefile.am.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/prop-base/Makefile.am.svn-base @@ -0,0 +1,13 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +K 13 +svn:mime-type +V 9 +text/x-am +END Index: networkstatus/.svn/prop-base/network.cpp.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/prop-base/network.cpp.svn-base @@ -0,0 +1,13 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +K 13 +svn:mime-type +V 13 +text/x-c++src +END Index: networkstatus/.svn/prop-base/network.h.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/prop-base/network.h.svn-base @@ -0,0 +1,13 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +K 13 +svn:mime-type +V 11 +text/x-chdr +END Index: networkstatus/.svn/prop-base/networkstatuscommon.cpp.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/prop-base/networkstatuscommon.cpp.svn-base @@ -0,0 +1,13 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +K 13 +svn:mime-type +V 13 +text/x-c++src +END Index: networkstatus/.svn/prop-base/networkstatuscommon.h.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/prop-base/networkstatuscommon.h.svn-base @@ -0,0 +1,13 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +K 13 +svn:mime-type +V 11 +text/x-chdr +END Index: networkstatus/.svn/prop-base/networkstatus.cpp.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/prop-base/networkstatus.cpp.svn-base @@ -0,0 +1,13 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +K 13 +svn:mime-type +V 13 +text/x-c++src +END Index: networkstatus/.svn/prop-base/networkstatus.desktop.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/prop-base/networkstatus.desktop.svn-base @@ -0,0 +1,13 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +K 13 +svn:mime-type +V 14 +text/x-desktop +END Index: networkstatus/.svn/prop-base/networkstatus.h.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/prop-base/networkstatus.h.svn-base @@ -0,0 +1,13 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +K 13 +svn:mime-type +V 11 +text/x-chdr +END Index: networkstatus/.svn/prop-base/networkstatus.kdevelop.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/prop-base/networkstatus.kdevelop.svn-base @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 23 +Author Date Id Revision +END Index: networkstatus/.svn/prop-base/README.statetransition.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/prop-base/README.statetransition.svn-base @@ -0,0 +1,5 @@ +K 12 +svn:keywords +V 23 +Author Date Id Revision +END Index: networkstatus/.svn/prop-base/testservice.cpp.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/prop-base/testservice.cpp.svn-base @@ -0,0 +1,13 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +K 13 +svn:mime-type +V 13 +text/x-c++src +END Index: networkstatus/.svn/prop-base/testservice.h.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/prop-base/testservice.h.svn-base @@ -0,0 +1,13 @@ +K 13 +svn:eol-style +V 6 +native +K 12 +svn:keywords +V 23 +Author Date Id Revision +K 13 +svn:mime-type +V 11 +text/x-chdr +END Index: networkstatus/.svn/text-base/connectionmanager.cpp.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/connectionmanager.cpp.svn-base @@ -0,0 +1,171 @@ +/* This file is part of kdepim. + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include +#include +#include + +#include "connectionmanager.h" +#include "connectionmanager_p.h" + +// Connection manager itself +ConnectionManager::ConnectionManager( QObject * parent, const char * name ) : DCOPObject( "ConnectionManager" ), QObject( parent, name ), d( new ConnectionManagerPrivate( this ) ) +{ + d->service = new NetworkStatusIface_stub( kapp->dcopClient(), "kded", "networkstatus" ); + + connectDCOPSignal( "kded", "networkstatus", "statusChange(int)", "slotStatusChanged(int)", false ); + + initialise(); +} + +ConnectionManager::~ConnectionManager() +{ + delete d; +} + +ConnectionManager *ConnectionManager::s_self = 0L; + +ConnectionManager *ConnectionManager::self() +{ + static KStaticDeleter deleter; + if(!s_self) + deleter.setObject( s_self, new ConnectionManager( 0, "connection_manager" ) ); + return s_self; +} + +void ConnectionManager::initialise() +{ + // determine initial state and set the state object accordingly. + d->status = ( NetworkStatus::Status )d->service->status(); +} + +NetworkStatus::Status ConnectionManager::status() +{ + return d->status; +} + +void ConnectionManager::slotStatusChanged( int status ) +{ + d->status = ( NetworkStatus::Status )status; + switch ( status ) { + case NetworkStatus::NoNetworks: + break; + case NetworkStatus::Unreachable: + break; + case NetworkStatus::OfflineDisconnected: + case NetworkStatus::OfflineFailed: + case NetworkStatus::ShuttingDown: + case NetworkStatus::Offline: + case NetworkStatus::Establishing: + if ( d->disconnectPolicy == Managed ) { + emit d->disconnected(); + } else if ( d->disconnectPolicy == OnNextChange ) { + setDisconnectPolicy( Manual ); + emit d->disconnected(); + } + break; + case NetworkStatus::Online: + if ( d->disconnectPolicy == Managed ) { + emit d->connected(); + } else if ( d->disconnectPolicy == OnNextChange ) { + setConnectPolicy( Manual ); + emit d->connected(); + } + break; + default: + kdDebug() << k_funcinfo << "Unrecognised status code!" << endl; + } + emit statusChanged( d->status ); +} + +ConnectionManager::ConnectionPolicy ConnectionManager::connectPolicy() const +{ + return d->connectPolicy; +} + +void ConnectionManager::setConnectPolicy( ConnectionManager::ConnectionPolicy policy ) +{ + d->connectPolicy = policy; +} + +ConnectionManager::ConnectionPolicy ConnectionManager::disconnectPolicy() const +{ + return d->disconnectPolicy; +} + +void ConnectionManager::setDisconnectPolicy( ConnectionManager::ConnectionPolicy policy ) +{ + d->disconnectPolicy = policy; +} + +void ConnectionManager::setManualConnectionPolicies() +{ + d->connectPolicy = ConnectionManager::Manual; + d->disconnectPolicy = ConnectionManager::Manual; +} + +void ConnectionManager::setManagedConnectionPolicies() +{ + d->connectPolicy = ConnectionManager::Managed; + d->disconnectPolicy = ConnectionManager::Managed; +} + +void ConnectionManager::registerConnectSlot( QObject * receiver, const char * member ) +{ + d->connectReceiver = receiver; + d->connectSlot = member; + connect( d, SIGNAL( connected() ), receiver, member ); +} + +void ConnectionManager::forgetConnectSlot() +{ + disconnect( d, SIGNAL( connected() ), d->connectReceiver, d->connectSlot ); + d->connectReceiver = 0; + d->connectSlot = 0; +} + +bool ConnectionManager::isConnectSlotRegistered() const +{ + return ( d->connectSlot != 0 ); +} + +void ConnectionManager::registerDisconnectSlot( QObject * receiver, const char * member ) +{ + d->disconnectReceiver = receiver; + d->disconnectSlot = member; + connect( d, SIGNAL( disconnected() ), receiver, member ); +} + +void ConnectionManager::forgetDisconnectSlot() +{ + disconnect( d, SIGNAL( disconnected() ), d->disconnectReceiver, d->disconnectSlot ); + d->disconnectReceiver = 0; + d->disconnectSlot = 0; +} + +bool ConnectionManager::isDisconnectSlotRegistered() const +{ + return ( d->disconnectSlot != 0 ); +} + +#include "connectionmanager.moc" + Index: networkstatus/.svn/text-base/connectionmanager.h.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/connectionmanager.h.svn-base @@ -0,0 +1,167 @@ +/* This file is part of kdepim. + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef KDE_CONNECTION_MANAGER_H +#define KDE_CONNECTION_MANAGER_H + +#include +#include + +#include + +class ConnectionManagerPrivate; + +class KDE_EXPORT ConnectionManager : public QObject, virtual public DCOPObject +{ +Q_OBJECT +K_DCOP +k_dcop: + void slotStatusChanged( int status ); +public: + /** + * This defines application policy in response to networking connect/disconnect events + * Manual - the app only disconnects when the user does so + * OnNextChange - the app should connect or disconnect the next time the network changes state, thereafter + * Manual + * Managed - the app should disconnect when the ConnectionManager thinks the system is + * offline + */ + enum ConnectionPolicy { Manual, OnNextChange, Managed }; + /** + * Set a policy to manage the application's connect behaviour + */ + void setConnectPolicy( ConnectionPolicy ); + /** + * Retrieve a policy managing the application's connect behaviour + */ + ConnectionPolicy connectPolicy() const; + + /** + * Set a policy to manage the application's disconnect behaviour + */ + void setDisconnectPolicy( ConnectionPolicy ); + + /** + * Retrieve a policy managing the application's disconnect behaviour + */ + ConnectionPolicy disconnectPolicy() const; + + /* + * We'll get logic of the form + * onStatusChange() { + * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange || + * ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::Managed ) + * { + * // do connect + * + * // reset the policy + * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange ) + * ConnectionManager::self()->setPolicy( ConnectionManager::ConnectionManager, + * ConnectionManager::Manual ); + * } + * + * Do we just use the CM for policy storage, or do we try to factor the logic to implement the + * policy into the CM too? + * + * could signal doConnect(), then reset the policy + * or could register a connect slot + * registerConnectMethod( QObject * receiver, const char * member ); + * unregisterConnectMethod(); + * etc. + * + * The problem with automatically controlled behaviour, where policy may change as a result of a + * connect, is that if it is also manually altered, the CM needs to be updated. But the CM needs to + * be updated in any case. + * CM need + */ + /** + * Lazy-method to set Manual on both policies + */ + void setManualConnectionPolicies(); + /** + * Lazy-method to set Managed on both policies + */ + void setManagedConnectionPolicies(); + + /** + * Record a slot to call on a given receiving QObject when + * 1) the network connection is online, + * 2) the policy mandates that the app connect + * + * Only one slot may be registered at any one time. If a second slot is + * registered, the first slot is forgotten + * @param receiver the QObject where the slot is located + * @param member the slot to call. Set up member using the SLOT() macro. + */ + void registerConnectSlot( QObject * receiver, const char * member ); + + /** + * Forget any connect slot previously registered + */ + void forgetConnectSlot(); + + /** + * Has any slot been registered to be called on connect? + */ + bool isConnectSlotRegistered() const; + + /** + * Record a slot to call on a given receiving QObject when + * 1) the network connection goes offline (in any way ), + * 2) the policy mandates that the app disconnect + * + * Only one slot may be registered at any one time. If a second slot is + * registered, the first slot is forgotten + * @param receiver the QObject where the slot is located + * @param member the slot to call. Set up member using the SLOT() macro. + */ + void registerDisconnectSlot( QObject * receiver, const char * member ); + + /** + * Forget any disconnect slot previously registered + */ + void forgetDisconnectSlot(); + + /** + * Has any slot been registered to be called on disconnect? + */ + bool isDisconnectSlotRegistered() const; + + /// existing API + + static ConnectionManager* self(); + virtual ~ConnectionManager(); + NetworkStatus::Status status(); +signals: + // signal that the network for a hostname is up/down + void statusChanged( NetworkStatus::Status status ); +private: + // sets up internal state + void initialise(); + // reread the desktop status from the daemon and update internal state + ConnectionManager( QObject *parent, const char * name ); + ConnectionManagerPrivate * d; + static ConnectionManager * s_self; +}; + +#endif + Index: networkstatus/.svn/text-base/connectionmanager_p.cpp.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/connectionmanager_p.cpp.svn-base @@ -0,0 +1,13 @@ +#include "connectionmanager_p.h" + +ConnectionManagerPrivate::ConnectionManagerPrivate(QObject * parent, const char * name ) : QObject( parent, name ), service( 0 ), connectPolicy( ConnectionManager::Managed ), + disconnectPolicy( ConnectionManager::Managed ), connectReceiver( 0 ), connectSlot( 0 ), + disconnectReceiver( 0 ), disconnectSlot( 0 ) +{ +} + +ConnectionManagerPrivate::~ConnectionManagerPrivate() +{ +} + +#include "connectionmanager_p.moc" Index: networkstatus/.svn/text-base/connectionmanager_p.h.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/connectionmanager_p.h.svn-base @@ -0,0 +1,55 @@ +/* This file is part of the KDE project + Copyright (C) 2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef CONNECTIONMANAGERPRIVATE_H +#define CONNECTIONMANAGERPRIVATE_H + +#include + +#include "connectionmanager.h" +#include "networkstatuscommon.h" +#include "networkstatusiface_stub.h" + + +// ConnectionManager's private parts +class ConnectionManagerPrivate : public QObject +{ +Q_OBJECT + friend class ConnectionManager; +public: + ConnectionManagerPrivate( QObject * parent = 0, const char * name = 0); + ~ConnectionManagerPrivate(); + // this holds the currently active state + NetworkStatus::Status status; + NetworkStatusIface_stub * service; + ConnectionManager::ConnectionPolicy connectPolicy; + ConnectionManager::ConnectionPolicy disconnectPolicy; + QObject * connectReceiver; + const char * connectSlot; + QObject * disconnectReceiver; + const char * disconnectSlot; +signals: + void connected(); + void disconnected(); +}; + +#endif Index: networkstatus/.svn/text-base/Makefile.am.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/Makefile.am.svn-base @@ -0,0 +1,45 @@ +#SUBDIRS = networkstatustray + +METASOURCES = AUTO + +INCLUDES = -I$(top_srcdir)/kded -I$(top_srcdir) $(all_includes) + +kde_module_LTLIBRARIES = kded_networkstatus.la + +kded_networkstatus_la_SOURCES = networkstatus.cpp networkstatus.skel \ + network.cpp +kded_networkstatus_la_LIBADD = $(LIB_KDECORE) $(LIB_KIO) ./libnetworkstatus.la +kded_networkstatus_la_LDFLAGS = $(all_libraries) -module -avoid-version + +servicesdir = $(kde_servicesdir)/kded + +services_DATA = networkstatus.desktop + +lib_LTLIBRARIES = libnetworkstatus.la libconnectionmanager.la + +libnetworkstatus_la_LIBADD = $(LIB_KDECORE) +libnetworkstatus_la_LDFLAGS = $(all_libraries) +libnetworkstatus_la_SOURCES = networkstatuscommon.cpp + +libconnectionmanager_la_LIBADD = $(LIB_KDECORE) libnetworkstatus.la +libconnectionmanager_la_LDFLAGS = $(all_libraries) +libconnectionmanager_la_SOURCES = connectionmanager.cpp connectionmanager_p.cpp networkstatusindicator.cpp connectionmanager.skel networkstatusiface.stub + +noinst_PROGRAMS = networkstatustestservice networkstatustestclient managedconnectiontestclient + +networkstatustestservice_LDFLAGS = $(all_libraries) +networkstatustestservice_LDADD = $(LIB_KFILE) libnetworkstatus.la +networkstatustestservice_SOURCES = testservice.cpp testserviceview.ui networkstatusiface.stub + +networkstatustestclient_LDFLAGS = $(all_libraries) +networkstatustestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la +networkstatustestclient_SOURCES = testclient.cpp testclientview.ui + +managedconnectiontestclient_LDFLAGS = $(all_libraries) +managedconnectiontestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la +managedconnectiontestclient_SOURCES = testclient2.cpp testclientview.ui + +noinst_HEADERS = network.h testservice.h testclient.h + +include_HEADERS = networkstatuscommon.h connectionmanager.h networkstatusindicator.h \ + networkstatusiface.h Index: networkstatus/.svn/text-base/network.cpp.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/network.cpp.svn-base @@ -0,0 +1,62 @@ +/* This file is part of kdepim. + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include + +#include "network.h" + +Network::Network( NetworkStatus::Properties properties ) + : m_name( properties.name ), m_status( properties.status ), m_service( properties.service ) +{ +} + +void Network::setStatus( NetworkStatus::Status status ) +{ + m_status = status; +} + +NetworkStatus::Status Network::status() +{ + return m_status; +} + +void Network::setName( const QString& name ) +{ + m_name = name; +} + +QString Network::name() +{ + return m_name; +} + +QString Network::service() +{ + return m_service; +} + +void Network::setService( const QString& service ) +{ + m_service = service; +} + +// vim: sw=4 ts=4 Index: networkstatus/.svn/text-base/network.h.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/network.h.svn-base @@ -0,0 +1,60 @@ +/* This file is part of kdepim. + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef NETWORKSTATUS_NETWORK_H +#define NETWORKSTATUS_NETWORK_H + +#include "networkstatuscommon.h" + +class Network +{ +public: + Network( const QString name ); + Network( NetworkStatus::Properties properties ); + /** + * Update the status of this network + */ + void setStatus( NetworkStatus::Status status ); + /** + * The connection status of this network + */ + NetworkStatus::Status status(); + /** + * The name of this network + */ + QString name(); + void setName( const QString& name ); + /** + * Returns the service owning this network + */ + QString service(); + void setService( const QString& service ); + +private: + Network( const Network & ); + QString m_name; + NetworkStatus::Status m_status; + QString m_service; +}; + +#endif +// vim: sw=4 ts=4 Index: networkstatus/.svn/text-base/networkstatuscommon.cpp.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/networkstatuscommon.cpp.svn-base @@ -0,0 +1,76 @@ +/* This file is part of kdepim. + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include "networkstatuscommon.h" + +QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p ) +{ + s << p.name; + s << (int)p.status; + s << p.service; + return s; +} + +QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p ) +{ + int status; + s >> p.name; + s >> status; + p.status = (NetworkStatus::Status)status; + s >> p.service; + return s; +} + +namespace NetworkStatus +{ + QString toString( NetworkStatus::Status st ) + { + QString str; + switch ( st ) { + case NetworkStatus::NoNetworks: + str = "NoNetworks"; + break; + case NetworkStatus::Unreachable: + str = "Unreachable"; + break; + case NetworkStatus::OfflineDisconnected: + str = "OfflineDisconnected"; + break; + case NetworkStatus::OfflineFailed: + str = "OfflineFailed"; + break; + case NetworkStatus::ShuttingDown: + str = "ShuttingDown"; + break; + case NetworkStatus::Offline: + str = "Offline"; + break; + case NetworkStatus::Establishing: + str = "Establishing"; + break; + case NetworkStatus::Online: + str = "Online"; + break; + } + return str; + } +} // namespace NetworkStatus Index: networkstatus/.svn/text-base/networkstatuscommon.h.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/networkstatuscommon.h.svn-base @@ -0,0 +1,52 @@ +/* This file is part of kdepim + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef NETWORKSTATUS_COMMON_H +#define NETWORKSTATUS_COMMON_H + +#include + +namespace NetworkStatus +{ + enum Status { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown, Offline, Establishing, Online }; + enum RequestResult { RequestAccepted = 1, Connected, UserRefused, Unavailable }; + enum UnusedDemandPolicy { All, User, None, Permanent }; + + // BINARY COMPATIBILITY ALERT BEGIN !!!! + struct Properties + { + QString name; + Status status; + UnusedDemandPolicy unused1; + QCString service; + bool unused3; + QStringList unused4; + }; + // BINARY COMPATIBILITY ALERT END !!!! + + QString toString( Status st ); +} + +QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p ); +QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p ); + +#endif Index: networkstatus/.svn/text-base/networkstatus.cpp.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/networkstatus.cpp.svn-base @@ -0,0 +1,162 @@ +/* This file is part of kdepim + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include "networkstatus.h" + +#include + +#include +#include +#include + +#include "network.h" +#include + +extern "C" { + KDE_EXPORT KDEDModule* create_networkstatus( const QCString& obj ) + { + return new NetworkStatusModule( obj ); + } +} + +// INTERNALLY USED STRUCTS AND TYPEDEFS + +typedef QMap< QString, Network * > NetworkMap; + +class NetworkStatusModule::Private +{ +public: + NetworkMap networks; + NetworkStatus::Status status; +}; + +// CTORS/DTORS + +NetworkStatusModule::NetworkStatusModule( const QCString & obj ) : KDEDModule( obj ), d( new Private ) +{ + d->status = NetworkStatus::NoNetworks; + connect( kapp->dcopClient(), SIGNAL( applicationRemoved( const QCString& ) ) , this, SLOT( unregisteredFromDCOP( const QCString& ) ) ); + // connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ) , this, SLOT( registeredToDCOP( const QCString& ) ) ); +} + +NetworkStatusModule::~NetworkStatusModule() +{ + NetworkMap::ConstIterator it; + const NetworkMap::ConstIterator end = d->networks.end(); + + for ( it = d->networks.begin(); it != end; ++it ) { + delete ( *it ); + } + + delete d; +} + +// CLIENT INTERFACE + +QStringList NetworkStatusModule::networks() +{ + kdDebug() << k_funcinfo << " contains " << d->networks.count() << " networks" << endl; + return d->networks.keys(); +} + +int NetworkStatusModule::status() +{ + kdDebug() << k_funcinfo << " status: " << (int)d->status << endl; + return (int)d->status; +} + +//protected: + +void NetworkStatusModule::updateStatus() +{ + NetworkStatus::Status bestStatus = NetworkStatus::NoNetworks; + const NetworkStatus::Status oldStatus = d->status; + + NetworkMap::ConstIterator it; + const NetworkMap::ConstIterator end = d->networks.end(); + for ( it = d->networks.begin(); it != end; ++it ) { + if ( ( *it )->status() > bestStatus ) + bestStatus = ( *it )->status(); + } + d->status = bestStatus; + + if ( oldStatus != d->status ) { + statusChange( (int)d->status ); + } +} + +void NetworkStatusModule::unregisteredFromDCOP( const QCString & appId ) +{ + // unregister and delete any networks owned by a service that has just unregistered + NetworkMap::Iterator it; + const NetworkMap::Iterator end = d->networks.end(); + for ( it = d->networks.begin(); it != end; ++it ) + { + if ( ( *it )->service() == QString( appId ) ) + { + NetworkMap::Iterator toRemove = it; + Network * removedNet = *toRemove; + d->networks.remove( toRemove ); + updateStatus(); + delete removedNet; + } + } +} + +// SERVICE INTERFACE // +void NetworkStatusModule::setNetworkStatus( const QString & networkName, int st ) +{ + kdDebug() << k_funcinfo << networkName << ", " << st << endl; + NetworkStatus::Status changedStatus = (NetworkStatus::Status)st; + Network * net = 0; + NetworkMap::Iterator it = d->networks.find( networkName ); + if ( it != d->networks.end() ) { + net = (*it); + net->setStatus( changedStatus ); + updateStatus(); + } + else + kdDebug() << " No network named '" << networkName << "' found." << endl; +} + +void NetworkStatusModule::registerNetwork( const NetworkStatus::Properties properties ) +{ + kdDebug() << k_funcinfo << properties.name << ", with status " << properties.status << endl; + + d->networks.insert( properties.name, new Network( properties ) ); + updateStatus(); +} + +void NetworkStatusModule::unregisterNetwork( const QString & networkName ) +{ + kdDebug() << k_funcinfo << networkName << endl; + + NetworkMap::Iterator it = d->networks.find( networkName ); + if ( it != d->networks.end() ) { + delete *it; + d->networks.remove( it ); + } + updateStatus(); +} + +#include "networkstatus.moc" +// vim: set noet sw=4 ts=4: Index: networkstatus/.svn/text-base/networkstatus.desktop.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/networkstatus.desktop.svn-base @@ -0,0 +1,98 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Network Status Daemon +Name[af]=Netwerk status bediener +Name[ar]=مراقب القرص و التنفيذ لحالة الشبكة +Name[bg]=Демон за състояние на мрежата +Name[ca]=Dimoni de l'estat de la xarxa +Name[cs]=Démon stavu sítě +Name[da]=Netværkstatusdæmon +Name[de]=Überwachung des Netzwerkstatus +Name[el]=Δαίμονας κατάστασης δικτύου +Name[es]=Daemon de estado de la red +Name[et]=Võrguoleku deemon +Name[eu]=Sarearen egoera deabrua +Name[fa]=شبح وضعیت شبکه +Name[fi]=Verkkotilan tarkkailija +Name[fr]=Suivi de l'état du réseau +Name[fy]=Netwurktastândaemon +Name[gl]=Daemon do Estado da Rede +Name[hu]=Hálózati állapotjelző szolgáltatás +Name[is]=Netstöðupúki +Name[it]=Demone dello stato della rete +Name[ja]=ネットワークステータスデーモン +Name[kk]=Желі күйінің қызметі +Name[km]=ដេមិន​ស្ថានភាព​បណ្ដាញ +Name[lt]=Tinklo statuso tarnyba +Name[mk]=Даемон за мрежен статус +Name[ms]=Daemon Berstatus Rangkaian +Name[nb]=Statusnisse for nettverket +Name[nds]=Nettwarkstatus-Dämoon +Name[ne]=सञ्जाल स्थिति डेइमन +Name[nl]=Netwerkstatusdaemon +Name[nn]=Statusnisse for nettverket +Name[pl]=Usługa stanu sieci +Name[pt]=Servidor de Estado de Rede +Name[pt_BR]=Daemon de Status da Rede +Name[ru]=Служба состояния сети +Name[sk]=Daemon stavu siete +Name[sl]=Demon za omrežno stanje +Name[sr]=Демон за статус мреже +Name[sr@Latn]=Demon za status mreže +Name[sv]=Nätverksstatusdemon +Name[ta]=வலைப்பின்னல் நிலை டெமான் +Name[tr]=Ağ Durum İzleyici +Name[uk]=Демон стану мережі +Name[zh_CN]=网络状态守护程序 +Name[zh_TW]=網路狀態守護程式 +Comment=Tracks status of network interfaces and provides notification to applications using the network. +Comment[af]=Hou tred van die status van netwerk intervlakke en verskaf kennisgewings na programme wat die netwerk gebruik. +Comment[bg]=Следене на състоянието на мрежата и предаване на информацията на програмите, които имат нужда +Comment[ca]=Controla l'estat de les interfícies de xarxa i proporciona notificacions a les aplicacions que usen la xarxa. +Comment[cs]=Zjiš'tuje stav síťových rozhraní a upozorňuje v případě přístupu aplikací k síti. +Comment[da]=Sporer status af netværksgrænseflade og sørger for meddelelser til programmer der bruger netværket. +Comment[de]=Überprüft den Netzwerk-Status und benachrichtigt anfragende Anwendungen +Comment[el]=Παρακολουθεί την κατάσταση του δικτύου και παρέχει ειδοποιήσεις σε εφαρμογές που χρησιμοποιούν το δίκτυο. +Comment[es]=Sigue la pista de las interfaces de red y proporciona notificaciones a las aplicaciones que están usando la red. +Comment[et]=Jälgib võrguliideste olekut ja annab sellest võrgu vahendusel rakendustele teada. +Comment[eu]=Sare interfazeen egoera jarraitzen du eta sarea darabilten aplikazioei jakinarazten die. +Comment[fa]=وضعیت واسطهای شبکه را شیار داده و با استفاده از شبکه، برای کاربردها اخطار فراهم می‌کند. +Comment[fi]=Tarkkailee verkkoliitäntöjen tilaa ja varoittaa verkkoa käyttäviä sovelluksia. +Comment[fr]=Surveille l'état des interfaces réseaux et fournit des notifications aux applications qui utilisent le réseau +Comment[fy]=Hâldt de tastân by fan de Netwurkynterfaces en hâldt dêr de tapassings fan op de hichte. +Comment[gl]=Monitoriza o estado das interfaces de rede e fornece notificacións ás aplicacións que usen a rede. +Comment[hu]=Figyeli a hálózati csatolók állapotát és értesítési lehetőséget biztosít hálózati alkalmazások számára. +Comment[is]=Fylgist með stöðu netkorta og sendir tilkynningar til forrita sem nota netið. +Comment[it]=Controlla lo stato delle interfacce di rete e fornisce notifiche alle applicazioni che usano al rete. +Comment[ja]=ネットワークインターフェースの状態を追跡し、ネットワークを用いるアプリケーションに通知します +Comment[kk]=Желі интерфейстерінің күйін бақылап, желіні қолданатын бағдарламаларын құлақтандыру қызметі. +Comment[km]=តាមដាន​ស្ថានភាព​របស់​ចំណុច​ប្រទាក់​បណ្ដាញ ព្រម​ទាំង​ផ្ដល់​នូវ​ការ​ជូនដំណឹង​ទៅ​កម្មវិធី ដែល​ប្រើ​បណ្ដាញ ។ +Comment[lt]=Seka tinklo sąsajų būseną ir informuoja apie jas programas, naudojančias tinklą +Comment[mk]=Го следи статусот на мрежните интерфејси и дава известувања на апликациите што ја користат мрежата. +Comment[ms]=Menjejak status antara muka rangkaian dan memberitahu aplikasi yang menggunakan rangkaian tersebut. +Comment[nb]=Overvåker status for nettverksgrensesnitt og varsler programmer som bruker nettverket. +Comment[nds]=Överwacht den Tostand vun Nettwark-Koppelsteden un sendt Narichten na Programmen, de dat Nettwark bruukt. +Comment[ne]=सञ्जाल इन्टरफेसको स्थिति ट्र्याक गर्दछ र सञ्जाल प्रयोग गरेर अनुप्रयोगमा जानकारी उपलब्ध गराउछ । +Comment[nl]=Houdt de status bij van de netwerkinterfaces en houdt daar de toepassingen van op de hoogte. +Comment[nn]=Overvakar status for nettverksgrensesnitt og varslar program som brukar nettverket. +Comment[pl]=Śledzi stan interfejsów sieciowych i powiadamia programy używające sieci. +Comment[pt]=Vigia o estado das interfaces de rede e avisa as aplicações que utilizam a rede. +Comment[pt_BR]=Controla o status das interfaces de rede e fornece notificações para aplicativos utilizando a rede. +Comment[ru]=Служба отслеживания состояния сетевых интерфейсов и обращения приложений к сети. +Comment[sk]=Sleduje stav sieťových rozhraní a poskytuje upozornenia aplikáciám používajúcim sieť. +Comment[sl]=Sledi stanju omrežnim vmesnikom in omogoča obvestila programom, ki uporabljajo omrežje +Comment[sr]=Прати статус мрежних интерфејса и пружа обавештења програмима који користе мрежу. +Comment[sr@Latn]=Prati status mrežnih interfejsa i pruža obaveštenja programima koji koriste mrežu. +Comment[sv]=Bevakar status för nätverksgränssnitt och tillhandahåller underrättelser till program som använder nätverket. +Comment[ta]=வலைப்பின்னலைப் பயன்படுத்தி வலைப்பின்னல் இடைமுகங்களின் நிலையை கண்காணிக்கிறது மற்றும் பயன்பாடுகளுக்கு அறிவிப்பை வழங்குகிறது. +Comment[uk]=Слідкує за станом інтерфейсів мережі і сповіщає програми, які користуються мережею. +Comment[zh_CN]=跟踪网卡的状态并为应用程序提供使用网络的通知。 +Comment[zh_TW]=追蹤網路介面的狀態,並提供使用網路的應用程式的通知。 +Type=Service +ServiceTypes=KDEDModule +X-KDE-ModuleType=Library +X-KDE-Library=networkstatus +X-KDE-FactoryName=networkstatus +X-KDE-Kded-autoload=true +X-KDE-Kded-load-on-demand=true + Index: networkstatus/.svn/text-base/networkstatus.h.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/networkstatus.h.svn-base @@ -0,0 +1,66 @@ +/* This file is part of kdepim + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef KDED_NETWORKSTATUS_H +#define KDED_NETWORKSTATUS_H + +#include + +#include "networkstatuscommon.h" +#include "network.h" + +class NetworkStatusModule : virtual public KDEDModule +{ +Q_OBJECT +K_DCOP +public: + NetworkStatusModule( const QCString& obj ); + ~NetworkStatusModule(); +k_dcop: + // Client interface + QStringList networks(); + int status(); + // Service interface + void setNetworkStatus( const QString & networkName, int status ); + void registerNetwork( NetworkStatus::Properties properties ); + void unregisterNetwork( const QString & networkName ); +k_dcop_signals: + /** + * A status change occurred affecting the overall connectivity + * @param status The new status + */ + void statusChange( int status ); +protected slots: + //void registeredToDCOP( const QCString& appId ); + void unregisteredFromDCOP( const QCString& appId ); + +protected: + // recalculate cached status + void updateStatus(); + +private: + class Private; + Private *d; +}; + +#endif +// vim: sw=4 ts=4 Index: networkstatus/.svn/text-base/networkstatusiface.h.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/networkstatusiface.h.svn-base @@ -0,0 +1,50 @@ +/* This file is part of kdepim. + Copyright (C) 2005,2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef KDED_NETWORKSTATUSIFACE_H +#define KDED_NETWORKSTATUSIFACE_H + +#include +#include + +#include "networkstatuscommon.h" + +class NetworkStatusIface : virtual public DCOPObject +{ +K_DCOP +k_dcop: + // Client interface + virtual QStringList networks() = 0; + virtual int status() = 0; + // Service interface + virtual void setNetworkStatus( const QString & networkName, int status ) = 0; + virtual void registerNetwork( NetworkStatus::Properties properties ) = 0; + virtual void unregisterNetwork( const QString & networkName ) = 0 ; +k_dcop_signals: + /** + * A status change occurred affecting the overall connectivity + * @param status The new status + */ + virtual void statusChange( int status ) = 0; +}; +#endif +// vim: sw=4 ts=4 Index: networkstatus/.svn/text-base/networkstatusindicator.cpp.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/networkstatusindicator.cpp.svn-base @@ -0,0 +1,64 @@ +/* This file is part of the KDE project + Copyright (C) 2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include +#include +#include +#include + +#include "connectionmanager.h" + +#include "networkstatusindicator.h" + +StatusBarNetworkStatusIndicator::StatusBarNetworkStatusIndicator( + QWidget * parent, const char * name ) : QHBox( parent, name )/*, d( new StatusBarNetworkStatusIndicatorPrivate )*/ +{ + setMargin( 2 ); + setSpacing( 1 ); + QLabel * label = new QLabel( this, "offlinemodelabel" ); + label->setPixmap( SmallIcon("connect_no") ); + QToolTip::add( label, i18n( "The desktop is offline" ) ); + + connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), + SLOT( networkStatusChanged( NetworkStatus::Status) ) ); + +} + +void StatusBarNetworkStatusIndicator::init() +{ + networkStatusChanged( ConnectionManager::self()->status()); +} + +StatusBarNetworkStatusIndicator::~StatusBarNetworkStatusIndicator() +{ +} + +void StatusBarNetworkStatusIndicator::networkStatusChanged( NetworkStatus::Status status ) +{ + if ( status == NetworkStatus::Online || status == NetworkStatus::NoNetworks ) { + hide(); + } else { + show(); + } +} + +#include "networkstatusindicator.moc" Index: networkstatus/.svn/text-base/networkstatusindicator.h.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/networkstatusindicator.h.svn-base @@ -0,0 +1,42 @@ +/* This file is part of the KDE project + Copyright (C) 2007 Will Stephenson + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library. If not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this library + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef KDE_NETWORKSTATUS_INDICATOR_H +#define KDE_NETWORKSTATUS_INDICATOR_H + +#include +#include +#include + +class StatusBarNetworkStatusIndicator : public QHBox +{ +Q_OBJECT +public: + StatusBarNetworkStatusIndicator( QWidget * parent, const char * name ); + virtual ~StatusBarNetworkStatusIndicator(); + void init(); +protected slots: + void networkStatusChanged( NetworkStatus::Status status ); +}; + +#endif + Index: networkstatus/.svn/text-base/networkstatus.kdevelop.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/networkstatus.kdevelop.svn-base @@ -0,0 +1,108 @@ + + + + Will Stephenson + wstephenson@suse.de + $VERSION$ + KDevKDEAutoProject + C++ + + Qt + KDE + + + + + + + + + + false + false + + + *.o,*.lo,CVS + false + + + + + ada + ada_bugs_gcc + bash + bash_bugs + clanlib + fortran_bugs_gcc + gnome1 + gnustep + gtk + gtk_bugs + haskell + haskell_bugs_ghc + java_bugs_gcc + java_bugs_sun + opengl + pascal_bugs_fp + php + php_bugs + perl + perl_bugs + python + python_bugs + ruby + ruby_bugs + sdl + stl + sw + w3c-dom-level2-html + w3c-svg + w3c-uaag10 + wxwidgets_bugs + + + qmake User Guide + + + + + libtool + + + + + + + + + + + + + + + + + + executable + + + kded_networkstatus.la + + + + + + true + true + true + false + true + true + true + 250 + 400 + 250 + + + Index: networkstatus/.svn/text-base/README.statetransition.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/README.statetransition.svn-base @@ -0,0 +1,29 @@ +This table defines the actions to be taken on state transition. + +TODO: potentially add extra states OnlineReading and OnlineWriting + + NEW + |Offline | Online | +---+---+----------------+---------------+ + | | |N|set online | + | | |L|reload | + | O | |C|resources | + | F | +---------------+ + | F | |L|set online | +O | | |C|reload res. | +L | | | |write res. | +D +---+----------------+---------------+ + | |N|set offline | | + | |C| | | + | | | | | + | O +---------------+| | + | N |U|set offline | | + | |W|write locally | | + | |C|(subject to | | + | | | save policy)| | +---+---+----------------+---------------+ +LC = Local changes exist +NLC = No local changes exist +UWC = Unsaved changes exist +NC = no changes exist + Index: networkstatus/.svn/text-base/testclient2.cpp.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/testclient2.cpp.svn-base @@ -0,0 +1,222 @@ +/* This file is part of kdepim. + Copyright (C) 2007 Will Stephenson + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 + as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "testclientview.h" +#include "testclient2.h" + +TestClient::TestClient() + : KMainWindow( 0, "ktestnetworkstatus" ), + m_layout( new QVBox( 0, "layout" ) ), + m_status( AppDisconnected ) +{ + m_view = new TestClientView( this ); + new StatusBarNetworkStatusIndicator( m_view, "statusindicator" ); + // tell the KMainWindow that this is indeed the main widget + setCentralWidget(m_view); + + networkStatusChanged( ConnectionManager::self()->status() ); + appDisconnected(); + + connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) ); + ConnectionManager::self()->registerConnectSlot( this, SLOT( doConnect() ) ); + ConnectionManager::self()->registerDisconnectSlot( this, SLOT( doDisconnect() ) ); + + connect( m_view->connectButton, SIGNAL( clicked() ), SLOT( connectButtonClicked() ) ); +} + +TestClient::~TestClient() +{ +} + +void TestClient::networkStatusChanged( NetworkStatus::Status status ) +{ + kdDebug() << k_funcinfo << endl; + kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl; + m_view->netStatusLabel->setText( NetworkStatus::toString( status ) ); + m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) ); +} + +void TestClient::doConnect() +{ + Q_ASSERT( ConnectionManager::self()->status() == NetworkStatus::Online ); + if ( m_status != AppConnected ) { + appIsConnected(); + } +} + +void TestClient::doDisconnect() +{ + Q_ASSERT( ConnectionManager::self()->status() != NetworkStatus::Online ); + if ( m_status == AppConnected ) { + appDisconnected(); + } +} + +void TestClient::connectButtonClicked() +{ + kdDebug() << k_funcinfo << endl; + if ( m_status == AppDisconnected ) { + switch ( ConnectionManager::self()->status() ) + { + case NetworkStatus::NoNetworks: + case NetworkStatus::Online: + appIsConnected(); + break; + default: + appWaiting(); + break; + } + } + else if ( m_status == AppConnected || m_status == AppWaitingForConnect ) { + appDisconnected(); + } +} + +void TestClient::appWaiting() +{ + kdDebug() << k_funcinfo << endl; + //m_status = AppWaitingForConnect; + m_view->appStatusLabel->setText( "Waiting" ); +} + +void TestClient::appIsConnected() +{ + kdDebug() << k_funcinfo << endl; + m_view->connectButton->setEnabled( true ); + m_view->connectButton->setText( "Disconnect" ); + m_view->appStatusLabel->setText( "Connected" ); + m_status = AppConnected; +} + +void TestClient::appEstablishing() +{ + kdDebug() << k_funcinfo << endl; + m_view->netStatusLabel->setText( "Establishing" ); + m_view->connectButton->setEnabled( false ); +} + +void TestClient::appDisestablishing( ) +{ + kdDebug() << k_funcinfo << endl; + m_view->connectButton->setEnabled( false ); + m_view->appStatusLabel->setText( "Disconnected" ); +} + +void TestClient::appDisconnected( ) +{ + kdDebug() << k_funcinfo << endl; + m_view->connectButton->setEnabled( true ); + m_view->connectButton->setText( "Start Connect" ); + m_view->appStatusLabel->setText( "Disconnected" ); + m_status = AppDisconnected; +} + +QColor TestClient::toQColor( NetworkStatus::Status st ) +{ + QColor col; + switch ( st ) { + case NetworkStatus::NoNetworks: + col = Qt::darkGray; + break; + case NetworkStatus::Unreachable: + col = Qt::darkMagenta; + break; + case NetworkStatus::OfflineDisconnected: + col = Qt::blue; + break; + case NetworkStatus::OfflineFailed: + col = Qt::darkRed; + break; + case NetworkStatus::ShuttingDown: + col = Qt::darkYellow; + break; + case NetworkStatus::Offline: + col = Qt::blue; + break; + case NetworkStatus::Establishing: + col = Qt::yellow; + break; + case NetworkStatus::Online: + col = Qt::green; + break; + } + return col; +} +//main +static const char description[] = + I18N_NOOP("Test Client for Network Status kded module"); + +static const char version[] = "v0.1"; + +static KCmdLineOptions options[] = +{ + KCmdLineLastOption +}; + +int main(int argc, char **argv) +{ + KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); + about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); + KCmdLineArgs::init(argc, argv, &about); + KCmdLineArgs::addCmdLineOptions(options); + KApplication app; + + // register ourselves as a dcop client + app.dcopClient()->registerAs(app.name(), false); + + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + if (args->count() == 0) + { + TestClient *widget = new TestClient; + widget->show(); + } + else + { + int i = 0; + for (; i < args->count(); i++) + { + TestClient *widget = new TestClient; + widget->show(); + } + } + args->clear(); + + return app.exec(); +} + +#include "testclient2.moc" + Index: networkstatus/.svn/text-base/testclient2.h.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/testclient2.h.svn-base @@ -0,0 +1,82 @@ +/* This file is part of kdepim. + + Copyright (C) 2007 Will Stephenson + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef KTESTNETWORKSTATUS_H +#define KTESTNETWORKSTATUS_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +#include "networkstatusiface_stub.h" + +class TestClientView; + +/** + * Test client that uses a ConnectionManager to change its state + * + * @short Main window class + * @author Will Stephenson + * @version 0.1 + */ +class TestClient : public KMainWindow +{ +Q_OBJECT +public: + enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected }; + /** + * Default Constructor + */ + TestClient(); + + /** + * Default Destructor + */ + virtual ~TestClient(); + +private slots: + void networkStatusChanged( NetworkStatus::Status status ); + void connectButtonClicked(); + void doConnect(); + void doDisconnect(); +private: + void appWaiting(); + void appEstablishing(); + void appIsConnected(); + void appDisestablishing(); + void appDisconnected(); + static QColor toQColor( NetworkStatus::Status ); +private: + QHBox * m_layout; + NetworkStatusIface_stub *m_service; + TestClientView *m_view; + AppStatus m_status; // this represents the app's status not the network's status +}; + +#endif // KTESTNETWORKSTATUS_H + Index: networkstatus/.svn/text-base/testclient.cpp.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/testclient.cpp.svn-base @@ -0,0 +1,234 @@ +/* This file is part of kdepim. + Copyright (C) 2007 Will Stephenson + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 + as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include +#include + + +#include +#include +#include +#include +#include +#include +#include + +#include "connectionmanager.h" +#include "testclientview.h" +#include "testclient.h" + +TestClient::TestClient() + : KMainWindow( 0, "ktestnetworkstatus" ), + m_view(new TestClientView(this)), + m_status( AppDisconnected ) +{ + // tell the KMainWindow that this is indeed the main widget + setCentralWidget(m_view); + + networkStatusChanged( ConnectionManager::self()->status() ); + appDisconnected(); + + connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) ); + + connect( m_view->connectButton, SIGNAL( toggled( bool ) ), SLOT( connectButtonToggled( bool ) ) ); +} + +TestClient::~TestClient() +{ +} + +void TestClient::networkStatusChanged( NetworkStatus::Status status ) +{ + kdDebug() << k_funcinfo << endl; +//enum EnumStatus { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown +// , Offline, Establishing, Online }; + kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl; + m_view->netStatusLabel->setText( NetworkStatus::toString( status ) ); + m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) ); + switch ( status ) { + case NetworkStatus::NoNetworks: + break; + case NetworkStatus::Unreachable: + break; + case NetworkStatus::OfflineDisconnected: + break; + case NetworkStatus::OfflineFailed: + break; + case NetworkStatus::ShuttingDown: + if ( m_status == AppConnected ) { + appDisestablishing(); + } + break; + case NetworkStatus::Offline: + if ( m_status == AppConnected ) { + appDisconnected(); + } + break; + case NetworkStatus::Establishing: + if ( m_status == AppWaitingForConnect ) + appEstablishing(); + else if ( m_status == AppConnected ) + appDisconnected(); + break; + case NetworkStatus::Online: + if ( m_status == AppWaitingForConnect ) + appIsConnected(); + break; + default: + m_view->netStatusLabel->setText( "Unrecognised status code!" ); + } +} + +void TestClient::connectButtonToggled( bool on ) +{ + kdDebug() << k_funcinfo << endl; + if ( on && m_status == AppDisconnected ) { + switch ( ConnectionManager::self()->status() ) + { + case NetworkStatus::NoNetworks: + case NetworkStatus::Online: + appIsConnected(); + break; + default: + appWaiting(); + break; + } + } + else if ( !on && m_status == AppConnected ) { + appDisconnected(); + } +} + +void TestClient::appWaiting() +{ + kdDebug() << k_funcinfo << endl; + m_status = AppWaitingForConnect; + m_view->appStatusLabel->setText( "Waiting" ); +} + +void TestClient::appIsConnected() +{ + kdDebug() << k_funcinfo << endl; + m_view->connectButton->setEnabled( true ); + m_view->connectButton->setText( "Disconnect" ); + m_view->appStatusLabel->setText( "Connected" ); + m_status = AppConnected; +} + +void TestClient::appEstablishing() +{ + kdDebug() << k_funcinfo << endl; + m_view->netStatusLabel->setText( "Establishing" ); + m_view->connectButton->setEnabled( false ); +} + +void TestClient::appDisestablishing( ) +{ + kdDebug() << k_funcinfo << endl; + m_view->connectButton->setEnabled( false ); + m_view->appStatusLabel->setText( "Disconnected" ); +} + +void TestClient::appDisconnected( ) +{ + kdDebug() << k_funcinfo << endl; + m_view->connectButton->setEnabled( true ); + m_view->connectButton->setText( "Start Connect" ); + m_view->appStatusLabel->setText( "Disconnected" ); + m_status = AppDisconnected; +} + +QColor TestClient::toQColor( NetworkStatus::Status st ) +{ + QColor col; + switch ( st ) { + case NetworkStatus::NoNetworks: + col = Qt::darkGray; + break; + case NetworkStatus::Unreachable: + col = Qt::darkMagenta; + break; + case NetworkStatus::OfflineDisconnected: + col = Qt::blue; + break; + case NetworkStatus::OfflineFailed: + col = Qt::darkRed; + break; + case NetworkStatus::ShuttingDown: + col = Qt::darkYellow; + break; + case NetworkStatus::Offline: + col = Qt::blue; + break; + case NetworkStatus::Establishing: + col = Qt::yellow; + break; + case NetworkStatus::Online: + col = Qt::green; + break; + } + return col; +} +//main +static const char description[] = + I18N_NOOP("Test Client for Network Status kded module"); + +static const char version[] = "v0.1"; + +static KCmdLineOptions options[] = +{ + KCmdLineLastOption +}; + +int main(int argc, char **argv) +{ + KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); + about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); + KCmdLineArgs::init(argc, argv, &about); + KCmdLineArgs::addCmdLineOptions(options); + KApplication app; + + // register ourselves as a dcop client + app.dcopClient()->registerAs(app.name(), false); + + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + if (args->count() == 0) + { + TestClient *widget = new TestClient; + widget->show(); + } + else + { + int i = 0; + for (; i < args->count(); i++) + { + TestClient *widget = new TestClient; + widget->show(); + } + } + args->clear(); + + return app.exec(); +} + +#include "testclient.moc" + Index: networkstatus/.svn/text-base/testclient.h.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/testclient.h.svn-base @@ -0,0 +1,80 @@ +/* This file is part of kdepim. + + Copyright (C) 2007 Will Stephenson + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef KTESTNETWORKSTATUS_H +#define KTESTNETWORKSTATUS_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +#include "networkstatusiface_stub.h" + +class TestClientView; + +/** + * This class serves as the main window for ktestnetworkstatus. It handles the + * menus, toolbars, and status bars. + * + * @short Main window class + * @author Will Stephenson + * @version 0.1 + */ +class TestClient : public KMainWindow +{ +Q_OBJECT +public: + enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected }; + /** + * Default Constructor + */ + TestClient(); + + /** + * Default Destructor + */ + virtual ~TestClient(); + +private slots: + void networkStatusChanged( NetworkStatus::Status status ); + void connectButtonToggled( bool on ); +private: + void appWaiting(); + void appEstablishing(); + void appIsConnected(); + void appDisestablishing(); + void appDisconnected(); + static QColor toQColor( NetworkStatus::Status ); +private: + NetworkStatusIface_stub *m_service; + TestClientView *m_view; + AppStatus m_status; // this represents the app's status not the network's status +}; + +#endif // KTESTNETWORKSTATUS_H + Index: networkstatus/.svn/text-base/testclientview.ui.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/testclientview.ui.svn-base @@ -0,0 +1,177 @@ + +TestClientView + + + TestClientView + + + + 0 + 0 + 356 + 127 + + + + Form1 + + + + unnamed + + + + textLabel4 + + + + 5 + 5 + 0 + 0 + + + + <font size="+2"><b>Client for KDE 3 Offline Mode</b></font> + + + AlignVCenter + + + + + layout1 + + + + unnamed + + + + textLabel1 + + + Network status: + + + + + netStatusLabel + + + + 0 + 255 + 0 + + + + Panel + + + STATUS + + + AlignCenter + + + + + + + layout1_2 + + + + unnamed + + + + textLabel1_2 + + + App status: + + + + + appStatusLabel + + + + 0 + 255 + 0 + + + + Panel + + + STATUS + + + AlignCenter + + + + + + + layout2 + + + + unnamed + + + + spacer1 + + + Horizontal + + + Expanding + + + + 31 + 20 + + + + + + connectButton + + + Start Connect + + + false + + + + + spacer2 + + + Horizontal + + + Expanding + + + + 61 + 20 + + + + + + + + + Index: networkstatus/.svn/text-base/testservice.cpp.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/testservice.cpp.svn-base @@ -0,0 +1,219 @@ +/* This file is part of kdepim. + Copyright (C) 2005,2007 Will Stephenson + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 + as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "testservice.h" +#include "testserviceview.h" +#include "networkstatusiface_stub.h" + +TestService::TestService() : KMainWindow( 0, "testservice" ), + m_service( new NetworkStatusIface_stub( "kded", "networkstatus" ) ), + m_status ( NetworkStatus::Offline ), + m_nextStatus( NetworkStatus::OfflineDisconnected ), + m_view( new TestServiceView( this ) ) +{ + setCentralWidget( m_view ); + kapp->dcopClient()->registerAs("testservice" ); + + connect( m_view->changeCombo, SIGNAL( activated( int ) ), SLOT( changeComboActivated( int ) ) ); + connect( m_view->changeButton, SIGNAL( clicked() ), SLOT( changeButtonClicked() ) ); + + connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ), this, SLOT( registeredToDCOP( const QCString& ) ) ); + kapp->dcopClient()->setNotifications( true ); + + m_view->statusLabel->setText( NetworkStatus::toString( m_status ) ); + m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) ); + setCaption( NetworkStatus::toString( m_status ) ); + + registerService(); +} + +TestService::~TestService() +{ + delete m_service; + delete m_view; +} + +void TestService::registerService() +{ + NetworkStatus::Properties nsp; + nsp.name = "test_net"; + nsp.service = kapp->dcopClient()->appId(); + nsp.status = m_status; + m_service->registerNetwork( nsp ); +} + +void TestService::registeredToDCOP( const QCString & appId ) +{ + if ( appId == "kded" ) + registerService(); +} + +int TestService::status( const QString & network ) +{ + Q_UNUSED( network ); + return (int)m_status; +} + +void TestService::changeComboActivated( int index ) +{ + switch ( index ) { + case 0 /*NetworkStatus::OfflineDisconnected*/: + m_nextStatus = NetworkStatus::OfflineDisconnected; + break; + case 1 /*NetworkStatus::OfflineFailed*/: + m_nextStatus = NetworkStatus::OfflineFailed; + break; + case 2 /*NetworkStatus::ShuttingDown*/: + m_nextStatus = NetworkStatus::ShuttingDown; + break; + case 3 /*NetworkStatus::Offline*/: + m_nextStatus = NetworkStatus::Offline; + break; + case 4 /*NetworkStatus::Establishing*/: + m_nextStatus = NetworkStatus::Establishing; + break; + case 5 /*NetworkStatus::Online*/: + m_nextStatus = NetworkStatus::Online; + break; + default: + kdDebug() << "Unrecognised status!" << endl; + Q_ASSERT( false ); + } + m_view->changeButton->setEnabled( true ); +} + +void TestService::changeButtonClicked() +{ + m_view->changeButton->setEnabled( false ); + m_status = m_nextStatus; + m_service->setNetworkStatus( "test_net", ( int )m_status ); + m_view->statusLabel->setText( NetworkStatus::toString( m_status ) ); + m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) ); + setCaption( NetworkStatus::toString( m_status ) ); +} + +int TestService::establish( const QString & network ) +{ + Q_UNUSED( network ); + m_status = NetworkStatus::Establishing; + m_service->setNetworkStatus( "test_net", (int)m_status ); + m_nextStatus = NetworkStatus::Online; + QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) ); + return (int)NetworkStatus::RequestAccepted; +} + +int TestService::shutdown( const QString & network ) +{ + Q_UNUSED( network ); + m_status = NetworkStatus::ShuttingDown; + m_service->setNetworkStatus( "test_net", (int)m_status ); + m_nextStatus = NetworkStatus::Offline; + QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) ); + return (int)NetworkStatus::RequestAccepted; +} + +void TestService::simulateFailure() +{ + m_status = NetworkStatus::OfflineFailed; + m_service->setNetworkStatus( "test_net", (int)m_status ); +} + +void TestService::simulateDisconnect() +{ + m_status = NetworkStatus::OfflineDisconnected; + m_service->setNetworkStatus( "test_net", (int)m_status ); +} + +void TestService::slotStatusChange() +{ + m_status = m_nextStatus; + m_service->setNetworkStatus( "test_net", (int)m_status ); +} + +QColor TestService::toQColor( NetworkStatus::Status st ) +{ + QColor col; + switch ( st ) { + case NetworkStatus::NoNetworks: + col = Qt::darkGray; + break; + case NetworkStatus::Unreachable: + col = Qt::darkMagenta; + break; + case NetworkStatus::OfflineDisconnected: + col = Qt::blue; + break; + case NetworkStatus::OfflineFailed: + col = Qt::darkRed; + break; + case NetworkStatus::ShuttingDown: + col = Qt::darkYellow; + break; + case NetworkStatus::Offline: + col = Qt::blue; + break; + case NetworkStatus::Establishing: + col = Qt::yellow; + break; + case NetworkStatus::Online: + col = Qt::green; + break; + } + return col; +} + +static const char description[] = + I18N_NOOP("Test Service for Network Status kded module"); + +static const char version[] = "v0.1"; + +static KCmdLineOptions options[] = +{ + KCmdLineLastOption +}; + +int main( int argc, char** argv ) +{ + KAboutData about("KNetworkStatusTestService", I18N_NOOP("knetworkstatustestservice"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); + about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); + KCmdLineArgs::init(argc, argv, &about); + KCmdLineArgs::addCmdLineOptions(options); + KApplication app; + + TestService * test = new TestService; + test->show(); + return app.exec(); +} + +#include "testservice.moc" Index: networkstatus/.svn/text-base/testservice.h.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/testservice.h.svn-base @@ -0,0 +1,60 @@ +/* This file is part of kdepim. + + Copyright (C) 2005,2007 Will Stephenson + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef _TEST_NETWORKSTATUS_SERVICE_H +#define _TEST_NETWORKSTATUS_SERVICE_H + +#include + +#include "networkstatuscommon.h" + +class NetworkStatusIface_stub; +class TestServiceView; + +class TestService : public KMainWindow { +Q_OBJECT +public: + TestService(); + virtual ~TestService(); + int status( const QString & network ); + int establish( const QString & network ); + int shutdown( const QString & network ); + void simulateFailure(); + void simulateDisconnect(); +protected slots: + void changeComboActivated( int index ); + void registeredToDCOP( const QCString& appId ); + + void changeButtonClicked(); + + void slotStatusChange(); +private: + void registerService(); + static QColor toQColor( NetworkStatus::Status ); + NetworkStatusIface_stub * m_service; + NetworkStatus::Status m_status; + NetworkStatus::Status m_nextStatus; + TestServiceView * m_view; +}; + +#endif Index: networkstatus/.svn/text-base/testserviceview.ui.svn-base =================================================================== --- /dev/null +++ networkstatus/.svn/text-base/testserviceview.ui.svn-base @@ -0,0 +1,181 @@ + +TestServiceView + + + TestServiceView + + + + 0 + 0 + 367 + 132 + + + + Form1 + + + + unnamed + + + + textLabel4 + + + <font size="+2"><b>Service for KDE 3 Offline Mode</b></font> + + + AlignVCenter + + + + + layout2 + + + + unnamed + + + + textLabel1 + + + Status: + + + + + statusLabel + + + + 0 + 255 + 0 + + + + StyledPanel + + + STATUS + + + AlignCenter + + + + + + + layout3 + + + + unnamed + + + + textLabel3 + + + Change to: + + + + + + Offline Disconnected + + + + + Offline Failed + + + + + Shutting Down + + + + + Offline + + + + + Establishing + + + + + Online + + + + changeCombo + + + + + + + layout1 + + + + unnamed + + + + spacer1 + + + Horizontal + + + Expanding + + + + 51 + 20 + + + + + + changeButton + + + Do change + + + + + spacer2 + + + Horizontal + + + Expanding + + + + 41 + 20 + + + + + + + + + + Index: networkstatus/testclient2.cpp =================================================================== --- /dev/null +++ networkstatus/testclient2.cpp @@ -0,0 +1,222 @@ +/* This file is part of kdepim. + Copyright (C) 2007 Will Stephenson + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 + as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "testclientview.h" +#include "testclient2.h" + +TestClient::TestClient() + : KMainWindow( 0, "ktestnetworkstatus" ), + m_layout( new QVBox( 0, "layout" ) ), + m_status( AppDisconnected ) +{ + m_view = new TestClientView( this ); + new StatusBarNetworkStatusIndicator( m_view, "statusindicator" ); + // tell the KMainWindow that this is indeed the main widget + setCentralWidget(m_view); + + networkStatusChanged( ConnectionManager::self()->status() ); + appDisconnected(); + + connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) ); + ConnectionManager::self()->registerConnectSlot( this, SLOT( doConnect() ) ); + ConnectionManager::self()->registerDisconnectSlot( this, SLOT( doDisconnect() ) ); + + connect( m_view->connectButton, SIGNAL( clicked() ), SLOT( connectButtonClicked() ) ); +} + +TestClient::~TestClient() +{ +} + +void TestClient::networkStatusChanged( NetworkStatus::Status status ) +{ + kdDebug() << k_funcinfo << endl; + kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl; + m_view->netStatusLabel->setText( NetworkStatus::toString( status ) ); + m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) ); +} + +void TestClient::doConnect() +{ + Q_ASSERT( ConnectionManager::self()->status() == NetworkStatus::Online ); + if ( m_status != AppConnected ) { + appIsConnected(); + } +} + +void TestClient::doDisconnect() +{ + Q_ASSERT( ConnectionManager::self()->status() != NetworkStatus::Online ); + if ( m_status == AppConnected ) { + appDisconnected(); + } +} + +void TestClient::connectButtonClicked() +{ + kdDebug() << k_funcinfo << endl; + if ( m_status == AppDisconnected ) { + switch ( ConnectionManager::self()->status() ) + { + case NetworkStatus::NoNetworks: + case NetworkStatus::Online: + appIsConnected(); + break; + default: + appWaiting(); + break; + } + } + else if ( m_status == AppConnected || m_status == AppWaitingForConnect ) { + appDisconnected(); + } +} + +void TestClient::appWaiting() +{ + kdDebug() << k_funcinfo << endl; + //m_status = AppWaitingForConnect; + m_view->appStatusLabel->setText( "Waiting" ); +} + +void TestClient::appIsConnected() +{ + kdDebug() << k_funcinfo << endl; + m_view->connectButton->setEnabled( true ); + m_view->connectButton->setText( "Disconnect" ); + m_view->appStatusLabel->setText( "Connected" ); + m_status = AppConnected; +} + +void TestClient::appEstablishing() +{ + kdDebug() << k_funcinfo << endl; + m_view->netStatusLabel->setText( "Establishing" ); + m_view->connectButton->setEnabled( false ); +} + +void TestClient::appDisestablishing( ) +{ + kdDebug() << k_funcinfo << endl; + m_view->connectButton->setEnabled( false ); + m_view->appStatusLabel->setText( "Disconnected" ); +} + +void TestClient::appDisconnected( ) +{ + kdDebug() << k_funcinfo << endl; + m_view->connectButton->setEnabled( true ); + m_view->connectButton->setText( "Start Connect" ); + m_view->appStatusLabel->setText( "Disconnected" ); + m_status = AppDisconnected; +} + +QColor TestClient::toQColor( NetworkStatus::Status st ) +{ + QColor col; + switch ( st ) { + case NetworkStatus::NoNetworks: + col = Qt::darkGray; + break; + case NetworkStatus::Unreachable: + col = Qt::darkMagenta; + break; + case NetworkStatus::OfflineDisconnected: + col = Qt::blue; + break; + case NetworkStatus::OfflineFailed: + col = Qt::darkRed; + break; + case NetworkStatus::ShuttingDown: + col = Qt::darkYellow; + break; + case NetworkStatus::Offline: + col = Qt::blue; + break; + case NetworkStatus::Establishing: + col = Qt::yellow; + break; + case NetworkStatus::Online: + col = Qt::green; + break; + } + return col; +} +//main +static const char description[] = + I18N_NOOP("Test Client for Network Status kded module"); + +static const char version[] = "v0.1"; + +static KCmdLineOptions options[] = +{ + KCmdLineLastOption +}; + +int main(int argc, char **argv) +{ + KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); + about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); + KCmdLineArgs::init(argc, argv, &about); + KCmdLineArgs::addCmdLineOptions(options); + KApplication app; + + // register ourselves as a dcop client + app.dcopClient()->registerAs(app.name(), false); + + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + if (args->count() == 0) + { + TestClient *widget = new TestClient; + widget->show(); + } + else + { + int i = 0; + for (; i < args->count(); i++) + { + TestClient *widget = new TestClient; + widget->show(); + } + } + args->clear(); + + return app.exec(); +} + +#include "testclient2.moc" + Index: networkstatus/testclient2.h =================================================================== --- /dev/null +++ networkstatus/testclient2.h @@ -0,0 +1,82 @@ +/* This file is part of kdepim. + + Copyright (C) 2007 Will Stephenson + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef KTESTNETWORKSTATUS_H +#define KTESTNETWORKSTATUS_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +#include "networkstatusiface_stub.h" + +class TestClientView; + +/** + * Test client that uses a ConnectionManager to change its state + * + * @short Main window class + * @author Will Stephenson + * @version 0.1 + */ +class TestClient : public KMainWindow +{ +Q_OBJECT +public: + enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected }; + /** + * Default Constructor + */ + TestClient(); + + /** + * Default Destructor + */ + virtual ~TestClient(); + +private slots: + void networkStatusChanged( NetworkStatus::Status status ); + void connectButtonClicked(); + void doConnect(); + void doDisconnect(); +private: + void appWaiting(); + void appEstablishing(); + void appIsConnected(); + void appDisestablishing(); + void appDisconnected(); + static QColor toQColor( NetworkStatus::Status ); +private: + QHBox * m_layout; + NetworkStatusIface_stub *m_service; + TestClientView *m_view; + AppStatus m_status; // this represents the app's status not the network's status +}; + +#endif // KTESTNETWORKSTATUS_H + Index: networkstatus/testclient.cpp =================================================================== --- /dev/null +++ networkstatus/testclient.cpp @@ -0,0 +1,234 @@ +/* This file is part of kdepim. + Copyright (C) 2007 Will Stephenson + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 + as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include +#include + + +#include +#include +#include +#include +#include +#include +#include + +#include "connectionmanager.h" +#include "testclientview.h" +#include "testclient.h" + +TestClient::TestClient() + : KMainWindow( 0, "ktestnetworkstatus" ), + m_view(new TestClientView(this)), + m_status( AppDisconnected ) +{ + // tell the KMainWindow that this is indeed the main widget + setCentralWidget(m_view); + + networkStatusChanged( ConnectionManager::self()->status() ); + appDisconnected(); + + connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) ); + + connect( m_view->connectButton, SIGNAL( toggled( bool ) ), SLOT( connectButtonToggled( bool ) ) ); +} + +TestClient::~TestClient() +{ +} + +void TestClient::networkStatusChanged( NetworkStatus::Status status ) +{ + kdDebug() << k_funcinfo << endl; +//enum EnumStatus { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown +// , Offline, Establishing, Online }; + kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl; + m_view->netStatusLabel->setText( NetworkStatus::toString( status ) ); + m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) ); + switch ( status ) { + case NetworkStatus::NoNetworks: + break; + case NetworkStatus::Unreachable: + break; + case NetworkStatus::OfflineDisconnected: + break; + case NetworkStatus::OfflineFailed: + break; + case NetworkStatus::ShuttingDown: + if ( m_status == AppConnected ) { + appDisestablishing(); + } + break; + case NetworkStatus::Offline: + if ( m_status == AppConnected ) { + appDisconnected(); + } + break; + case NetworkStatus::Establishing: + if ( m_status == AppWaitingForConnect ) + appEstablishing(); + else if ( m_status == AppConnected ) + appDisconnected(); + break; + case NetworkStatus::Online: + if ( m_status == AppWaitingForConnect ) + appIsConnected(); + break; + default: + m_view->netStatusLabel->setText( "Unrecognised status code!" ); + } +} + +void TestClient::connectButtonToggled( bool on ) +{ + kdDebug() << k_funcinfo << endl; + if ( on && m_status == AppDisconnected ) { + switch ( ConnectionManager::self()->status() ) + { + case NetworkStatus::NoNetworks: + case NetworkStatus::Online: + appIsConnected(); + break; + default: + appWaiting(); + break; + } + } + else if ( !on && m_status == AppConnected ) { + appDisconnected(); + } +} + +void TestClient::appWaiting() +{ + kdDebug() << k_funcinfo << endl; + m_status = AppWaitingForConnect; + m_view->appStatusLabel->setText( "Waiting" ); +} + +void TestClient::appIsConnected() +{ + kdDebug() << k_funcinfo << endl; + m_view->connectButton->setEnabled( true ); + m_view->connectButton->setText( "Disconnect" ); + m_view->appStatusLabel->setText( "Connected" ); + m_status = AppConnected; +} + +void TestClient::appEstablishing() +{ + kdDebug() << k_funcinfo << endl; + m_view->netStatusLabel->setText( "Establishing" ); + m_view->connectButton->setEnabled( false ); +} + +void TestClient::appDisestablishing( ) +{ + kdDebug() << k_funcinfo << endl; + m_view->connectButton->setEnabled( false ); + m_view->appStatusLabel->setText( "Disconnected" ); +} + +void TestClient::appDisconnected( ) +{ + kdDebug() << k_funcinfo << endl; + m_view->connectButton->setEnabled( true ); + m_view->connectButton->setText( "Start Connect" ); + m_view->appStatusLabel->setText( "Disconnected" ); + m_status = AppDisconnected; +} + +QColor TestClient::toQColor( NetworkStatus::Status st ) +{ + QColor col; + switch ( st ) { + case NetworkStatus::NoNetworks: + col = Qt::darkGray; + break; + case NetworkStatus::Unreachable: + col = Qt::darkMagenta; + break; + case NetworkStatus::OfflineDisconnected: + col = Qt::blue; + break; + case NetworkStatus::OfflineFailed: + col = Qt::darkRed; + break; + case NetworkStatus::ShuttingDown: + col = Qt::darkYellow; + break; + case NetworkStatus::Offline: + col = Qt::blue; + break; + case NetworkStatus::Establishing: + col = Qt::yellow; + break; + case NetworkStatus::Online: + col = Qt::green; + break; + } + return col; +} +//main +static const char description[] = + I18N_NOOP("Test Client for Network Status kded module"); + +static const char version[] = "v0.1"; + +static KCmdLineOptions options[] = +{ + KCmdLineLastOption +}; + +int main(int argc, char **argv) +{ + KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); + about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); + KCmdLineArgs::init(argc, argv, &about); + KCmdLineArgs::addCmdLineOptions(options); + KApplication app; + + // register ourselves as a dcop client + app.dcopClient()->registerAs(app.name(), false); + + KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); + if (args->count() == 0) + { + TestClient *widget = new TestClient; + widget->show(); + } + else + { + int i = 0; + for (; i < args->count(); i++) + { + TestClient *widget = new TestClient; + widget->show(); + } + } + args->clear(); + + return app.exec(); +} + +#include "testclient.moc" + Index: networkstatus/testclient.h =================================================================== --- /dev/null +++ networkstatus/testclient.h @@ -0,0 +1,80 @@ +/* This file is part of kdepim. + + Copyright (C) 2007 Will Stephenson + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef KTESTNETWORKSTATUS_H +#define KTESTNETWORKSTATUS_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include + +#include "networkstatusiface_stub.h" + +class TestClientView; + +/** + * This class serves as the main window for ktestnetworkstatus. It handles the + * menus, toolbars, and status bars. + * + * @short Main window class + * @author Will Stephenson + * @version 0.1 + */ +class TestClient : public KMainWindow +{ +Q_OBJECT +public: + enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected }; + /** + * Default Constructor + */ + TestClient(); + + /** + * Default Destructor + */ + virtual ~TestClient(); + +private slots: + void networkStatusChanged( NetworkStatus::Status status ); + void connectButtonToggled( bool on ); +private: + void appWaiting(); + void appEstablishing(); + void appIsConnected(); + void appDisestablishing(); + void appDisconnected(); + static QColor toQColor( NetworkStatus::Status ); +private: + NetworkStatusIface_stub *m_service; + TestClientView *m_view; + AppStatus m_status; // this represents the app's status not the network's status +}; + +#endif // KTESTNETWORKSTATUS_H + Index: networkstatus/testclientview.ui =================================================================== --- /dev/null +++ networkstatus/testclientview.ui @@ -0,0 +1,177 @@ + +TestClientView + + + TestClientView + + + + 0 + 0 + 356 + 127 + + + + Form1 + + + + unnamed + + + + textLabel4 + + + + 5 + 5 + 0 + 0 + + + + <font size="+2"><b>Client for KDE 3 Offline Mode</b></font> + + + AlignVCenter + + + + + layout1 + + + + unnamed + + + + textLabel1 + + + Network status: + + + + + netStatusLabel + + + + 0 + 255 + 0 + + + + Panel + + + STATUS + + + AlignCenter + + + + + + + layout1_2 + + + + unnamed + + + + textLabel1_2 + + + App status: + + + + + appStatusLabel + + + + 0 + 255 + 0 + + + + Panel + + + STATUS + + + AlignCenter + + + + + + + layout2 + + + + unnamed + + + + spacer1 + + + Horizontal + + + Expanding + + + + 31 + 20 + + + + + + connectButton + + + Start Connect + + + false + + + + + spacer2 + + + Horizontal + + + Expanding + + + + 61 + 20 + + + + + + + + + Index: networkstatus/testservice.cpp =================================================================== --- /dev/null +++ networkstatus/testservice.cpp @@ -0,0 +1,219 @@ +/* This file is part of kdepim. + Copyright (C) 2005,2007 Will Stephenson + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 + as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "testservice.h" +#include "testserviceview.h" +#include "networkstatusiface_stub.h" + +TestService::TestService() : KMainWindow( 0, "testservice" ), + m_service( new NetworkStatusIface_stub( "kded", "networkstatus" ) ), + m_status ( NetworkStatus::Offline ), + m_nextStatus( NetworkStatus::OfflineDisconnected ), + m_view( new TestServiceView( this ) ) +{ + setCentralWidget( m_view ); + kapp->dcopClient()->registerAs("testservice" ); + + connect( m_view->changeCombo, SIGNAL( activated( int ) ), SLOT( changeComboActivated( int ) ) ); + connect( m_view->changeButton, SIGNAL( clicked() ), SLOT( changeButtonClicked() ) ); + + connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ), this, SLOT( registeredToDCOP( const QCString& ) ) ); + kapp->dcopClient()->setNotifications( true ); + + m_view->statusLabel->setText( NetworkStatus::toString( m_status ) ); + m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) ); + setCaption( NetworkStatus::toString( m_status ) ); + + registerService(); +} + +TestService::~TestService() +{ + delete m_service; + delete m_view; +} + +void TestService::registerService() +{ + NetworkStatus::Properties nsp; + nsp.name = "test_net"; + nsp.service = kapp->dcopClient()->appId(); + nsp.status = m_status; + m_service->registerNetwork( nsp ); +} + +void TestService::registeredToDCOP( const QCString & appId ) +{ + if ( appId == "kded" ) + registerService(); +} + +int TestService::status( const QString & network ) +{ + Q_UNUSED( network ); + return (int)m_status; +} + +void TestService::changeComboActivated( int index ) +{ + switch ( index ) { + case 0 /*NetworkStatus::OfflineDisconnected*/: + m_nextStatus = NetworkStatus::OfflineDisconnected; + break; + case 1 /*NetworkStatus::OfflineFailed*/: + m_nextStatus = NetworkStatus::OfflineFailed; + break; + case 2 /*NetworkStatus::ShuttingDown*/: + m_nextStatus = NetworkStatus::ShuttingDown; + break; + case 3 /*NetworkStatus::Offline*/: + m_nextStatus = NetworkStatus::Offline; + break; + case 4 /*NetworkStatus::Establishing*/: + m_nextStatus = NetworkStatus::Establishing; + break; + case 5 /*NetworkStatus::Online*/: + m_nextStatus = NetworkStatus::Online; + break; + default: + kdDebug() << "Unrecognised status!" << endl; + Q_ASSERT( false ); + } + m_view->changeButton->setEnabled( true ); +} + +void TestService::changeButtonClicked() +{ + m_view->changeButton->setEnabled( false ); + m_status = m_nextStatus; + m_service->setNetworkStatus( "test_net", ( int )m_status ); + m_view->statusLabel->setText( NetworkStatus::toString( m_status ) ); + m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) ); + setCaption( NetworkStatus::toString( m_status ) ); +} + +int TestService::establish( const QString & network ) +{ + Q_UNUSED( network ); + m_status = NetworkStatus::Establishing; + m_service->setNetworkStatus( "test_net", (int)m_status ); + m_nextStatus = NetworkStatus::Online; + QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) ); + return (int)NetworkStatus::RequestAccepted; +} + +int TestService::shutdown( const QString & network ) +{ + Q_UNUSED( network ); + m_status = NetworkStatus::ShuttingDown; + m_service->setNetworkStatus( "test_net", (int)m_status ); + m_nextStatus = NetworkStatus::Offline; + QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) ); + return (int)NetworkStatus::RequestAccepted; +} + +void TestService::simulateFailure() +{ + m_status = NetworkStatus::OfflineFailed; + m_service->setNetworkStatus( "test_net", (int)m_status ); +} + +void TestService::simulateDisconnect() +{ + m_status = NetworkStatus::OfflineDisconnected; + m_service->setNetworkStatus( "test_net", (int)m_status ); +} + +void TestService::slotStatusChange() +{ + m_status = m_nextStatus; + m_service->setNetworkStatus( "test_net", (int)m_status ); +} + +QColor TestService::toQColor( NetworkStatus::Status st ) +{ + QColor col; + switch ( st ) { + case NetworkStatus::NoNetworks: + col = Qt::darkGray; + break; + case NetworkStatus::Unreachable: + col = Qt::darkMagenta; + break; + case NetworkStatus::OfflineDisconnected: + col = Qt::blue; + break; + case NetworkStatus::OfflineFailed: + col = Qt::darkRed; + break; + case NetworkStatus::ShuttingDown: + col = Qt::darkYellow; + break; + case NetworkStatus::Offline: + col = Qt::blue; + break; + case NetworkStatus::Establishing: + col = Qt::yellow; + break; + case NetworkStatus::Online: + col = Qt::green; + break; + } + return col; +} + +static const char description[] = + I18N_NOOP("Test Service for Network Status kded module"); + +static const char version[] = "v0.1"; + +static KCmdLineOptions options[] = +{ + KCmdLineLastOption +}; + +int main( int argc, char** argv ) +{ + KAboutData about("KNetworkStatusTestService", I18N_NOOP("knetworkstatustestservice"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); + about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); + KCmdLineArgs::init(argc, argv, &about); + KCmdLineArgs::addCmdLineOptions(options); + KApplication app; + + TestService * test = new TestService; + test->show(); + return app.exec(); +} + +#include "testservice.moc" Index: networkstatus/testservice.h =================================================================== --- /dev/null +++ networkstatus/testservice.h @@ -0,0 +1,60 @@ +/* This file is part of kdepim. + + Copyright (C) 2005,2007 Will Stephenson + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#ifndef _TEST_NETWORKSTATUS_SERVICE_H +#define _TEST_NETWORKSTATUS_SERVICE_H + +#include + +#include "networkstatuscommon.h" + +class NetworkStatusIface_stub; +class TestServiceView; + +class TestService : public KMainWindow { +Q_OBJECT +public: + TestService(); + virtual ~TestService(); + int status( const QString & network ); + int establish( const QString & network ); + int shutdown( const QString & network ); + void simulateFailure(); + void simulateDisconnect(); +protected slots: + void changeComboActivated( int index ); + void registeredToDCOP( const QCString& appId ); + + void changeButtonClicked(); + + void slotStatusChange(); +private: + void registerService(); + static QColor toQColor( NetworkStatus::Status ); + NetworkStatusIface_stub * m_service; + NetworkStatus::Status m_status; + NetworkStatus::Status m_nextStatus; + TestServiceView * m_view; +}; + +#endif Index: networkstatus/testserviceview.ui =================================================================== --- /dev/null +++ networkstatus/testserviceview.ui @@ -0,0 +1,181 @@ + +TestServiceView + + + TestServiceView + + + + 0 + 0 + 367 + 132 + + + + Form1 + + + + unnamed + + + + textLabel4 + + + <font size="+2"><b>Service for KDE 3 Offline Mode</b></font> + + + AlignVCenter + + + + + layout2 + + + + unnamed + + + + textLabel1 + + + Status: + + + + + statusLabel + + + + 0 + 255 + 0 + + + + StyledPanel + + + STATUS + + + AlignCenter + + + + + + + layout3 + + + + unnamed + + + + textLabel3 + + + Change to: + + + + + + Offline Disconnected + + + + + Offline Failed + + + + + Shutting Down + + + + + Offline + + + + + Establishing + + + + + Online + + + + changeCombo + + + + + + + layout1 + + + + unnamed + + + + spacer1 + + + Horizontal + + + Expanding + + + + 51 + 20 + + + + + + changeButton + + + Do change + + + + + spacer2 + + + Horizontal + + + Expanding + + + + 41 + 20 + + + + + + + + + +