//
//     Copyright 2007 Jim Bublitz <jbublitz@nwinternet.com>


//                 Generated by preSip


// 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
//ctscc
#include <kservicegroup.h>
%End


class KServiceGroup : KSycocaEntry
{
%TypeHeaderCode
#include <kservicegroup.h>
%End


public:
    typedef KSharedPtr<KServiceGroup> Ptr;
//ig     typedef KSharedPtr<KSycocaEntry> SPtr;
//ig     typedef QList<KServiceGroup::SPtr> List;

public:
                         KServiceGroup (const QString&);
                         KServiceGroup (const QString&, const QString&);
                         KServiceGroup (QDataStream&, int, bool);
    bool                 isValid () const;
    virtual QString      name () const;
    virtual QString      relPath () const;
    QString              caption () const;
    QString              icon () const;
    QString              comment () const;
    int                  childCount ();
    bool                 noDisplay () const;
    bool                 showEmptyMenu () const;
    void                 setShowEmptyMenu (bool);
    bool                 showInlineHeader () const;
    void                 setShowInlineHeader (bool);
    bool                 inlineAlias () const;
    void                 setInlineAlias (bool);
    bool                 allowInline () const;
    void                 setAllowInline (bool);
    int                  inlineValue () const;
    void                 setInlineValue (int);
    QStringList          suppressGenericNames () const;
    void                 setLayoutInfo (const QStringList&);
    QStringList          layoutInfo () const;
    virtual void         load (QDataStream&);
    virtual void         save (QDataStream&);
    KServiceGroup::List  entries (bool, bool, bool, bool = 0);
    virtual KSycocaEntry::List entries (bool, bool);
    virtual KServiceGroup::List entries (bool = 0);
    QString              baseGroupName () const;
    QString              directoryEntryPath () const;
    static KServiceGroup::Ptr baseGroup (const QString&);
    static KServiceGroup::Ptr root ();
    static KServiceGroup::Ptr group (const QString&);
    static KServiceGroup::Ptr childGroup (const QString& /Transfer/);
    void                 parseAttribute (const QString&, bool& /Out/, bool& /Out/, bool& /Out/, bool& /Out/, int& /Out/);

protected:
//ig     void                 addEntry (const KSycocaEntry::Ptr&);

protected:
//igx     virtual void         virtual_hook (int, void*);

public:
//force
    typedef KSycocaEntry::Ptr SPtr;
//end


protected:
//force
    void                 addEntry (const KServiceGroup::SPtr&);

// Subclasses for KSycocaEntry

public:
%ConvertToSubClassCode

    if (dynamic_cast<KServiceGroup*>(sipCpp))
        sipClass = sipClass_KServiceGroup;
    else if (dynamic_cast<KServiceSeparator*>(sipCpp))
        sipClass = sipClass_KServiceSeparator;
    else
        sipClass = NULL;
%End

//end


};  // class KServiceGroup


class KServiceSeparator : KSycocaEntry
{
%TypeHeaderCode
#include <kservicegroup.h>
%End


public:
//ig     typedef KSharedPtr<KServiceSeparator> Ptr;

public:
                         KServiceSeparator ();
    bool                 isValid () const;
    virtual QString      name () const;
    virtual void         load (QDataStream&);
    virtual void         save (QDataStream&);

};  // class KServiceSeparator



%MappedType KServiceGroup::List
{
%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)
    {
        KServiceGroup::SPtr *t = new KServiceGroup::SPtr (sipCpp->at(i));
        PyObject *tobj;

        if ((tobj = sipConvertFromNewInstance(t->data(), sipClass_KServiceGroup, 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_KServiceGroup, SIP_NOT_NONE))
                return 0;

        return 1;
    }

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

            delete ql;
            return 0;
        }

        KServiceGroup::SPtr *tptr = new KServiceGroup::SPtr (t);

        ql->append(*tptr);

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


