Added networkstatus service from pim to core for use in other network enabled applications

git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1171617 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
v3.5.13-sru
tpearson 15 years ago
parent 84ae8923df
commit af20635a2b

@ -2,44 +2,36 @@
METASOURCES = AUTO METASOURCES = AUTO
INCLUDES = -I$(top_srcdir)/kded -I$(top_srcdir) $(all_includes)
kde_module_LTLIBRARIES = kded_networkstatus.la 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 lib_LTLIBRARIES = libnetworkstatus.la libconnectionmanager.la
libnetworkstatus_la_LIBADD = $(LIB_KDECORE) libnetworkstatus_la_LIBADD = $(LIB_KDECORE)
libnetworkstatus_la_LDFLAGS = $(all_libraries) libnetworkstatus_la_LDFLAGS = $(all_libraries)
libnetworkstatus_la_SOURCES = networkstatuscommon.cpp libnetworkstatus_la_SOURCES = networkstatuscommon.cpp
libconnectionmanager_la_LIBADD = $(LIB_KDECORE) libnetworkstatus.la libconnectionmanager_la_LIBADD = $(LIB_KDECORE)
libconnectionmanager_la_LDFLAGS = $(all_libraries) libconnectionmanager_la_LDFLAGS = $(all_libraries)
libconnectionmanager_la_SOURCES = connectionmanager.cpp connectionmanager_p.cpp networkstatusindicator.cpp connectionmanager.skel networkstatusiface.stub libconnectionmanager_la_SOURCES = connectionmanager.cpp connectionmanager.skel clientiface.stub
INCLUDES = $(all_includes)
kded_networkstatus_la_SOURCES = networkstatus.cpp networkstatus.skel \
clientiface.skel serviceiface.skel network.cpp
#kclientiface.skel serviceiface.skel
kded_networkstatus_la_LIBADD = $(LIB_KDECORE) $(LIB_KIO) ./libnetworkstatus.la
kded_networkstatus_la_LDFLAGS = $(all_libraries) -module -avoid-version
noinst_PROGRAMS = networkstatustestservice networkstatustestclient managedconnectiontestclient servicesdir = $(kde_servicesdir)/kded
services_DATA = networkstatus.desktop
networkstatustestservice_LDFLAGS = $(all_libraries) noinst_HEADERS = serviceifaceimpl.h \
networkstatustestservice_LDADD = $(LIB_KFILE) libnetworkstatus.la network.h clientifaceimpl.h testservice.h connectionmanager.h
networkstatustestservice_SOURCES = testservice.cpp testserviceview.ui networkstatusiface.stub
networkstatustestclient_LDFLAGS = $(all_libraries) include_HEADERS = serviceiface.h provideriface.h networkstatuscommon.h
networkstatustestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la
networkstatustestclient_SOURCES = testclient.cpp testclientview.ui
managedconnectiontestclient_LDFLAGS = $(all_libraries) bin_PROGRAMS = networkstatustestservice
managedconnectiontestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la
managedconnectiontestclient_SOURCES = testclient2.cpp testclientview.ui
noinst_HEADERS = network.h testservice.h testclient.h networkstatustestservice_LDFLAGS = $(all_libraries)
networkstatustestservice_LDADD = libnetworkstatus.la
include_HEADERS = networkstatuscommon.h connectionmanager.h networkstatusindicator.h \ networkstatustestservice_SOURCES = testservice.cpp provideriface.skel serviceiface.stub
networkstatusiface.h

@ -0,0 +1,77 @@
/*
This file is part of kdepim.
Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
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; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KDED_NETWORKSTATUS_CLIENTIFACE_H
#define KDED_NETWORKSTATUS_CLIENTIFACE_H
#include "networkstatuscommon.h"
#include <dcopobject.h>
class ClientIface : virtual public DCOPObject
{
K_DCOP
k_dcop:
/** Get the set of networks that the daemon is aware of. Mostly for debug */
virtual TQStringList networks() = 0;
/**
* Get the status of the connection to the given host.
* @param host
* @return a NetworkStatus::EnumStatus representing the state of the connection to the given host
*/
virtual int status( const TQString & host) = 0;
/**
* Request a connection to the named host, registering the application's usage of this connection
* @param host The hostname the client wants to connect to.
* @param userInitiated Indicates whether the connection is a direct result of a user action or is a background task. Used by the daemon to decide whether to create an on-demand connection.
* @return An NetworkStatus::EnumRequestResult indicating whether the request was accepted
*/
virtual int request( const TQString & host, bool userInitiated ) = 0;
/**
* Indicate that a previously registered connection to the given host is no longer needed by this client
* @param host The hostname being relinquished.
*/
virtual void relinquish( const TQString & host ) = 0;
/**
* Indicate that a communication failure has occurred for a given host
* @param host The hostname for which the failure occurred.
* @return True indicates the caller should try again to lookup the host, as the daemon has another IP address available.
*/
virtual bool reportFailure( const TQString & host ) = 0;
/**
* Utility method to check the daemon's status
*/
k_dcop_signals:
/**
* A status change occurred for the network(s) used to connect to the given host.
* @param host The host which the application has indicated it is using
* @param status The new status of the network used to reach host.
*/
void statusChange( TQString host, int status );
/**
* The network would like to shut down - any clients using this host are to finish using it immediately and call
* relinquish() when done.
* @param host The host, registered as in use by applications, which is about to be disconnected.
*/
void shutdownRequested( TQString host );
};
#endif

@ -0,0 +1,51 @@
/*
This file is part of kdepim.
Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
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; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "clientifaceimpl.h"
ClientIfaceImpl::ClientIfaceImpl( NetworkStatusModule * module ) : m_module ( module )
{
}
int ClientIfaceImpl::status( TQString host )
{
return m_module->status( host );
}
int ClientIfaceImpl::request( TQString host, bool userInitiated )
{
return m_module->request( host, userInitiated );
}
void ClientIfaceImpl::relinquish( TQString host )
{
m_module->relinquish( host );
}
bool ClientIfaceImpl::reportFailure( TQString host )
{
return m_module->reportFailure( host );
}
// TQString ClientIfaceImpl::statusAsString()
// {
//
// }

@ -0,0 +1,43 @@
/*
This file is part of kdepim.
Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
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; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef NETWORKSTATUS_CLIENTIFACEIMPL_H
#define NETWORKSTATUS_CLIENTIFACEIMPL_H
#include <tqstring.h>
#include "clientiface.h"
#include "networkstatus.h"
class ClientIfaceImpl : virtual public ClientIface
{
public:
ClientIfaceImpl( NetworkStatusModule * module );
int status( TQString host );
int request( TQString host, bool userInitiated );
void relinquish( TQString host );
bool reportFailure( TQString host );
/* TQString statusAsString();*/
private:
NetworkStatusModule * m_module;
};
#endif

@ -1,9 +1,12 @@
/* This file is part of kdepim. /*
Copyright (C) 2005,2007 Will Stephenson <wstephenson@kde.org> This file is part of kdepim.
Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation. License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -11,161 +14,143 @@
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public License You should have received a copy of the GNU Library General Public License
along with this library. If not, write to the Free Software along with this library; see the file COPYING.LIB. If not, write to
Foundation, Inc., 51 Franklin Street, Fifth Floor, the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. Boston, MA 02110-1301, USA.
As a special exception, permission is given to link this library
with any edition of TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/ */
#include <kapplication.h> #include <kapplication.h>
#include <kdebug.h> #include <klocale.h>
#include <kmessagebox.h>
#include <kstaticdeleter.h> #include <kstaticdeleter.h>
#include "clientiface_stub.h"
#include "networkstatuscommon.h"
#include "connectionmanager.h" #include "connectionmanager.h"
#include "connectionmanager_p.h"
// Connection manager itself // ConnectionManager's private parts
ConnectionManager::ConnectionManager( TQObject * parent, const char * name ) : DCOPObject( "ConnectionManager" ), TQObject( parent, name ), d( new ConnectionManagerPrivate( this ) ) class ConnectionManagerPrivate
{ {
d->service = new NetworkStatusIface_stub( kapp->dcopClient(), "kded", "networkstatus" ); public:
// this holds the currently active state
connectDCOPSignal( "kded", "networkstatus", "statusChange(int)", "slotStatusChanged(int)", false ); ConnectionManager::State m_state;
ClientIface_stub * m_stub;
bool m_userInitiatedOnly;
};
initialise(); // Connection manager itself
} ConnectionManager::ConnectionManager( TQObject * parent, const char * name ) : DCOPObject( "ConnectionManager" ),TQObject( parent, name )
ConnectionManager::~ConnectionManager()
{ {
delete d; d = new ConnectionManagerPrivate;
d->m_stub = new ClientIface_stub( kapp->dcopClient(), "kded", "networkstatus" );
connectDCOPSignal( "kded", "networkstatus", "statusChange(TQString,int)", "slotStatusChanged(TQString,int)", false );
d->m_userInitiatedOnly = false;
initialise();
} }
ConnectionManager *ConnectionManager::s_self = 0L; ConnectionManager *ConnectionManager::s_self = 0L;
ConnectionManager *ConnectionManager::self() ConnectionManager *ConnectionManager::self()
{ {
static KStaticDeleter<ConnectionManager> deleter; static KStaticDeleter<ConnectionManager> deleter;
if(!s_self) if(!s_self)
deleter.setObject( s_self, new ConnectionManager( 0, "connection_manager" ) ); deleter.setObject( s_self, new ConnectionManager( 0, "connection_manager" ) );
return s_self; return s_self;
} }
void ConnectionManager::initialise() void ConnectionManager::initialise()
{ {
// determine initial state and set the state object accordingly. // determine initial state and set the state object accordingly.
d->status = ( NetworkStatus::Status )d->service->status(); d->m_state = Offline;
} updateStatus();
}
NetworkStatus::Status ConnectionManager::status()
{ void ConnectionManager::updateStatus()
return d->status; {
} /*NetworkStatus::EnumStatus daemonStatus = (NetworkStatus::EnumStatus)d->m_stub->status( TQString::null );
switch ( daemonStatus )
void ConnectionManager::slotStatusChanged( int status ) {
{ case Offline:
d->status = ( NetworkStatus::Status )status; case OfflineFailed:
switch ( status ) { case OfflineDisconnected:
case NetworkStatus::NoNetworks: case ShuttingDown:
break; if ( d->m_state == Online )
case NetworkStatus::Unreachable: d->m_state = Pending;
break; else
case NetworkStatus::OfflineDisconnected: d->m_state = Offline;
case NetworkStatus::OfflineFailed: break;
case NetworkStatus::ShuttingDown: case Establishing:
case NetworkStatus::Offline: case Online:
case NetworkStatus::Establishing: d->m_state = Online;
if ( d->disconnectPolicy == Managed ) { break;
emit d->disconnected(); case NoNetworks:
} else if ( d->disconnectPolicy == OnNextChange ) { case Unreachable:
setDisconnectPolicy( Manual ); d->m_state = Inactive;
emit d->disconnected(); break;
} }*/
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 ) ConnectionManager::~ConnectionManager()
{
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; delete d;
d->disconnectPolicy = ConnectionManager::Managed;
} }
void ConnectionManager::registerConnectSlot( TQObject * receiver, const char * member ) NetworkStatus::EnumStatus ConnectionManager::status( const TQString & host )
{ {
d->connectReceiver = receiver; if ( d->m_state == Inactive )
d->connectSlot = member; return NetworkStatus::NoNetworks;
connect( d, TQT_SIGNAL( connected() ), receiver, member ); else
return NetworkStatus::Offline;
} }
NetworkStatus::EnumRequestResult ConnectionManager::requestConnection( TQWidget * mainWidget, const TQString & host, bool userInitiated )
void ConnectionManager::forgetConnectSlot()
{ {
disconnect( d, TQT_SIGNAL( connected() ), d->connectReceiver, d->connectSlot ); NetworkStatus::EnumRequestResult result;
d->connectReceiver = 0; // if offline and the user has previously indicated they didn't want any new connections, suppress it
d->connectSlot = 0; if ( d->m_state == Offline && !userInitiated && d->m_userInitiatedOnly )
result = NetworkStatus::UserRefused;
// if offline, ask the user whether this connection should be allowed
if ( d->m_state == Offline )
{
if ( askToConnect( mainWidget ) )
result = (NetworkStatus::EnumRequestResult)d->m_stub->request( host, userInitiated );
else
result = NetworkStatus::UserRefused;
}
// otherwise, just ask for the connection
else
result = (NetworkStatus::EnumRequestResult)d->m_stub->request( host, userInitiated );
return result;
} }
bool ConnectionManager::isConnectSlotRegistered() const void ConnectionManager::relinquishConnection( const TQString & host )
{ {
return ( d->connectSlot != 0 ); d->m_stub->relinquish( host );
} }
void ConnectionManager::registerDisconnectSlot( TQObject * receiver, const char * member ) void ConnectionManager::slotStatusChanged( TQString host, int status )
{ {
d->disconnectReceiver = receiver; updateStatus();
d->disconnectSlot = member; // reset user initiated only flag if we are now online
connect( d, TQT_SIGNAL( disconnected() ), receiver, member ); if ( d->m_state == Online )
} d->m_userInitiatedOnly = false;
void ConnectionManager::forgetDisconnectSlot() emit statusChanged( host, (NetworkStatus::EnumStatus)status );
{
disconnect( d, TQT_SIGNAL( disconnected() ), d->disconnectReceiver, d->disconnectSlot );
d->disconnectReceiver = 0;
d->disconnectSlot = 0;
} }
bool ConnectionManager::isDisconnectSlotRegistered() const bool ConnectionManager::askToConnect( TQWidget * mainWidget )
{ {
return ( d->disconnectSlot != 0 ); i18n( "A network connection was disconnected. The application is now in offline mode. Do you want the application to resume network operations when the network is available again?" );
i18n( "This application is currently in offline mode. Do you want to connect?" );
i18n( "Message shown when a network connection failed. The placeholder contains the concrete description of the operation eg 'while performing this operation", "A network connection failed %1. Do you want to place the application in offline mode?" );
return ( KMessageBox::questionYesNo( mainWidget,
i18n("This application is currently in offline mode. Do you want to connect in order to carry out this operation?"),
i18n("Leave Offline Mode?"),
i18n("Connect"), i18n("Do Not Connect"),
TQString::fromLatin1("OfflineModeAlwaysGoOnline") ) == KMessageBox::Yes );
} }
#include "connectionmanager.moc" #include "connectionmanager.moc"

@ -1,166 +1,56 @@
/* This file is part of kdepim. /*
Copyright (C) 2005,2007 Will Stephenson <wstephenson@kde.org> connectionmanager.h - Provides the client side interface to the kde networkstatus daemon
This library is free software; you can redistribute it and/or Copyright (c) 2004 by Will Stephenson <lists@stevello.free-online.co.uk>
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, * This library is free software; you can redistribute it and/or *
but WITHOUT ANY WARRANTY; without even the implied warranty of * modify it under the terms of the GNU Lesser General Public *
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * License as published by the Free Software Foundation; either *
Library General Public License for more details. * version 2 of the License, or (at your option) any later version. *
* *
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 TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/ */
#ifndef KDE_CONNECTION_MANAGER_H #ifndef KDE_CONNECTION_MANAGER_H
#define KDE_CONNECTION_MANAGER_H #define KDE_CONNECTION_MANAGER_H
#include <dcopobject.h> #include <dcopobject.h>
#include <kdemacros.h>
#include <networkstatuscommon.h> #include "networkstatuscommon.h"
class ConnectionManagerPrivate; class ConnectionManagerPrivate;
class KDE_EXPORT ConnectionManager : public TQObject, virtual public DCOPObject class ConnectionManager : public TQObject, virtual public DCOPObject
{ {
Q_OBJECT Q_OBJECT
K_DCOP K_DCOP
k_dcop: public:
void slotStatusChanged( int status ); static ConnectionManager* self();
public: enum State { Inactive, Online, Offline, Pending };
/** virtual ~ConnectionManager();
* This defines application policy in response to networking connect/disconnect events NetworkStatus::EnumStatus status( const TQString & host );
* Manual - the app only disconnects when the user does so // check if a hostname is available. Ask user if offline. Request host
* OnNextChange - the app should connect or disconnect the next time the network changes state, thereafter NetworkStatus::EnumRequestResult requestConnection( TQWidget* mainWidget, const TQString & host, bool userInitiated );
* Manual // method to relinquish a connection
* Managed - the app should disconnect when the ConnectionManager thinks the system is void relinquishConnection( const TQString & host );
* offline signals:
*/ // signal that the network for a hostname is up/down
enum ConnectionPolicy { Manual, OnNextChange, Managed }; void statusChanged( const TQString & host, NetworkStatus::EnumStatus status );
/** protected:
* Set a policy to manage the application's connect behaviour // sets up internal state
*/ void initialise();
void setConnectPolicy( ConnectionPolicy ); // reread the desktop status from the daemon and update internal state
/** void updateStatus();
* Retrieve a policy managing the application's connect behaviour // ask if the user would like to reconnect
*/ bool askToConnect( TQWidget * mainWidget );
ConnectionPolicy connectPolicy() const; k_dcop:
void slotStatusChanged( TQString host, int status );
/** private:
* Set a policy to manage the application's disconnect behaviour ConnectionManager( TQObject *parent, const char * name );
*/ ConnectionManagerPrivate *d;
void setDisconnectPolicy( ConnectionPolicy ); static ConnectionManager * s_self;
/**
* 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( TQObject * 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 TQObject 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 TQObject where the slot is located
* @param member the slot to call. Set up member using the TQT_SLOT() macro.
*/
void registerConnectSlot( TQObject * 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 TQObject 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 TQObject where the slot is located
* @param member the slot to call. Set up member using the TQT_SLOT() macro.
*/
void registerDisconnectSlot( TQObject * 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( TQObject *parent, const char * name );
ConnectionManagerPrivate * d;
static ConnectionManager * s_self;
}; };
#endif #endif

@ -1,13 +0,0 @@
#include "connectionmanager_p.h"
ConnectionManagerPrivate::ConnectionManagerPrivate(TQObject * parent, const char * name ) : TQObject( parent, name ), service( 0 ), connectPolicy( ConnectionManager::Managed ),
disconnectPolicy( ConnectionManager::Managed ), connectReceiver( 0 ), connectSlot( 0 ),
disconnectReceiver( 0 ), disconnectSlot( 0 )
{
}
ConnectionManagerPrivate::~ConnectionManagerPrivate()
{
}
#include "connectionmanager_p.moc"

@ -1,55 +0,0 @@
/* 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 TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/
#ifndef CONNECTIONMANAGERPRIVATE_H
#define CONNECTIONMANAGERPRIVATE_H
#include <tqobject.h>
#include "connectionmanager.h"
#include "networkstatuscommon.h"
#include "networkstatusiface_stub.h"
// ConnectionManager's private parts
class ConnectionManagerPrivate : public TQObject
{
Q_OBJECT
friend class ConnectionManager;
public:
ConnectionManagerPrivate( TQObject * 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;
TQObject * connectReceiver;
const char * connectSlot;
TQObject * disconnectReceiver;
const char * disconnectSlot;
signals:
void connected();
void disconnected();
};
#endif

@ -1,9 +1,12 @@
/* This file is part of kdepim. /*
Copyright (C) 2005,2007 Will Stephenson <wstephenson@kde.org> This file is part of kdepim.
Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation. License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -11,52 +14,80 @@
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public License You should have received a copy of the GNU Library General Public License
along with this library. If not, write to the Free Software along with this library; see the file COPYING.LIB. If not, write to
Foundation, Inc., 51 Franklin Street, Fifth Floor, the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. Boston, MA 02110-1301, USA.
As a special exception, permission is given to link this library
with any edition of TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/ */
#include <kdebug.h> #include <kdebug.h>
#include "network.h" #include "network.h"
Network::Network( NetworkStatus::Properties properties ) Network::Network( const TQString name, NetworkStatus::Properties properties )
: m_name( properties.name ), m_status( properties.status ), m_service( properties.service ) : m_name( name )
{
}
void Network::setStatus( NetworkStatus::Status status )
{ {
m_status = status; kdDebug() << k_funcinfo << "constructing network '" << name << "', status: " << properties.status << endl;
m_status = properties.status;
m_netmasks = properties.netmasks;
m_internet = properties.internet;
m_service = properties.service;
m_onDemandPolicy = properties.onDemandPolicy;
} }
NetworkStatus::Status Network::status() NetworkStatus::EnumStatus Network::reachabilityFor( const TQString & host )
{ {
return m_status; // initially assume all networks are internet
// TODO: compute reachability properly
Q_UNUSED( host );
if ( true /*nss.properties.internet && notPrivateNetwork( host )*/ )
{
NetworkStatus::EnumStatus status;
if ( m_status == NetworkStatus::Establishing || m_status == NetworkStatus::Online )
status = NetworkStatus::Online;
else if ( m_status == NetworkStatus::ShuttingDown || m_status == NetworkStatus::Offline )
status = NetworkStatus::Offline;
else
status = m_status;
return status;
}
} }
void Network::setName( const TQString& name ) void Network::registerUsage( const TQCString appId, const TQString host )
{ {
m_name = name; NetworkUsageStruct nus;
nus.appId = appId;
nus.host = host;
NetworkUsageList::iterator end = m_usage.end();
for ( NetworkUsageList::iterator it = m_usage.begin(); it != end; ++it )
{
if ( (*it).appId == appId && (*it).host == host )
return;
}
kdDebug() << k_funcinfo << "registering " << appId << " as using network " << m_name << " for " << host << endl;
m_usage.append( nus );
} }
TQString Network::name() void Network::unregisterUsage( const TQCString appId, const TQString host )
{ {
return m_name; NetworkUsageList::iterator end = m_usage.end();
for ( NetworkUsageList::iterator it = m_usage.begin(); it != end; ++it )
{
if ( (*it).appId == appId && (*it).host == host )
{
kdDebug() << k_funcinfo << "unregistering " << appId << "'s usage of " << m_name << " for " << host << endl;
m_usage.remove( it );
break;
}
}
} }
TQString Network::service() void Network::setStatus( NetworkStatus::EnumStatus status )
{ {
return m_service; m_status = status;
} }
void Network::setService( const TQString& service ) void Network::removeAllUsage()
{ {
m_service = service; m_usage.clear();
} }
// vim: sw=4 ts=4

@ -1,9 +1,12 @@
/* This file is part of kdepim. /*
Copyright (C) 2005,2007 Will Stephenson <wstephenson@kde.org> This file is part of kdepim.
Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation. License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -11,50 +14,54 @@
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public License You should have received a copy of the GNU Library General Public License
along with this library. If not, write to the Free Software along with this library; see the file COPYING.LIB. If not, write to
Foundation, Inc., 51 Franklin Street, Fifth Floor, the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. Boston, MA 02110-1301, USA.
As a special exception, permission is given to link this library
with any edition of TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/ */
#ifndef NETWORKSTATUS_NETWORK_H #ifndef NETWORKSTATUS_NETWORK_H
#define NETWORKSTATUS_NETWORK_H #define NETWORKSTATUS_NETWORK_H
#include <tqstringlist.h>
#include <ksharedptr.h>
#include "networkstatuscommon.h" #include "networkstatuscommon.h"
struct NetworkUsageStruct
{
TQCString appId;
TQString host;
};
typedef TQValueList< NetworkUsageStruct > NetworkUsageList;
class Network class Network
{ {
public: public:
Network( const TQString name ); Network( const TQString name, NetworkStatus::Properties properties );
Network( NetworkStatus::Properties properties ); Network( const Network & other );
/** NetworkStatus::EnumStatus reachabilityFor( const TQString & host );
* Update the status of this network void registerUsage( const TQCString appId, const TQString host );
*/ void unregisterUsage( const TQCString appId, const TQString host );
void setStatus( NetworkStatus::Status status ); void setStatus( NetworkStatus::EnumStatus status );
/**
* The connection status of this network void removeAllUsage();
*/
NetworkStatus::Status status();
/**
* The name of this network
*/
TQString name();
void setName( const TQString& name );
/**
* Returns the service owning this network
*/
TQString service();
void setService( const TQString& service );
NetworkStatus::EnumStatus status() { return m_status; }
TQString name() { return m_name; }
bool internet() { return m_internet; }
TQStringList netmasks() { return m_netmasks; }
TQCString service() { return m_service; }
NetworkStatus::EnumOnDemandPolicy onDemandPolicy() { return m_onDemandPolicy; }
NetworkUsageList usage() { return m_usage; }
private: private:
Network( const Network & ); NetworkStatus::EnumStatus m_status;
TQString m_name; TQString m_name;
NetworkStatus::Status m_status; bool m_internet;
TQString m_service; TQStringList m_netmasks;
TQCString m_service;
NetworkStatus::EnumOnDemandPolicy m_onDemandPolicy;
NetworkUsageList m_usage;
}; };
#endif #endif
// vim: sw=4 ts=4

@ -1,9 +1,12 @@
/* This file is part of kdepim /*
Copyright (C) 2005,2007 Will Stephenson <wstephenson@kde.org> This file is part of kdepim.
Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation. License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -11,153 +14,294 @@
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public License You should have received a copy of the GNU Library General Public License
along with this library. If not, write to the Free Software along with this library; see the file COPYING.LIB. If not, write to
Foundation, Inc., 51 Franklin Street, Fifth Floor, the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. Boston, MA 02110-1301, USA.
As a special exception, permission is given to link this library
with any edition of TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/ */
#include "networkstatus.h" #include "networkstatus.h"
#include <tqmap.h> #include <tqdict.h>
#include <tqtimer.h>
#include <tqvaluelist.h>
#include <dcopclient.h> #include <dcopclient.h>
#include <kapplication.h> #include <kapplication.h>
#include <kdebug.h> #include <kdebug.h>
#include "clientifaceimpl.h"
#include "serviceifaceimpl.h"
#include "network.h" #include "network.h"
#include <kdemacros.h> #include <kdepimmacros.h>
extern "C" { extern "C" {
KDE_EXPORT KDEDModule* create_networkstatus( const TQCString& obj ) KDE_EXPORT KDEDModule* create_networkstatus( const TQCString& obj )
{ {
return new NetworkStatusModule( obj ); return new NetworkStatusModule( obj );
} }
} }
// INTERNALLY USED STRUCTS AND TYPEDEFS // INTERNALLY USED STRUCTS AND TYPEDEFS
typedef TQMap< TQString, Network * > NetworkMap; //typedef TQDict< Network > NetworkList;
typedef TQValueList< Network * > NetworkList;
class NetworkStatusModule::Private class NetworkStatusModule::Private
{ {
public: public:
NetworkMap networks; NetworkList networks;
NetworkStatus::Status status; /* ClientIface * clientIface;
ServiceIface * serviceIface;*/
}; };
// CTORS/DTORS // CTORS/DTORS
NetworkStatusModule::NetworkStatusModule( const TQCString & obj ) : KDEDModule( obj ), d( new Private ) NetworkStatusModule::NetworkStatusModule( const TQCString & obj ) : KDEDModule( obj )
{ {
d->status = NetworkStatus::NoNetworks; d = new Private;
connect( kapp->dcopClient(), TQT_SIGNAL( applicationRemoved( const TQCString& ) ) , this, TQT_SLOT( unregisteredFromDCOP( const TQCString& ) ) ); /* d->clientIface = new ClientIfaceImpl( this );
// connect( kapp->dcopClient(), TQT_SIGNAL( applicationRegistered( const TQCString& ) ) , this, TQT_SLOT( registeredToDCOP( const TQCString& ) ) ); d->serviceIface = new ServiceIfaceImpl( this );*/
connect( kapp->dcopClient(), TQT_SIGNAL( applicationRemoved( const TQCString& ) ) , this, TQT_SLOT( unregisteredFromDCOP( const TQCString& ) ) );
connect( kapp->dcopClient(), TQT_SIGNAL( applicationRegistered( const TQCString& ) ) , this, TQT_SLOT( registeredToDCOP( const TQCString& ) ) );
} }
NetworkStatusModule::~NetworkStatusModule() NetworkStatusModule::~NetworkStatusModule()
{ {
NetworkMap::ConstIterator it; /* delete d->clientIface;
const NetworkMap::ConstIterator end = d->networks.end(); delete d->serviceIface;*/
delete d;
for ( it = d->networks.begin(); it != end; ++it ) {
delete ( *it );
}
delete d;
} }
// CLIENT INTERFACE // CLIENT INTERFACE
TQStringList NetworkStatusModule::networks() TQStringList NetworkStatusModule::networks()
{ {
kdDebug() << k_funcinfo << " contains " << d->networks.count() << " networks" << endl; kdDebug() << k_funcinfo << " contains " << d->networks.count() << " networks" << endl;
return d->networks.keys(); TQStringList networks;
NetworkList::iterator end = d->networks.end();
NetworkList::iterator it = d->networks.begin();
for ( ; it != end; ++it )
networks.append( (*it)->name() );
return networks;
}
int NetworkStatusModule::status( const TQString & host )
{
if ( host == "127.0.0.1" || host == "localhost" )
return NetworkStatus::Online;
Network * p = networkForHost( host );
if ( !p )
{
//kdDebug() << k_funcinfo << " no networks have status for host '" << host << "'" << endl;
return (int)NetworkStatus::NoNetworks;
}
else
{
kdDebug() << k_funcinfo << " got status for host '" << host << "' : " << (int)(p->status()) << endl;
return (int)(p->status());
}
}
int NetworkStatusModule::request( const TQString & host, bool userInitiated )
{
// identify most suitable network for host
Network * p = networkForHost( host );
if ( !p )
return NetworkStatus::Unavailable;
NetworkStatus::EnumStatus status = p->status();
TQCString appId = kapp->dcopClient()->senderId();
if ( status == NetworkStatus::Online )
{
p->registerUsage( appId, host );
return NetworkStatus::Connected;
}
// if online
// register usage
// return Available
else if ( status == NetworkStatus::Establishing )
{
p->registerUsage( appId, host );
return NetworkStatus::RequestAccepted;
}
// if establishing
// register usage
// return Accepted
else if ( status == NetworkStatus::Offline || status == NetworkStatus::ShuttingDown )
{
// TODO: check on demand policy
p->registerUsage( appId, host );
return NetworkStatus::RequestAccepted;
}
// if offline or ShuttingDown
// check ODP::
// always or Permanent: register, return accepted
// user: check userInitiated, register, return Accepted or UserRefused
// never: return UserRefused
else if ( status == NetworkStatus::OfflineFailed )
{
// TODO: check user's preference for dealing with failed networks
p->registerUsage( appId, host );
return NetworkStatus::RequestAccepted;
}
// if OfflineFailed
// check user's preference
else if ( status == NetworkStatus::OfflineDisconnected )
{
return NetworkStatus::Unavailable;
}
else
return NetworkStatus::Unavailable;
// if OfflineDisconnected or NoNetworks
// return Unavailable
} }
int NetworkStatusModule::status() void NetworkStatusModule::relinquish( const TQString & host )
{ {
kdDebug() << k_funcinfo << " status: " << (int)d->status << endl; TQCString appId = kapp->dcopClient()->senderId();
return (int)d->status; // find network currently used by app for host...
NetworkList::iterator end = d->networks.end();
NetworkList::iterator it = d->networks.begin();
for ( ; it != end; ++it )
{
Network * net = *it;
NetworkUsageList usage = net->usage();
NetworkUsageList::iterator end2 = usage.end();
for ( NetworkUsageList::iterator usageIt = usage.begin(); usageIt != end2; ++usageIt )
{
if ( (*usageIt).appId == appId && (*usageIt).host == host )
{
// remove host usage record
usage.remove( usageIt );
// if requested shutdown flagged for network
// check if all hosts have relinquished
// call confirmShutDown on Service
//checkShutdownOk();
}
}
}
} }
//protected: bool NetworkStatusModule::reportFailure( const TQString & host )
{
// find network for host
// check IP record. remove IP usage record. if other IP exists, return true.
Q_UNUSED( host );
kdDebug() << k_funcinfo << "NOT IMPLEMENTED" << endl;
return false;
}
void NetworkStatusModule::updateStatus() // PROTECTED UTILITY FUNCTIONS
/*
* Determine the network to use for the supplied host
*/
Network * NetworkStatusModule::networkForHost( const TQString & host ) const
{
// return a null pointer if no networks are registered
if ( d->networks.isEmpty() )
return 0;
NetworkList::const_iterator it = d->networks.begin();
Network * bestNetwork = *(it++);
NetworkList::const_iterator end = d->networks.end();
for ( ; it != end; ++it )
{
if ( (*it)->reachabilityFor( host ) > bestNetwork->reachabilityFor( host ) )
{
bestNetwork = (*it);
}
}
return bestNetwork;
}
void NetworkStatusModule::registeredToDCOP( const TQCString & appId )
{ {
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 TQCString & appId ) void NetworkStatusModule::unregisteredFromDCOP( const TQCString & appId )
{ {
// unregister and delete any networks owned by a service that has just unregistered // unregister any networks owned by a service that has just unregistered
NetworkMap::Iterator it = d->networks.begin(); NetworkList::iterator it = d->networks.begin();
const NetworkMap::Iterator end = d->networks.end(); NetworkList::iterator end = d->networks.end();
while (it != d->networks.end()) for ( ; it != end; ++it )
{ {
if ( ( *it )->service() == TQString( appId ) ) if ( (*it)->service() == appId)
{ {
NetworkMap::Iterator toRemove = it++; kdDebug() << k_funcinfo << "removing '" << (*it)->name() << "', registered by " << appId << endl;
delete *toRemove; d->networks.remove( it );
d->networks.remove( toRemove ); break;
updateStatus(); }
continue; }
}
++it;
}
} }
// SERVICE INTERFACE // // SERVICE INTERFACE //
void NetworkStatusModule::setNetworkStatus( const TQString & networkName, int st ) void NetworkStatusModule::setNetworkStatus( const TQString & networkName, int st )
{ {
kdDebug() << k_funcinfo << networkName << ", " << st << endl; kdDebug() << k_funcinfo << endl;
NetworkStatus::Status changedStatus = (NetworkStatus::Status)st; NetworkStatus::EnumStatus status = (NetworkStatus::EnumStatus)st;
Network * net = 0; Network * net = 0;
NetworkMap::Iterator it = d->networks.find( networkName ); NetworkList::iterator it = d->networks.begin();
if ( it != d->networks.end() ) { NetworkList::iterator end = d->networks.end();
net = (*it); for ( ; it != end; ++it )
net->setStatus( changedStatus ); {
updateStatus(); if ( (*it)->name() == networkName )
} {
else net = (*it);
kdDebug() << " No network named '" << networkName << "' found." << endl; break;
}
}
if ( net )
{
if ( net->status() == status )
return;
// update the status of the network
net->setStatus( status );
// notify for each host in use on that network
NetworkUsageList usage = net->usage();
NetworkUsageList::iterator end = usage.end();
TQStringList notified;
for ( NetworkUsageList::iterator it = usage.begin(); it != end; ++it )
{
// only notify once per host
if ( !notified.contains( (*it).host ) )
{
kdDebug() << "notifying statusChange of " << networkName << " to " << (int)status <<
" because " << (*it).appId << " is using " << (*it).host << endl;
/*d->clientIface->*/statusChange( (*it).host, (int)status );
notified.append( (*it).host );
}
}
// if we are now anything but Establishing or Online, reset the usage records for that network
if ( !( net->status() == NetworkStatus::Establishing || net->status() == NetworkStatus::Establishing ) )
net->removeAllUsage();
}
else
kdDebug() << k_funcinfo << "No network found by this name" << endl;
} }
void NetworkStatusModule::registerNetwork( const NetworkStatus::Properties properties ) void NetworkStatusModule::registerNetwork( const TQString & networkName, const NetworkStatus::Properties properties )
{ {
kdDebug() << k_funcinfo << properties.name << ", with status " << properties.status << endl; kdDebug() << k_funcinfo << "registering '" << networkName << "', with status " << properties.status << endl;
// TODO: check for re-registration, checking appid matches
d->networks.insert( properties.name, new Network( properties ) );
updateStatus(); d->networks.append( new Network( networkName, properties ) );
} }
void NetworkStatusModule::unregisterNetwork( const TQString & networkName ) void NetworkStatusModule::unregisterNetwork( const TQString & networkName )
{ {
kdDebug() << k_funcinfo << networkName << endl; // TODO: check appid
//d->networks.remove( networkName );
NetworkMap::Iterator it = d->networks.find( networkName ); }
if ( it != d->networks.end() ) {
delete *it; void NetworkStatusModule::requestShutdown( const TQString & networkName )
d->networks.remove( it ); {
} Q_UNUSED( networkName );
updateStatus(); kdDebug() << k_funcinfo << "NOT IMPLEMENTED" << endl;
} }
#include "networkstatus.moc" #include "networkstatus.moc"
// vim: set noet sw=4 ts=4:

@ -1,5 +1,4 @@
[Desktop Entry] [Desktop Entry]
Encoding=UTF-8
Name=Network Status Daemon Name=Network Status Daemon
Name[af]=Netwerk status bediener Name[af]=Netwerk status bediener
Name[ar]=مراقب القرص و التنفيذ لحالة الشبكة Name[ar]=مراقب القرص و التنفيذ لحالة الشبكة
@ -9,6 +8,7 @@ Name[cs]=Démon stavu sítě
Name[da]=Netværkstatusdæmon Name[da]=Netværkstatusdæmon
Name[de]=Überwachung des Netzwerkstatus Name[de]=Überwachung des Netzwerkstatus
Name[el]=Δαίμονας κατάστασης δικτύου Name[el]=Δαίμονας κατάστασης δικτύου
Name[eo]=Retstat-demono
Name[es]=Daemon de estado de la red Name[es]=Daemon de estado de la red
Name[et]=Võrguoleku deemon Name[et]=Võrguoleku deemon
Name[eu]=Sarearen egoera deabrua Name[eu]=Sarearen egoera deabrua
@ -23,6 +23,7 @@ Name[it]=Demone dello stato della rete
Name[ja]=ネットワークステータスデーモン Name[ja]=ネットワークステータスデーモン
Name[kk]=Желі күйінің қызметі Name[kk]=Желі күйінің қызметі
Name[km]=ដេមិន​ស្ថានភាព​បណ្ដាញ Name[km]=ដេមិន​ស្ថានភាព​បណ្ដាញ
Name[ko]=네트워크 상태 데몬
Name[lt]=Tinklo statuso tarnyba Name[lt]=Tinklo statuso tarnyba
Name[mk]=Даемон за мрежен статус Name[mk]=Даемон за мрежен статус
Name[ms]=Daemon Berstatus Rangkaian Name[ms]=Daemon Berstatus Rangkaian
@ -85,6 +86,7 @@ Comment[sr]=Прати статус мрежних интерфејса и пр
Comment[sr@Latn]=Prati status mrežnih interfejsa i pruža obaveštenja programima koji koriste mrežu. 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[sv]=Bevakar status för nätverksgränssnitt och tillhandahåller underrättelser till program som använder nätverket.
Comment[ta]=வலைப்பின்னலைப் பயன்படுத்தி வலைப்பின்னல் இடைமுகங்களின் நிலையை கண்காணிக்கிறது மற்றும் பயன்பாடுகளுக்கு அறிவிப்பை வழங்குகிறது. Comment[ta]=வலைப்பின்னலைப் பயன்படுத்தி வலைப்பின்னல் இடைமுகங்களின் நிலையை கண்காணிக்கிறது மற்றும் பயன்பாடுகளுக்கு அறிவிப்பை வழங்குகிறது.
Comment[tr]=Ağ arayüzlerinin durmunu izler ve ağı kullanan uygulamalar için gereken uyarıları sağlar.
Comment[uk]=Слідкує за станом інтерфейсів мережі і сповіщає програми, які користуються мережею. Comment[uk]=Слідкує за станом інтерфейсів мережі і сповіщає програми, які користуються мережею.
Comment[zh_CN]=跟踪网卡的状态并为应用程序提供使用网络的通知。 Comment[zh_CN]=跟踪网卡的状态并为应用程序提供使用网络的通知。
Comment[zh_TW]=追蹤網路介面的狀態,並提供使用網路的應用程式的通知。 Comment[zh_TW]=追蹤網路介面的狀態,並提供使用網路的應用程式的通知。

@ -1,9 +1,12 @@
/* This file is part of kdepim /*
Copyright (C) 2005,2007 Will Stephenson <wstephenson@kde.org> This file is part of kdepim.
Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation. License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -11,56 +14,67 @@
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public License You should have received a copy of the GNU Library General Public License
along with this library. If not, write to the Free Software along with this library; see the file COPYING.LIB. If not, write to
Foundation, Inc., 51 Franklin Street, Fifth Floor, the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. Boston, MA 02110-1301, USA.
As a special exception, permission is given to link this library
with any edition of TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/ */
#ifndef KDED_NETWORKSTATUS_H #ifndef KDED_NETWORKSTATUS_H
#define KDED_NETWORKSTATUS_H #define KDED_NETWORKSTATUS_H
#include "networkstatuscommon.h"
#include <kdedmodule.h> #include <kdedmodule.h>
#include "networkstatuscommon.h" #include "clientiface.h"
#include "network.h" #include "network.h"
#include "serviceiface.h"
struct NetworkStatusStruct;
class NetworkStatusModule : virtual public KDEDModule class NetworkStatusModule : virtual public KDEDModule/*, public ClientIface, ServiceIface*/ // <-spot the multiple inheritance pb
{ {
Q_OBJECT Q_OBJECT
K_DCOP K_DCOP
public: public:
NetworkStatusModule( const TQCString& obj ); NetworkStatusModule( const TQCString & obj );
~NetworkStatusModule(); ~NetworkStatusModule();
k_dcop: k_dcop:
// Client interface // Client interface
TQStringList networks(); TQStringList networks();
int status(); int status( const TQString & host );
// Service interface int request( const TQString & host, bool userInitiated );
void setNetworkStatus( const TQString & networkName, int status ); void relinquish( const TQString & host );
void registerNetwork( NetworkStatus::Properties properties ); bool reportFailure( const TQString & host );
void unregisterNetwork( const TQString & networkName ); // TQString statusAsString();
// Service interface
void setNetworkStatus( const TQString & networkName, int status );
void registerNetwork( const TQString & networkName, NetworkStatus::Properties properties );
void unregisterNetwork( const TQString & networkName );
void requestShutdown( const TQString & networkName );
k_dcop_signals: k_dcop_signals:
/** /**
* A status change occurred affecting the overall connectivity * A status change occurred for the network(s) used to connect to the given host.
* @param status The new status * @param host The host which the application has indicated it is using
*/ * @param status The new status of the network used to reach host.
void statusChange( int status ); */
void statusChange( TQString host, int status );
/**
* The network would like to shut down - any clients using this host are to finish using it immediately and call
* relinquish() when done.
* @param host The host, registered as in use by applications, which is about to be disconnected.
*/
void shutdownRequested( TQString host );
protected slots: protected slots:
//void registeredToDCOP( const TQCString& appId ); void registeredToDCOP( const TQCString& appId );
void unregisteredFromDCOP( const TQCString& appId ); void unregisteredFromDCOP( const TQCString& appId );
protected: protected:
// recalculate cached status // TQStringList networkUsers( const TQString & networkName );
void updateStatus(); Network * networkForHost( const TQString & host ) const;
private: private:
class Private; class Private;
Private *d; Private *d;
}; };
#endif #endif
// vim: sw=4 ts=4

@ -7,7 +7,7 @@
<projectmanagement>KDevKDEAutoProject</projectmanagement> <projectmanagement>KDevKDEAutoProject</projectmanagement>
<primarylanguage>C++</primarylanguage> <primarylanguage>C++</primarylanguage>
<keywords> <keywords>
<keyword>TQt</keyword> <keyword>Qt</keyword>
<keyword>KDE</keyword> <keyword>KDE</keyword>
</keywords> </keywords>
</general> </general>

@ -1,9 +1,12 @@
/* This file is part of kdepim. /*
Copyright (C) 2005,2007 Will Stephenson <wstephenson@kde.org> This file is part of kdepim.
Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation. License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -11,66 +14,40 @@
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public License You should have received a copy of the GNU Library General Public License
along with this library. If not, write to the Free Software along with this library; see the file COPYING.LIB. If not, write to
Foundation, Inc., 51 Franklin Street, Fifth Floor, the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. Boston, MA 02110-1301, USA.
As a special exception, permission is given to link this library
with any edition of TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/ */
#include "networkstatuscommon.h" #include "networkstatuscommon.h"
#include <kdebug.h>
TQDataStream & operator<< ( TQDataStream & s, const NetworkStatus::Properties p ) TQDataStream & operator<< ( TQDataStream & s, const NetworkStatus::Properties p )
{ {
s << p.name; kdDebug() << k_funcinfo << "status is: " << (int)p.status << endl;
s << (int)p.status; s << (int)p.status;
s << (int)p.onDemandPolicy;
s << p.service; s << p.service;
s << ( p.internet ? 1 : 0 );
s << p.netmasks;
return s; return s;
} }
TQDataStream & operator>> ( TQDataStream & s, NetworkStatus::Properties &p ) TQDataStream & operator>> ( TQDataStream & s, NetworkStatus::Properties &p )
{ {
int status; int status, onDemandPolicy, internet;
s >> p.name;
s >> status; s >> status;
p.status = (NetworkStatus::Status)status; kdDebug() << k_funcinfo << "status is: " << status << endl;
p.status = ( NetworkStatus::EnumStatus )status;
s >> onDemandPolicy;
p.onDemandPolicy = ( NetworkStatus::EnumOnDemandPolicy )onDemandPolicy;
s >> p.service; s >> p.service;
s >> internet;
if ( internet )
p.internet = true;
else
p.internet = false;
s >> p.netmasks;
kdDebug() << k_funcinfo << "enum converted status is: " << p.status << endl;
return s; return s;
} }
namespace NetworkStatus
{
TQString toString( NetworkStatus::Status st )
{
TQString 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

@ -1,9 +1,12 @@
/* This file is part of kdepim /*
Copyright (C) 2005,2007 Will Stephenson <wstephenson@kde.org> This file is part of kdepim.
Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation. License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -11,13 +14,9 @@
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public License You should have received a copy of the GNU Library General Public License
along with this library. If not, write to the Free Software along with this library; see the file COPYING.LIB. If not, write to
Foundation, Inc., 51 Franklin Street, Fifth Floor, the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. Boston, MA 02110-1301, USA.
As a special exception, permission is given to link this library
with any edition of TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/ */
#ifndef NETWORKSTATUS_COMMON_H #ifndef NETWORKSTATUS_COMMON_H
@ -27,23 +26,26 @@
namespace NetworkStatus namespace NetworkStatus
{ {
enum Status { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown, Offline, Establishing, Online }; enum EnumStatus { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown, Offline, Establishing, Online };
enum RequestResult { RequestAccepted = 1, Connected, UserRefused, Unavailable }; enum EnumRequestResult { RequestAccepted = 1, Connected, UserRefused, Unavailable };
enum UnusedDemandPolicy { All, User, None, Permanent }; enum EnumOnDemandPolicy { All, User, None, Permanent };
struct Properties
// BINARY COMPATIBILITY ALERT BEGIN !!!! {
struct Properties TQString name;
{ // status of the network
TQString name; EnumStatus status;
Status status; // policy for on-demand usage as defined by the service
UnusedDemandPolicy unused1; EnumOnDemandPolicy onDemandPolicy;
TQCString service; // identifier for the service
bool unused3; TQCString service;
TQStringList unused4; // indicate that the connection is to 'the internet' - similar to default gateway in routing
}; bool internet;
// BINARY COMPATIBILITY ALERT END !!!! // list of netmasks that the network connects to - overridden by above internet
TQStringList netmasks;
TQString toString( Status st ); // for future expansion consider
// EnumChargingModel - FlatRate, TimeCharge, VolumeCharged
// EnumLinkStatus - for WLANs - VPOOR, POOR, AVERAGE, GOOD, EXCELLENT
};
} }
TQDataStream & operator>> ( TQDataStream & s, NetworkStatus::Properties &p ); TQDataStream & operator>> ( TQDataStream & s, NetworkStatus::Properties &p );

@ -1,50 +0,0 @@
/* 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 TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/
#ifndef KDED_NETWORKSTATUSIFACE_H
#define KDED_NETWORKSTATUSIFACE_H
#include <dcopobject.h>
#include <tqstringlist.h>
#include "networkstatuscommon.h"
class NetworkStatusIface : virtual public DCOPObject
{
K_DCOP
k_dcop:
// Client interface
virtual TQStringList networks() = 0;
virtual int status() = 0;
// Service interface
virtual void setNetworkStatus( const TQString & networkName, int status ) = 0;
virtual void registerNetwork( NetworkStatus::Properties properties ) = 0;
virtual void unregisterNetwork( const TQString & 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

@ -1,64 +0,0 @@
/* 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 TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/
#include <tqlabel.h>
#include <tqtooltip.h>
#include <kiconloader.h>
#include <klocale.h>
#include "connectionmanager.h"
#include "networkstatusindicator.h"
StatusBarNetworkStatusIndicator::StatusBarNetworkStatusIndicator(
TQWidget * parent, const char * name ) : TQHBox( parent, name )/*, d( new StatusBarNetworkStatusIndicatorPrivate )*/
{
setMargin( 2 );
setSpacing( 1 );
TQLabel * label = new TQLabel( this, "offlinemodelabel" );
label->setPixmap( SmallIcon("connect_no") );
TQToolTip::add( label, i18n( "The desktop is offline" ) );
connect( ConnectionManager::self(), TQT_SIGNAL( statusChanged( NetworkStatus::Status ) ),
TQT_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"

@ -1,42 +0,0 @@
/* 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 TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/
#ifndef KDE_NETWORKSTATUS_INDICATOR_H
#define KDE_NETWORKSTATUS_INDICATOR_H
#include <tqhbox.h>
#include <kdemacros.h>
#include <networkstatuscommon.h>
class StatusBarNetworkStatusIndicator : public TQHBox
{
Q_OBJECT
public:
StatusBarNetworkStatusIndicator( TQWidget * parent, const char * name );
virtual ~StatusBarNetworkStatusIndicator();
void init();
protected slots:
void networkStatusChanged( NetworkStatus::Status status );
};
#endif

@ -0,0 +1,42 @@
/*
This file is part of kdepim.
Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
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; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef NETWORKSTATUS_PROVIDERIFACE_H
#define NETWORKSTATUS_PROVIDERIFACE_H
#include <dcopobject.h>
class ProviderIface : virtual public DCOPObject
{
K_DCOP
k_dcop:
/** @return NetworkStatus::EnumOnlineStatus */
virtual int status( const TQString & network ) = 0;
/** @return NetworkStatus::EnumRequestResult */
virtual int establish( const TQString & network ) = 0;
/** @return NetworkStatus::EnumRequestResult */
virtual int shutdown( const TQString & network ) = 0;
/** fake a failure - go directly to failed */
virtual void simulateFailure() = 0;
/** fake a network disconnect - go directly to offlinedisconnected */
virtual void simulateDisconnect() = 0;
};
#endif

@ -0,0 +1,51 @@
/*
This file is part of kdepim.
Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
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; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KDED_NETWORKSTATUS_SERVICEIFACE_H
#define KDED_NETWORKSTATUS_SERVICEIFACE_H
#include "networkstatuscommon.h"
#include <dcopobject.h>
class ServiceIface : virtual public DCOPObject
{
K_DCOP
k_dcop:
/** Change the status for the given network */
virtual void setNetworkStatus( const TQString & networkName, int status ) = 0;
/** Register or update the properties for a network
NB Check that people don't use this to change status */
virtual void registerNetwork( const TQString & networkName, NetworkStatus::Properties properties ) = 0;
/**
* Indicate that this service is no longer administering the named network
* TODO: Work out the implications to clients of unregistering a network
* - maybe this method needs more parameters to give them a clue.
*/
virtual void unregisterNetwork( const TQString & networkName ) = 0;
/**
* Tell the daemon that the service would like to shut down this network connection,
* and to notify clients using it so they can stop using it in a controlled manner
*/
virtual void requestShutdown( const TQString & networkName ) = 0;
};
#endif

@ -0,0 +1,46 @@
/*
This file is part of kdepim.
Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
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; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "serviceifaceimpl.h"
ServiceIfaceImpl::ServiceIfaceImpl( NetworkStatusModule * module ) : m_module ( module )
{
}
void ServiceIfaceImpl::setStatus( TQString networkName, int status )
{
m_module->setStatus( networkName, (NetworkStatus::EnumStatus)status );
}
void ServiceIfaceImpl::registerNetwork( TQString networkName, NetworkStatus::Properties properties )
{
m_module->registerNetwork( networkName, properties );
}
void ServiceIfaceImpl::unregisterNetwork( TQString networkName )
{
m_module->unregisterNetwork( networkName );
}
void ServiceIfaceImpl::requestShutdown( TQString networkName )
{
m_module->requestShutdown( networkName );
}

@ -0,0 +1,43 @@
/*
This file is part of kdepim.
Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
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; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef NETWORKSTATUS_SERVICEIFACEIMPL_H
#define NETWORKSTATUS_SERVICEIFACEIMPL_H
#include "networkstatus.h"
#include "serviceiface.h"
/**
* Glue class linking DCOP skeleton to daemon
*/
class ServiceIfaceImpl : virtual public ServiceIface
{
public:
ServiceIfaceImpl( NetworkStatusModule * module );
void setStatus( TQString networkName, int status );
void registerNetwork( TQString networkName, NetworkStatus::Properties properties );
void unregisterNetwork( TQString networkName );
void requestShutdown( TQString networkName );
private:
NetworkStatusModule * m_module;
};
#endif

@ -1,234 +0,0 @@
/* 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 TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/
#include <tqlabel.h>
#include <tqpushbutton.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(), TQT_SIGNAL( statusChanged( NetworkStatus::Status ) ), TQT_SLOT( networkStatusChanged( NetworkStatus::Status ) ) );
connect( m_view->connectButton, TQT_SIGNAL( toggled( bool ) ), TQT_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;
}
TQColor TestClient::toQColor( NetworkStatus::Status st )
{
TQColor 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"

@ -1,80 +0,0 @@
/* 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 TQt, and distribute the resulting executable,
without including the source code for TQt 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 TQColor 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

@ -1,222 +0,0 @@
/* 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 TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/
#include <tqlabel.h>
#include <tqpushbutton.h>
#include <tqvbox.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 TQVBox( 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(), TQT_SIGNAL( statusChanged( NetworkStatus::Status ) ), TQT_SLOT( networkStatusChanged( NetworkStatus::Status ) ) );
ConnectionManager::self()->registerConnectSlot( this, TQT_SLOT( doConnect() ) );
ConnectionManager::self()->registerDisconnectSlot( this, TQT_SLOT( doDisconnect() ) );
connect( m_view->connectButton, TQT_SIGNAL( clicked() ), TQT_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;
}
TQColor TestClient::toQColor( NetworkStatus::Status st )
{
TQColor 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"

@ -1,82 +0,0 @@
/* 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 TQt, and distribute the resulting executable,
without including the source code for TQt 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 TQColor toQColor( NetworkStatus::Status );
private:
TQHBox * 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

@ -1,177 +0,0 @@
<!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>

@ -1,126 +1,55 @@
/* This file is part of kdepim. /*
Copyright (C) 2005,2007 Will Stephenson <wstephenson@kde.org> This file is part of kdepim.
This program is free software; you can redistribute it and/or modify Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
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, This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
GNU General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU Library General Public License
along with this program; if not, write to the Free Software along with this library; see the file COPYING.LIB. If not, write to
Foundation, Inc., 51 Franklin Street, Fifth Floor, the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. Boston, MA 02110-1301, USA.
As a special exception, permission is given to link this program
with any edition of TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/ */
#include <tqcombobox.h>
#include <tqlabel.h>
#include <tqpushbutton.h>
#include <tqtimer.h> #include <tqtimer.h>
#include <dcopclient.h> #include <dcopclient.h>
#include <kaboutdata.h>
#include <kapplication.h> #include <kapplication.h>
#include <kcmdlineargs.h> #include "provideriface.h"
#include <kdebug.h>
#include <klocale.h>
#include "testservice.h" #include "testservice.h"
#include "testserviceview.h" #include "serviceiface_stub.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, TQT_SIGNAL( activated( int ) ), TQT_SLOT( changeComboActivated( int ) ) );
connect( m_view->changeButton, TQT_SIGNAL( clicked() ), TQT_SLOT( changeButtonClicked() ) );
connect( kapp->dcopClient(), TQT_SIGNAL( applicationRegistered( const TQCString& ) ), this, TQT_SLOT( registeredToDCOP( const TQCString& ) ) );
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() : TQObject(), DCOPObject("ProviderIface")
}
TestService::~TestService()
{ {
delete m_service; kapp->dcopClient()->registerAs("testservice" );
delete m_view; m_service = new ServiceIface_stub( "kded", "networkstatus" );
m_status = NetworkStatus::Offline;
NetworkStatus::Properties nsp;
nsp.internet = true;
nsp.name = "test_net";
nsp.onDemandPolicy = NetworkStatus::All;
nsp.service = kapp->dcopClient()->appId();
nsp.status = m_status;
m_service->registerNetwork( "test_net", nsp );
} }
void TestService::registerService() TestService::~TestService()
{
NetworkStatus::Properties nsp;
nsp.name = "test_net";
nsp.service = kapp->dcopClient()->appId();
nsp.status = m_status;
m_service->registerNetwork( nsp );
}
void TestService::registeredToDCOP( const TQCString & appId )
{ {
if ( appId == "kded" ) delete m_service;
registerService();
} }
int TestService::status( const TQString & network ) int TestService::status( const TQString & network )
{ {
Q_UNUSED( network ); Q_UNUSED( network );
return (int)m_status; 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 TQString & network ) int TestService::establish( const TQString & network )
@ -161,59 +90,12 @@ void TestService::slotStatusChange()
m_service->setNetworkStatus( "test_net", (int)m_status ); m_service->setNetworkStatus( "test_net", (int)m_status );
} }
TQColor TestService::toQColor( NetworkStatus::Status st )
{
TQColor 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 ) 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"); KApplication app(argc, argv, "testdcop");
about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); TestService * test = new TestService;
KCmdLineArgs::init(argc, argv, &about); Q_UNUSED( test );
KCmdLineArgs::addCmdLineOptions(options); return app.exec();
KApplication app;
TestService * test = new TestService;
test->show();
return app.exec();
} }
#include "testservice.moc" #include "testservice.moc"

@ -1,37 +1,34 @@
/* This file is part of kdepim. /*
This file is part of kdepim.
Copyright (C) 2005,2007 Will Stephenson <wstephenson@kde.org> Copyright (c) 2005 Will Stephenson <lists@stevello.free-online.co.uk>
This program is free software; you can redistribute it and/or modify This library is free software; you can redistribute it and/or
it under the terms of the GNU General Public License as published by modify it under the terms of the GNU Library General Public
the Free Software Foundation; either version 2 of the License, or License as published by the Free Software Foundation; either
(at your option) any later version. version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
GNU General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU Library General Public License
along with this program; if not, write to the Free Software along with this library; see the file COPYING.LIB. If not, write to
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 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 TQt, and distribute the resulting executable,
without including the source code for TQt in the source distribution.
*/ */
#ifndef _TEST_NETWORKSTATUS_SERVICE_H #ifndef _TEST_NETWORKSTATUS_SERVICE_H
#define _TEST_NETWORKSTATUS_SERVICE_H #define _TEST_NETWORKSTATUS_SERVICE_H
#include <kmainwindow.h>
#include "networkstatuscommon.h" #include "networkstatuscommon.h"
#include "provideriface.h"
class NetworkStatusIface_stub; class ServiceIface_stub;
class TestServiceView;
class TestService : public KMainWindow { class TestService : virtual public TQObject, ProviderIface
{
Q_OBJECT Q_OBJECT
public: public:
TestService(); TestService();
@ -42,19 +39,11 @@ public:
void simulateFailure(); void simulateFailure();
void simulateDisconnect(); void simulateDisconnect();
protected slots: protected slots:
void changeComboActivated( int index );
void registeredToDCOP( const TQCString& appId );
void changeButtonClicked();
void slotStatusChange(); void slotStatusChange();
private: private:
void registerService(); ServiceIface_stub * m_service;
static TQColor toQColor( NetworkStatus::Status ); NetworkStatus::EnumStatus m_status;
NetworkStatusIface_stub * m_service; NetworkStatus::EnumStatus m_nextStatus;
NetworkStatus::Status m_status;
NetworkStatus::Status m_nextStatus;
TestServiceView * m_view;
}; };
#endif #endif

@ -1,181 +0,0 @@
<!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>
Loading…
Cancel
Save