/* * Copyright 2006-2007 Aaron Seigo * * 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 #include #include #include 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 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(); 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(); 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); protected: void disconnectNotify(const char *signal); private: class Private; Private* const d; }; } // Plasma namespace #endif // multiple inclusion guard