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.
134 lines
4.3 KiB
134 lines
4.3 KiB
/* This file is part of the KDE project
|
|
Copyright (C) 2003 Matthias Kretz <kretz@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; 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 KSETTINGS_DISPATCHER_H
|
|
#define KSETTINGS_DISPATCHER_H
|
|
|
|
#include <qobject.h>
|
|
#include <qmap.h>
|
|
#include <kdelibs_export.h>
|
|
|
|
class QCString;
|
|
class QSignal;
|
|
class QStrList;
|
|
template<class T> class KStaticDeleter;
|
|
class KInstance;
|
|
class KConfig;
|
|
|
|
namespace KSettings
|
|
{
|
|
|
|
/**
|
|
* @ingroup settings
|
|
* @short Dispatch change notifications from the KCMs to the program.
|
|
*
|
|
* Since your program does not have direct control over the KCMs that get loaded
|
|
* into the KConfigureDialog you need a way to get notified. This is what you
|
|
* do:
|
|
* \code
|
|
* Dispatcher::self()->registerInstance( instance(), this, SLOT( loadSettings() ) );
|
|
* \endcode
|
|
*
|
|
* @author Matthias Kretz <kretz@kde.org>
|
|
* @since 3.2
|
|
*/
|
|
class KUTILS_EXPORT Dispatcher : public QObject
|
|
{
|
|
friend class KStaticDeleter<Dispatcher>;
|
|
|
|
Q_OBJECT
|
|
public:
|
|
/**
|
|
* Get a reference the the Dispatcher object.
|
|
*/
|
|
static Dispatcher * self();
|
|
|
|
/**
|
|
* Register a slot to be called when the configuration for the instance
|
|
* has changed. @p instance is the KInstance object
|
|
* that is passed to KGenericFactory (if it is used). You can query
|
|
* it with KGenericFactory<YourClassName>::instance().
|
|
* instance->instanceName() is also the same name that is put into the
|
|
* .desktop file of the KCMs for the X-KDE-ParentComponents.
|
|
*
|
|
* @param instance The KInstance object
|
|
* @param recv The object that should receive the signal
|
|
* @param slot The slot to be called: SLOT( slotName() )
|
|
*/
|
|
void registerInstance( KInstance * instance, QObject * recv, const char * slot );
|
|
|
|
/**
|
|
* @return the KConfig object that belongs to the instanceName
|
|
*/
|
|
KConfig * configForInstanceName( const QCString & instanceName );
|
|
|
|
/**
|
|
* @return a list of all the instance names that are currently
|
|
* registered
|
|
*/
|
|
QStrList instanceNames() const;
|
|
|
|
//X /**
|
|
//X * @return The KInstance object belonging to the instance name you pass
|
|
//X * (only works for registered instances of course).
|
|
//X */
|
|
//X KInstance * instanceForName( const QCString & instanceName );
|
|
|
|
public slots:
|
|
/**
|
|
* Call this slot when the configuration belonging to the associated
|
|
* instance name has changed. The registered slot will be called.
|
|
*
|
|
* @param instanceName The value of X-KDE-ParentComponents.
|
|
*/
|
|
void reparseConfiguration( const QCString & instanceName );
|
|
|
|
/**
|
|
* When this slot is called the KConfig objects of all the registered
|
|
* instances are sync()ed. This is usefull when some other KConfig
|
|
* objects will read/write from/to the same config file, so that you
|
|
* can first write out the current state of the KConfig objects.
|
|
*/
|
|
void syncConfiguration();
|
|
|
|
private slots:
|
|
void unregisterInstance( QObject * );
|
|
|
|
private:
|
|
Dispatcher( QObject * parent = 0, const char * name = 0 );
|
|
~Dispatcher();
|
|
static Dispatcher * m_self;
|
|
|
|
struct InstanceInfo {
|
|
KInstance * instance;
|
|
QSignal * signal;
|
|
int count;
|
|
};
|
|
QMap<QCString, InstanceInfo> m_instanceInfo;
|
|
QMap<QObject *, QCString> m_instanceName;
|
|
|
|
class DispatcherPrivate;
|
|
DispatcherPrivate * d;
|
|
};
|
|
|
|
}
|
|
|
|
// vim: sw=4 sts=4 et
|
|
#endif // KSETTINGS_DISPATCHER_H
|