You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
5.0 KiB
172 lines
5.0 KiB
/* 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.
|
|
*/
|
|
|
|
#include <kapplication.h>
|
|
#include <kdebug.h>
|
|
#include <kstaticdeleter.h>
|
|
|
|
#include "connectionmanager.h"
|
|
#include "connectionmanager_p.h"
|
|
|
|
// Connection manager itself
|
|
ConnectionManager::ConnectionManager( TQObject * parent, const char * name ) : DCOPObject( "ConnectionManager" ), TQObject( parent, name ), d( new ConnectionManagerPrivate( this ) )
|
|
{
|
|
d->service = new NetworkStatusIface_stub( kapp->dcopClient(), "kded", "networkstatus" );
|
|
|
|
connectDCOPSignal( "kded", "networkstatus", "statusChange(int)", "slotStatusChanged(int)", false );
|
|
|
|
initialise();
|
|
}
|
|
|
|
ConnectionManager::~ConnectionManager()
|
|
{
|
|
delete d;
|
|
}
|
|
|
|
ConnectionManager *ConnectionManager::s_self = 0L;
|
|
|
|
ConnectionManager *ConnectionManager::self()
|
|
{
|
|
static KStaticDeleter<ConnectionManager> deleter;
|
|
if(!s_self)
|
|
deleter.setObject( s_self, new ConnectionManager( 0, "connection_manager" ) );
|
|
return s_self;
|
|
}
|
|
|
|
void ConnectionManager::initialise()
|
|
{
|
|
// determine initial state and set the state object accordingly.
|
|
d->status = ( NetworkStatus::Status )d->service->status();
|
|
}
|
|
|
|
NetworkStatus::Status ConnectionManager::status()
|
|
{
|
|
return d->status;
|
|
}
|
|
|
|
void ConnectionManager::slotStatusChanged( int status )
|
|
{
|
|
d->status = ( NetworkStatus::Status )status;
|
|
switch ( status ) {
|
|
case NetworkStatus::NoNetworks:
|
|
break;
|
|
case NetworkStatus::Unreachable:
|
|
break;
|
|
case NetworkStatus::OfflineDisconnected:
|
|
case NetworkStatus::OfflineFailed:
|
|
case NetworkStatus::ShuttingDown:
|
|
case NetworkStatus::Offline:
|
|
case NetworkStatus::Establishing:
|
|
if ( d->disconnectPolicy == Managed ) {
|
|
emit d->disconnected();
|
|
} else if ( d->disconnectPolicy == OnNextChange ) {
|
|
setDisconnectPolicy( Manual );
|
|
emit d->disconnected();
|
|
}
|
|
break;
|
|
case NetworkStatus::Online:
|
|
if ( d->disconnectPolicy == Managed ) {
|
|
emit d->connected();
|
|
} else if ( d->disconnectPolicy == OnNextChange ) {
|
|
setConnectPolicy( Manual );
|
|
emit d->connected();
|
|
}
|
|
break;
|
|
default:
|
|
kdDebug() << k_funcinfo << "Unrecognised status code!" << endl;
|
|
}
|
|
emit statusChanged( d->status );
|
|
}
|
|
|
|
ConnectionManager::ConnectionPolicy ConnectionManager::connectPolicy() const
|
|
{
|
|
return d->connectPolicy;
|
|
}
|
|
|
|
void ConnectionManager::setConnectPolicy( ConnectionManager::ConnectionPolicy policy )
|
|
{
|
|
d->connectPolicy = policy;
|
|
}
|
|
|
|
ConnectionManager::ConnectionPolicy ConnectionManager::disconnectPolicy() const
|
|
{
|
|
return d->disconnectPolicy;
|
|
}
|
|
|
|
void ConnectionManager::setDisconnectPolicy( ConnectionManager::ConnectionPolicy policy )
|
|
{
|
|
d->disconnectPolicy = policy;
|
|
}
|
|
|
|
void ConnectionManager::setManualConnectionPolicies()
|
|
{
|
|
d->connectPolicy = ConnectionManager::Manual;
|
|
d->disconnectPolicy = ConnectionManager::Manual;
|
|
}
|
|
|
|
void ConnectionManager::setManagedConnectionPolicies()
|
|
{
|
|
d->connectPolicy = ConnectionManager::Managed;
|
|
d->disconnectPolicy = ConnectionManager::Managed;
|
|
}
|
|
|
|
void ConnectionManager::registerConnectSlot( TQObject * receiver, const char * member )
|
|
{
|
|
d->connectReceiver = receiver;
|
|
d->connectSlot = member;
|
|
connect( d, TQT_SIGNAL( connected() ), receiver, member );
|
|
}
|
|
|
|
void ConnectionManager::forgetConnectSlot()
|
|
{
|
|
disconnect( d, TQT_SIGNAL( connected() ), d->connectReceiver, d->connectSlot );
|
|
d->connectReceiver = 0;
|
|
d->connectSlot = 0;
|
|
}
|
|
|
|
bool ConnectionManager::isConnectSlotRegistered() const
|
|
{
|
|
return ( d->connectSlot != 0 );
|
|
}
|
|
|
|
void ConnectionManager::registerDisconnectSlot( TQObject * receiver, const char * member )
|
|
{
|
|
d->disconnectReceiver = receiver;
|
|
d->disconnectSlot = member;
|
|
connect( d, TQT_SIGNAL( disconnected() ), receiver, member );
|
|
}
|
|
|
|
void ConnectionManager::forgetDisconnectSlot()
|
|
{
|
|
disconnect( d, TQT_SIGNAL( disconnected() ), d->disconnectReceiver, d->disconnectSlot );
|
|
d->disconnectReceiver = 0;
|
|
d->disconnectSlot = 0;
|
|
}
|
|
|
|
bool ConnectionManager::isDisconnectSlotRegistered() const
|
|
{
|
|
return ( d->disconnectSlot != 0 );
|
|
}
|
|
|
|
#include "connectionmanager.moc"
|
|
|