/*  This file is part of the KDE project
    Copyright (C) 2007 Matthias Kretz <kretz@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 as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) version 3.

    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 PROXYOBJECT_H
#define PROXYOBJECT_H

#include <QtCore/QVariant>
#include <Phonon/BackendInterface>
#include "comm.h"

namespace Phonon
{
namespace Proxy
{

class ProxyObject
{
    public:
        virtual ~ProxyObject();

        virtual void handleSignal(SignalId, QDataStream &) const { qFatal("unhandled signal"); }
        inline bool isValid() const { return m_valid; }

        virtual QObject *qObject() = 0;

    protected:
        ProxyObject();
        void createProxiedObject(BackendInterface::Class c, const QVariantList &args = QVariantList());
        inline void makeInvalid() { m_valid = false; }

        QDataStream &send(FunctionId) const;
        QDataStream &receive(FunctionId) const;

    private:
        bool m_valid;
        void *m_objectPtr;
};

} // namespace Proxy
} // namespace Phonon

//Q_DECLARE_METATYPE(Phonon::Proxy::ProxyObject);

#endif // PROXYOBJECT_H
