// Copyright 2008 Simon Edwards <simon@simonzone.com>

//                 Generated by twine

// This program 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, 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 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.


namespace Plasma
{

class DataEngine : QObject
{
%TypeHeaderCode
#include <plasma/dataengine.h>
%End


public:
    typedef QHash<QString,Plasma::DataEngine*> Dict;

    typedef QHash<QString,QVariant> Data;

//mt undefined symbol: QHashIterator<QString,QVariant> -- need mapped type?
//mt     typedef QHashIterator<QString,QVariant> DataIterator;

    typedef QHash<QString,Plasma::DataContainer*> SourceDict;

    explicit                DataEngine (QObject* parent /TransferThis/ = 0, KService::Ptr service = KService::Ptr(0));
                            DataEngine (QObject* parent /TransferThis/, const QVariantList& args);
    virtual void            init ();
    virtual QStringList     sources () const;
    virtual Plasma::Service*  serviceForSource (const QString& source);
    QString                 name () const;
    void                    connectSource (const QString& source, QObject* visualization, uint pollingInterval = 0, Plasma::IntervalAlignment intervalAlignment = Plasma::NoAlignment) const;
    void                    connectAllSources (QObject* visualization, uint pollingInterval = 0, Plasma::IntervalAlignment intervalAlignment = Plasma::NoAlignment) const;
    void                    disconnectSource (const QString& source, QObject* visualization) const;
    Plasma::DataContainer*  containerForSource (const QString& source);
    Plasma::DataEngine::Data  query (const QString& source) const;
    bool                    isValid () const;
    bool                    isEmpty () const;
    uint                    maxSourceCount () const;
    QString                 icon () const;
    const Plasma::Package*  package () const;
    QString                 pluginName () const;

signals:
    void                    sourceAdded (const QString& source);
    void                    sourceRemoved (const QString& source);

protected:
    virtual bool            sourceRequestEvent (const QString& source);
    virtual bool            updateSourceEvent (const QString& source);
    void                    setData (const QString& source, const QVariant& value);
    void                    setData (const QString& source, const QString& key, const QVariant& value);
    void                    setData (const QString& source, const Plasma::DataEngine::Data& data);
    void                    removeAllData (const QString& source);
    void                    removeData (const QString& source, const QString& key);
    void                    addSource (Plasma::DataContainer* source);
    void                    setMaxSourceCount (uint limit);
    void                    setMinimumPollingInterval (int minimumMs);
    int                     minimumPollingInterval () const;
    void                    setPollingInterval (uint frequency);
    void                    removeAllSources ();
    void                    setValid (bool valid);
    Plasma::DataEngine::SourceDict  containerDict () const;
    void                    timerEvent (QTimerEvent* event);
    void                    setName (const QString& name);
    void                    setIcon (const QString& icon);
    void                    scheduleSourcesUpdated ();
    void                    removeSource (const QString& source);
    void                    updateAllSources ();

};   // DataEngine

};   // Plasma


