summaryrefslogtreecommitdiffstats
path: root/opensuse/core/tdelibs/networkstatus.diff
diff options
context:
space:
mode:
Diffstat (limited to 'opensuse/core/tdelibs/networkstatus.diff')
-rw-r--r--opensuse/core/tdelibs/networkstatus.diff6006
1 files changed, 6006 insertions, 0 deletions
diff --git a/opensuse/core/tdelibs/networkstatus.diff b/opensuse/core/tdelibs/networkstatus.diff
new file mode 100644
index 000000000..d7b4e8c89
--- /dev/null
+++ b/opensuse/core/tdelibs/networkstatus.diff
@@ -0,0 +1,6006 @@
+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 <wstephenson@kde.org>
++
++ 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 <kapplication.h>
++#include <kdebug.h>
++#include <kstaticdeleter.h>
++
++#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<ConnectionManager> 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 <wstephenson@kde.org>
++
++ 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 <dcopobject.h>
++#include <kdemacros.h>
++
++#include <networkstatuscommon.h>
++
++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 <wstephenson@kde.org>
++
++ 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 <qobject.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <kdebug.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <wstephenson@kde.org>
++
++ 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 <wstephenson@kde.org>
++
++ 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 <qstringlist.h>
++
++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 <wstephenson@kde.org>
++
++ 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 <qmap.h>
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kdebug.h>
++
++#include "network.h"
++#include <kdemacros.h>
++
++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 <wstephenson@kde.org>
++
++ 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 <kdedmodule.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <dcopobject.h>
++#include <qstringlist.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <qlabel.h>
++#include <qtooltip.h>
++#include <kiconloader.h>
++#include <klocale.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <qhbox.h>
++#include <kdemacros.h>
++#include <networkstatuscommon.h>
++
++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 @@
++<?xml version = '1.0'?>
++<kdevelop>
++ <general>
++ <author>Will Stephenson</author>
++ <email>wstephenson@suse.de</email>
++ <version>$VERSION$</version>
++ <projectmanagement>KDevKDEAutoProject</projectmanagement>
++ <primarylanguage>C++</primarylanguage>
++ <keywords>
++ <keyword>Qt</keyword>
++ <keyword>KDE</keyword>
++ </keywords>
++ </general>
++ <kdevfileview>
++ <groups>
++ <group pattern="*.cpp;*.cxx;*.h" name="Sources" />
++ <group pattern="*.ui" name="User Interface" />
++ <group pattern="*.png" name="Icons" />
++ <group pattern="*.po;*.ts" name="Translations" />
++ <group pattern="*" name="Others" />
++ <hidenonprojectfiles>false</hidenonprojectfiles>
++ <hidenonlocation>false</hidenonlocation>
++ </groups>
++ <tree>
++ <hidepatterns>*.o,*.lo,CVS</hidepatterns>
++ <hidenonprojectfiles>false</hidenonprojectfiles>
++ </tree>
++ </kdevfileview>
++ <kdevdoctreeview>
++ <ignoretocs>
++ <toc>ada</toc>
++ <toc>ada_bugs_gcc</toc>
++ <toc>bash</toc>
++ <toc>bash_bugs</toc>
++ <toc>clanlib</toc>
++ <toc>fortran_bugs_gcc</toc>
++ <toc>gnome1</toc>
++ <toc>gnustep</toc>
++ <toc>gtk</toc>
++ <toc>gtk_bugs</toc>
++ <toc>haskell</toc>
++ <toc>haskell_bugs_ghc</toc>
++ <toc>java_bugs_gcc</toc>
++ <toc>java_bugs_sun</toc>
++ <toc>opengl</toc>
++ <toc>pascal_bugs_fp</toc>
++ <toc>php</toc>
++ <toc>php_bugs</toc>
++ <toc>perl</toc>
++ <toc>perl_bugs</toc>
++ <toc>python</toc>
++ <toc>python_bugs</toc>
++ <toc>ruby</toc>
++ <toc>ruby_bugs</toc>
++ <toc>sdl</toc>
++ <toc>stl</toc>
++ <toc>sw</toc>
++ <toc>w3c-dom-level2-html</toc>
++ <toc>w3c-svg</toc>
++ <toc>w3c-uaag10</toc>
++ <toc>wxwidgets_bugs</toc>
++ </ignoretocs>
++ <ignoreqt_xml>
++ <toc>qmake User Guide</toc>
++ </ignoreqt_xml>
++ </kdevdoctreeview>
++ <kdevdebugger>
++ <general>
++ <dbgshell>libtool</dbgshell>
++ </general>
++ </kdevdebugger>
++ <kdevfilecreate>
++ <useglobaltypes>
++ <type ext="ui" />
++ <type ext="cpp" />
++ <type ext="h" />
++ </useglobaltypes>
++ </kdevfilecreate>
++ <kdevautoproject>
++ <make>
++ <envvars>
++ <envvar value="1" name="WANT_AUTOCONF_2_5" />
++ <envvar value="1" name="WANT_AUTOMAKE_1_6" />
++ </envvars>
++ </make>
++ <run>
++ <directoryradio>executable</directoryradio>
++ </run>
++ <general>
++ <activetarget>kded_networkstatus.la</activetarget>
++ </general>
++ </kdevautoproject>
++ <kdevcppsupport>
++ <references/>
++ <codecompletion>
++ <includeGlobalFunctions>true</includeGlobalFunctions>
++ <includeTypes>true</includeTypes>
++ <includeEnums>true</includeEnums>
++ <includeTypedefs>false</includeTypedefs>
++ <automaticCodeCompletion>true</automaticCodeCompletion>
++ <automaticArgumentsHint>true</automaticArgumentsHint>
++ <automaticHeaderCompletion>true</automaticHeaderCompletion>
++ <codeCompletionDelay>250</codeCompletionDelay>
++ <argumentsHintDelay>400</argumentsHintDelay>
++ <headerCompletionDelay>250</headerCompletionDelay>
++ </codecompletion>
++ </kdevcppsupport>
++</kdevelop>
+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 <wstephenson@kde.org>
++
++ 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 <kapplication.h>
++#include <kdebug.h>
++#include <kstaticdeleter.h>
++
++#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<ConnectionManager> 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 <wstephenson@kde.org>
++
++ 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 <dcopobject.h>
++#include <kdemacros.h>
++
++#include <networkstatuscommon.h>
++
++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 <wstephenson@kde.org>
++
++ 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 <qobject.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <kdebug.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <wstephenson@kde.org>
++
++ 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 <wstephenson@kde.org>
++
++ 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 <qstringlist.h>
++
++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 <wstephenson@kde.org>
++
++ 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 <qmap.h>
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kdebug.h>
++
++#include "network.h"
++#include <kdepimmacros.h>
++
++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 <wstephenson@kde.org>
++
++ 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 <kdedmodule.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <dcopobject.h>
++#include <qstringlist.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <qlabel.h>
++#include <qtooltip.h>
++#include <kiconloader.h>
++#include <klocale.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <qhbox.h>
++#include <kdemacros.h>
++#include <networkstatuscommon.h>
++
++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 @@
++<?xml version = '1.0'?>
++<kdevelop>
++ <general>
++ <author>Will Stephenson</author>
++ <email>wstephenson@suse.de</email>
++ <version>$VERSION$</version>
++ <projectmanagement>KDevKDEAutoProject</projectmanagement>
++ <primarylanguage>C++</primarylanguage>
++ <keywords>
++ <keyword>Qt</keyword>
++ <keyword>KDE</keyword>
++ </keywords>
++ </general>
++ <kdevfileview>
++ <groups>
++ <group pattern="*.cpp;*.cxx;*.h" name="Sources" />
++ <group pattern="*.ui" name="User Interface" />
++ <group pattern="*.png" name="Icons" />
++ <group pattern="*.po;*.ts" name="Translations" />
++ <group pattern="*" name="Others" />
++ <hidenonprojectfiles>false</hidenonprojectfiles>
++ <hidenonlocation>false</hidenonlocation>
++ </groups>
++ <tree>
++ <hidepatterns>*.o,*.lo,CVS</hidepatterns>
++ <hidenonprojectfiles>false</hidenonprojectfiles>
++ </tree>
++ </kdevfileview>
++ <kdevdoctreeview>
++ <ignoretocs>
++ <toc>ada</toc>
++ <toc>ada_bugs_gcc</toc>
++ <toc>bash</toc>
++ <toc>bash_bugs</toc>
++ <toc>clanlib</toc>
++ <toc>fortran_bugs_gcc</toc>
++ <toc>gnome1</toc>
++ <toc>gnustep</toc>
++ <toc>gtk</toc>
++ <toc>gtk_bugs</toc>
++ <toc>haskell</toc>
++ <toc>haskell_bugs_ghc</toc>
++ <toc>java_bugs_gcc</toc>
++ <toc>java_bugs_sun</toc>
++ <toc>opengl</toc>
++ <toc>pascal_bugs_fp</toc>
++ <toc>php</toc>
++ <toc>php_bugs</toc>
++ <toc>perl</toc>
++ <toc>perl_bugs</toc>
++ <toc>python</toc>
++ <toc>python_bugs</toc>
++ <toc>ruby</toc>
++ <toc>ruby_bugs</toc>
++ <toc>sdl</toc>
++ <toc>stl</toc>
++ <toc>sw</toc>
++ <toc>w3c-dom-level2-html</toc>
++ <toc>w3c-svg</toc>
++ <toc>w3c-uaag10</toc>
++ <toc>wxwidgets_bugs</toc>
++ </ignoretocs>
++ <ignoreqt_xml>
++ <toc>qmake User Guide</toc>
++ </ignoreqt_xml>
++ </kdevdoctreeview>
++ <kdevdebugger>
++ <general>
++ <dbgshell>libtool</dbgshell>
++ </general>
++ </kdevdebugger>
++ <kdevfilecreate>
++ <useglobaltypes>
++ <type ext="ui" />
++ <type ext="cpp" />
++ <type ext="h" />
++ </useglobaltypes>
++ </kdevfilecreate>
++ <kdevautoproject>
++ <make>
++ <envvars>
++ <envvar value="1" name="WANT_AUTOCONF_2_5" />
++ <envvar value="1" name="WANT_AUTOMAKE_1_6" />
++ </envvars>
++ </make>
++ <run>
++ <directoryradio>executable</directoryradio>
++ </run>
++ <general>
++ <activetarget>kded_networkstatus.la</activetarget>
++ </general>
++ </kdevautoproject>
++ <kdevcppsupport>
++ <references/>
++ <codecompletion>
++ <includeGlobalFunctions>true</includeGlobalFunctions>
++ <includeTypes>true</includeTypes>
++ <includeEnums>true</includeEnums>
++ <includeTypedefs>false</includeTypedefs>
++ <automaticCodeCompletion>true</automaticCodeCompletion>
++ <automaticArgumentsHint>true</automaticArgumentsHint>
++ <automaticHeaderCompletion>true</automaticHeaderCompletion>
++ <codeCompletionDelay>250</codeCompletionDelay>
++ <argumentsHintDelay>400</argumentsHintDelay>
++ <headerCompletionDelay>250</headerCompletionDelay>
++ </codecompletion>
++ </kdevcppsupport>
++</kdevelop>
+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 <wstephenson@kde.org>
++
++ 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 <qlabel.h>
++#include <qpushbutton.h>
++#include <qvbox.h>
++
++#include <kaboutdata.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <kdeversion.h>
++#include <kglobal.h>
++#include <klocale.h>
++#include <kiconloader.h>
++
++#include <connectionmanager.h>
++#include <networkstatusindicator.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <config.h>
++#endif
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kmainwindow.h>
++#include <networkstatuscommon.h>
++
++#include "networkstatusiface_stub.h"
++
++class TestClientView;
++
++/**
++ * Test client that uses a ConnectionManager to change its state
++ *
++ * @short Main window class
++ * @author Will Stephenson <wstephenson@kde.org>
++ * @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 <wstephenson@kde.org>
++
++ 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 <qlabel.h>
++#include <qpushbutton.h>
++
++
++#include <kaboutdata.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <kdeversion.h>
++#include <kglobal.h>
++#include <klocale.h>
++#include <kiconloader.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <config.h>
++#endif
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kmainwindow.h>
++#include <networkstatuscommon.h>
++
++#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 <wstephenson@kde.org>
++ * @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 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>TestClientView</class>
++<widget class="QWidget">
++ <property name="name">
++ <cstring>TestClientView</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>356</width>
++ <height>127</height>
++ </rect>
++ </property>
++ <property name="caption">
++ <string>Form1</string>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel4</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>5</hsizetype>
++ <vsizetype>5</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>&lt;font size="+2"&gt;&lt;b&gt;Client for KDE 3 Offline Mode&lt;/b&gt;&lt;/font&gt;</string>
++ </property>
++ <property name="alignment">
++ <set>AlignVCenter</set>
++ </property>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1</cstring>
++ </property>
++ <property name="text">
++ <string>Network status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>netStatusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>Panel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1_2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1_2</cstring>
++ </property>
++ <property name="text">
++ <string>App status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>appStatusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>Panel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <spacer>
++ <property name="name">
++ <cstring>spacer1</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>31</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QPushButton">
++ <property name="name">
++ <cstring>connectButton</cstring>
++ </property>
++ <property name="text">
++ <string>Start Connect</string>
++ </property>
++ <property name="toggleButton">
++ <bool>false</bool>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>61</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ </vbox>
++</widget>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>
+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 <wstephenson@kde.org>
++
++ 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 <qcombobox.h>
++#include <qlabel.h>
++#include <qpushbutton.h>
++#include <qtimer.h>
++
++#include <dcopclient.h>
++#include <kaboutdata.h>
++#include <kapplication.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <klocale.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <kmainwindow.h>
++
++#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 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>TestServiceView</class>
++<widget class="QWidget">
++ <property name="name">
++ <cstring>TestServiceView</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>367</width>
++ <height>132</height>
++ </rect>
++ </property>
++ <property name="caption">
++ <string>Form1</string>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel4</cstring>
++ </property>
++ <property name="text">
++ <string>&lt;font size="+2"&gt;&lt;b&gt;Service for KDE 3 Offline Mode&lt;/b&gt;&lt;/font&gt;</string>
++ </property>
++ <property name="alignment">
++ <set>AlignVCenter</set>
++ </property>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1</cstring>
++ </property>
++ <property name="text">
++ <string>Status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>statusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>StyledPanel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout3</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel3</cstring>
++ </property>
++ <property name="text">
++ <string>Change to:</string>
++ </property>
++ </widget>
++ <widget class="QComboBox">
++ <item>
++ <property name="text">
++ <string>Offline Disconnected</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Offline Failed</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Shutting Down</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Offline</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Establishing</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Online</string>
++ </property>
++ </item>
++ <property name="name">
++ <cstring>changeCombo</cstring>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <spacer>
++ <property name="name">
++ <cstring>spacer1</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>51</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QPushButton">
++ <property name="name">
++ <cstring>changeButton</cstring>
++ </property>
++ <property name="text">
++ <string>Do change</string>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>41</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ </vbox>
++</widget>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>
++
+Index: networkstatus/testclient2.cpp
+===================================================================
+--- /dev/null
++++ networkstatus/testclient2.cpp
+@@ -0,0 +1,222 @@
++/* This file is part of kdepim.
++ Copyright (C) 2007 Will Stephenson <wstephenson@kde.org>
++
++ 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 <qlabel.h>
++#include <qpushbutton.h>
++#include <qvbox.h>
++
++#include <kaboutdata.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <kdeversion.h>
++#include <kglobal.h>
++#include <klocale.h>
++#include <kiconloader.h>
++
++#include <connectionmanager.h>
++#include <networkstatusindicator.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <config.h>
++#endif
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kmainwindow.h>
++#include <networkstatuscommon.h>
++
++#include "networkstatusiface_stub.h"
++
++class TestClientView;
++
++/**
++ * Test client that uses a ConnectionManager to change its state
++ *
++ * @short Main window class
++ * @author Will Stephenson <wstephenson@kde.org>
++ * @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 <wstephenson@kde.org>
++
++ 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 <qlabel.h>
++#include <qpushbutton.h>
++
++
++#include <kaboutdata.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <kdeversion.h>
++#include <kglobal.h>
++#include <klocale.h>
++#include <kiconloader.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <config.h>
++#endif
++
++#include <dcopclient.h>
++#include <kapplication.h>
++#include <kmainwindow.h>
++#include <networkstatuscommon.h>
++
++#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 <wstephenson@kde.org>
++ * @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 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>TestClientView</class>
++<widget class="QWidget">
++ <property name="name">
++ <cstring>TestClientView</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>356</width>
++ <height>127</height>
++ </rect>
++ </property>
++ <property name="caption">
++ <string>Form1</string>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel4</cstring>
++ </property>
++ <property name="sizePolicy">
++ <sizepolicy>
++ <hsizetype>5</hsizetype>
++ <vsizetype>5</vsizetype>
++ <horstretch>0</horstretch>
++ <verstretch>0</verstretch>
++ </sizepolicy>
++ </property>
++ <property name="text">
++ <string>&lt;font size="+2"&gt;&lt;b&gt;Client for KDE 3 Offline Mode&lt;/b&gt;&lt;/font&gt;</string>
++ </property>
++ <property name="alignment">
++ <set>AlignVCenter</set>
++ </property>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1</cstring>
++ </property>
++ <property name="text">
++ <string>Network status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>netStatusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>Panel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1_2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1_2</cstring>
++ </property>
++ <property name="text">
++ <string>App status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>appStatusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>Panel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <spacer>
++ <property name="name">
++ <cstring>spacer1</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>31</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QPushButton">
++ <property name="name">
++ <cstring>connectButton</cstring>
++ </property>
++ <property name="text">
++ <string>Start Connect</string>
++ </property>
++ <property name="toggleButton">
++ <bool>false</bool>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>61</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ </vbox>
++</widget>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>
+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 <wstephenson@kde.org>
++
++ 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 <qcombobox.h>
++#include <qlabel.h>
++#include <qpushbutton.h>
++#include <qtimer.h>
++
++#include <dcopclient.h>
++#include <kaboutdata.h>
++#include <kapplication.h>
++#include <kcmdlineargs.h>
++#include <kdebug.h>
++#include <klocale.h>
++
++#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 <wstephenson@kde.org>
++
++ 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 <kmainwindow.h>
++
++#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 @@
++<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
++<class>TestServiceView</class>
++<widget class="QWidget">
++ <property name="name">
++ <cstring>TestServiceView</cstring>
++ </property>
++ <property name="geometry">
++ <rect>
++ <x>0</x>
++ <y>0</y>
++ <width>367</width>
++ <height>132</height>
++ </rect>
++ </property>
++ <property name="caption">
++ <string>Form1</string>
++ </property>
++ <vbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel4</cstring>
++ </property>
++ <property name="text">
++ <string>&lt;font size="+2"&gt;&lt;b&gt;Service for KDE 3 Offline Mode&lt;/b&gt;&lt;/font&gt;</string>
++ </property>
++ <property name="alignment">
++ <set>AlignVCenter</set>
++ </property>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout2</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel1</cstring>
++ </property>
++ <property name="text">
++ <string>Status:</string>
++ </property>
++ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>statusLabel</cstring>
++ </property>
++ <property name="paletteBackgroundColor">
++ <color>
++ <red>0</red>
++ <green>255</green>
++ <blue>0</blue>
++ </color>
++ </property>
++ <property name="frameShape">
++ <enum>StyledPanel</enum>
++ </property>
++ <property name="text">
++ <string>STATUS</string>
++ </property>
++ <property name="alignment">
++ <set>AlignCenter</set>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout3</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>textLabel3</cstring>
++ </property>
++ <property name="text">
++ <string>Change to:</string>
++ </property>
++ </widget>
++ <widget class="QComboBox">
++ <item>
++ <property name="text">
++ <string>Offline Disconnected</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Offline Failed</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Shutting Down</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Offline</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Establishing</string>
++ </property>
++ </item>
++ <item>
++ <property name="text">
++ <string>Online</string>
++ </property>
++ </item>
++ <property name="name">
++ <cstring>changeCombo</cstring>
++ </property>
++ </widget>
++ </hbox>
++ </widget>
++ <widget class="QLayoutWidget">
++ <property name="name">
++ <cstring>layout1</cstring>
++ </property>
++ <hbox>
++ <property name="name">
++ <cstring>unnamed</cstring>
++ </property>
++ <spacer>
++ <property name="name">
++ <cstring>spacer1</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>51</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ <widget class="QPushButton">
++ <property name="name">
++ <cstring>changeButton</cstring>
++ </property>
++ <property name="text">
++ <string>Do change</string>
++ </property>
++ </widget>
++ <spacer>
++ <property name="name">
++ <cstring>spacer2</cstring>
++ </property>
++ <property name="orientation">
++ <enum>Horizontal</enum>
++ </property>
++ <property name="sizeType">
++ <enum>Expanding</enum>
++ </property>
++ <property name="sizeHint">
++ <size>
++ <width>41</width>
++ <height>20</height>
++ </size>
++ </property>
++ </spacer>
++ </hbox>
++ </widget>
++ </vbox>
++</widget>
++<layoutdefaults spacing="6" margin="11"/>
++</UI>
++