plasma-framework/datacontainer.h
Aaron J. Seigo fc89eff135 first run at per-visualization timeouts, as per the design worked out on panel-devel.
i'm sure there are several bugs at this point (so don't try and use it quite yet ;) but most importantly:

- all methods are implemented
- it compiles ;)
- it does not have any negative impact on existing engines and applets as they currently are written

next will be to put it all through its paces, starting with the time engine and analog clock applet. i may not get to that until tomorrow, hoever.

this commit also fixed a number of buglettes along the way that had creeped in, e.g. not properly connecting all signals in connectAllSources (moved that ccode to the Private class to avoid code dupe and similar bugs in the future)

svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=710849
2007-09-11 00:49:51 +00:00

132 lines
4.2 KiB
C++

/*
* Copyright 2006-2007 Aaron Seigo <aseigo@kde.org>
*
* This program 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 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 Library 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.
*/
#ifndef PLASMA_DATACONTAINER_H
#define PLASMA_DATACONTAINER_H
#include <QtCore/QHash>
#include <QtCore/QObject>
#include <plasma/plasma_export.h>
#include <plasma/dataengine.h>
namespace Plasma
{
/**
* @brief A set of data exported via a DataEngine
*
* Plasma::DataContainer wraps the data exported by a DataEngine
* implementation, providing a generic wrapper for the data.
*
* A DataContainer may have zero or more associated pieces of data which
* are keyed by strings. The data itself is stored as QVariants. This allows
* easy and flexible retrieval of the information associated with this object
* without writing DataContainer or DataEngine specific code in visualizations.
**/
class PLASMA_EXPORT DataContainer : public QObject
{
Q_OBJECT
public:
//typedef QHash<QString, DataEngine::SourceDict> Grouping;
/**
* Constructs a default DataContainer, which has no name or data
* associated with it
**/
explicit DataContainer(QObject* parent = 0);
virtual ~DataContainer();
/**
* Returns the data for this DataContainer
**/
const DataEngine::Data data() const;
/**
* Set a value for a key. This also marks this source as needing
* to signal an update. After calling this, a call to checkForUpdate()
* is done by the engine. This allows for batching updates.
*
* @param key a string used as the key for the data
* @param value a QVariant holding the actual data. If a null or invalid
* QVariant is passed in and the key currently exists in the
* data, then the data entry is removed
**/
void setData(const QString& key, const QVariant& value);
/**
* Clears all data currently associated with this source
**/
void clearData();
/**
* Checks for whether the data has changed and therefore an update
* signal needs to be emitted.
**/
void checkForUpdate();
/**
* Returns a QObject that can be used to relay the updated() signal
* at a given timing frequency independantly.
**/
QObject* signalRelay(QObject *visualization, uint updateInterval) const;
public Q_SLOTS:
/**
* Check if the DataContainer is still in use.
* If not the signal "unused" will be emitted.
* Warning: The DataContainer may be invalid after calling this function.
*/
void checkUsage();
/**
* Disconnects an object from this DataContainer.
**/
void disconnectVisualization(QObject* visualization);
Q_SIGNALS:
/**
* Emitted when the data has been updated, allowing visualization to
* reflect the new data.
**/
void updated(const QString& source, const Plasma::DataEngine::Data& data);
/**
* Emitted when this source becomes unused
**/
void unused(const QString& source);
/**
* Emitted when the source, usually due to an internal timer firing,
* requests to be updated.
**/
void requestUpdate(const QString& source);
protected:
void disconnectNotify(const char *signal);
private:
friend class SignalRelay;
class Private;
Private* const d;
};
} // Plasma namespace
#endif // multiple inclusion guard