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

//                 Generated by twine

// This file is part of PyKDE4.

// PyKDE4 is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of
// the License, or (at your option) any later version.

// PyKDE4 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 General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

%ModuleHeaderCode
#include <phonon/objectdescription.h>
%End
namespace Phonon
{

enum ObjectDescriptionType
{
    AudioOutputDeviceType,
    EffectType,
    AudioChannelType,
    SubtitleType,
    AudioCaptureDeviceType,
    VideoCaptureDeviceType
};

template <T>
class ObjectDescription
{
%TypeHeaderCode
#include <phonon/objectdescription.h>
%End

public:
    static Phonon::ObjectDescription<T>  fromIndex (int index);
    bool                    operator == (const ObjectDescription& otherDescription) const;
    bool                    operator != (const ObjectDescription& otherDescription) const;
    QString                 name () const;
    QString                 description () const;
    QVariant                property (const char* name) const;
    QList<QByteArray>       propertyNames () const;
    bool                    isValid () const;
    int                     index () const;
                            ObjectDescription ();
                            ObjectDescription (int index, const QHash<QByteArray,QVariant>& properties);

};
// ObjectDescription

typedef Phonon::ObjectDescription<Phonon::AudioOutputDeviceType> AudioOutputDevice;

typedef Phonon::ObjectDescription<Phonon::AudioCaptureDeviceType> AudioCaptureDevice;

typedef Phonon::ObjectDescription<Phonon::VideoCaptureDeviceType> VideoCaptureDevice;

typedef Phonon::ObjectDescription<Phonon::EffectType> EffectDescription;

typedef Phonon::ObjectDescription<Phonon::AudioChannelType> AudioChannelDescription;

typedef Phonon::ObjectDescription<Phonon::SubtitleType> SubtitleDescription;

typedef QPair<QByteArray,QString> DeviceAccess;

typedef QList<QPair<QByteArray,QString>> DeviceAccessList;
// typedef QList<Phonon::DeviceAccess> DeviceAccessList;

class ObjectDescriptionData
{
%TypeHeaderCode
#include <phonon/objectdescription.h>
%End

public:
    bool                    operator == (const Phonon::ObjectDescriptionData& otherDescription) const;
    QString                 name () const;
    QString                 description () const;
    QVariant                property (const char* name) const;
    QList<QByteArray>       propertyNames () const;
    bool                    isValid () const;
    int                     index () const;
    static Phonon::ObjectDescriptionData*  fromIndex (Phonon::ObjectDescriptionType type, int index);
    ~ObjectDescriptionData ();
//ig                            ObjectDescriptionData (ObjectDescriptionPrivate* = 0);
                            ObjectDescriptionData (int index, const QHash<QByteArray,QVariant>& properties);
};
void                    registerMetaTypes ();
};
// Phonon
/*
%MappedType QList<Phonon::ObjectDescription>
{
%TypeHeaderCode
#include <qlist.h>
%End

%ConvertFromTypeCode
    // Create the list.
    PyObject *l;

    if ((l = PyList_New(sipCpp->size())) == NULL)
        return NULL;

    // Set the list elements.
    for (int i = 0; i < sipCpp->size(); ++i)
    {
        DNSSD::RemoteService::Ptr *t = new Phonon::ObjectDescription (sipCpp->at(i));
        PyObject *tobj;

        if ((tobj = sipConvertFromNewInstance(t->data(), sipClass_DNSSD_RemoteService, sipTransferObj)) == NULL)
        {
            Py_DECREF(l);
            delete t;

            return NULL;
        }

        PyList_SET_ITEM(l, i, tobj);
    }

    return l;
%End

%ConvertToTypeCode
    // Check the type if that is all that is required.
    if (sipIsErr == NULL)
    {
        if (!PyList_Check(sipPy))
            return 0;

        for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i)
            if (!sipCanConvertToInstance(PyList_GET_ITEM(sipPy, i), sipClass_DNSSD_RemoteService, SIP_NOT_NONE))
                return 0;

        return 1;
    }

    QList<DNSSD::RemoteService::Ptr> *ql = new QList<DNSSD::RemoteService::Ptr>;
 
    for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i)
    {
        int state;
        DNSSD::RemoteService *t = reinterpret_cast<DNSSD::RemoteService *>(sipConvertToInstance(PyList_GET_ITEM(sipPy, i), sipClass_DNSSD_RemoteService, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
 
        if (*sipIsErr)
        {
            sipReleaseInstance(t, sipClass_DNSSD_RemoteService, state);

            delete ql;
            return 0;
        }

        DNSSD::RemoteService::Ptr *tptr = new DNSSD::RemoteService::Ptr (t);

        ql->append(*tptr);

        sipReleaseInstance(t, sipClass_DNSSD_RemoteService, state);
    }
 
    *sipCppPtr = ql;
 
    return sipGetState(sipTransferObj);
%End
};
*/