// 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 Service : QObject
{
%TypeHeaderCode
#include <plasma/service.h>
%End

public:
    static Plasma::Service*  load (const QString& name, QObject* parent /Transfer/ = 0);
    void                    setDestination (const QString& destination);
    QString                 destination () const;
    QStringList             operationNames () const;
    KConfigGroup            operationDescription (const QString& operationName);
    Plasma::ServiceJob*     startOperationCall (const KConfigGroup& description, QObject* parent /Transfer/ = 0);
    bool                    isOperationEnabled (const QString& operation) const;
    QString                 name () const;
    void                    associateWidget (QWidget* widget, const QString& operation);
    void                    disassociateWidget (QWidget* widget);
    void                    associateWidget (QGraphicsWidget* widget, const QString& operation);
    void                    disassociateWidget (QGraphicsWidget* widget);

signals:
    void                    finished (Plasma::ServiceJob* job);
    void                    operationsChanged ();

protected:
    explicit                Service (QObject* parent /TransferThis/ = 0);
                            Service (QObject* parent /TransferThis/, const QVariantList& args);
    virtual Plasma::ServiceJob*  createJob (const QString& operation, QMap<QString,QVariant>& parameters)=0;
    virtual void            registerOperationsScheme ();
    void                    setOperationsScheme (QIODevice* xml);
    void                    setName (const QString& name);
    void                    setOperationEnabled (const QString& operation, bool enable);
public:
    ~Service ();
    static Plasma::Service*  access (const KUrl& url, QObject* parent /Transfer/ = 0);
    QMap<QString,QVariant>  parametersFromDescription (const KConfigGroup& description);
signals:
    void                    serviceReady (Plasma::Service* service);
public:
    static Plasma::Service*  load (const QString& name, const QVariantList& args, QObject* parent /Transfer/ = 0);
};
// Service

};
// Plasma
