//
//     Copyright 2008 Jim Bublitz <jbublitz@nwinternet.com>
//     Earlier copyrights 1998 - 2007 Jim Bublitz also apply

//                 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/>.

typedef QPair<QString,unsigned short> ACLUserPermissions;

//ig typedef QList<ACLUserPermissions> ACLUserPermissionsList;

//ig typedef QList<ACLUserPermissions>::iterator ACLUserPermissionsIterator;

//ig typedef QList<ACLUserPermissions>::const_iterator ACLUserPermissionsConstIterator;

typedef QPair<QString,unsigned short> ACLGroupPermissions;

//ig typedef QList<ACLGroupPermissions> ACLGroupPermissionsList;

//ig typedef QList<ACLGroupPermissions>::iterator ACLGroupPermissionsIterator;

//ig typedef QList<ACLGroupPermissions>::const_iterator ACLGroupPermissionsConstIterator;

%ModuleHeaderCode
#include <kacl.h>
%End


class KACL
{
%TypeHeaderCode
#include <kacl.h>
%End


public:
                            KACL (const QString& aclString);
                            KACL (const KACL& rhs);
                            KACL (mode_t basicPermissions);
                            KACL ();
    bool                    operator == (const KACL& rhs) const;
    bool                    operator != (const KACL& rhs) const;
    bool                    isValid () const;
    unsigned short          ownerPermissions () const;
    bool                    setOwnerPermissions (unsigned short);
    unsigned short          owningGroupPermissions () const;
    bool                    setOwningGroupPermissions (unsigned short);
    unsigned short          othersPermissions () const;
    bool                    setOthersPermissions (unsigned short);
    mode_t                  basePermissions () const;
    bool                    isExtended () const;
    unsigned short          maskPermissions (bool& exists /Out/) const;
    bool                    setMaskPermissions (unsigned short);
    unsigned short          namedUserPermissions (const QString& name, bool* exists /Out/) const;
    bool                    setNamedUserPermissions (const QString& name, unsigned short);
    ACLUserPermissionsList  allUserPermissions () const;
    bool                    setAllUserPermissions (const ACLUserPermissionsList& list);
    unsigned short          namedGroupPermissions (const QString& name, bool* exists /Out/) const;
    bool                    setNamedGroupPermissions (const QString& name, unsigned short);
    ACLGroupPermissionsList  allGroupPermissions () const;
    bool                    setAllGroupPermissions (const ACLGroupPermissionsList&);
    bool                    setACL (const QString& aclStr);
    QString                 asString () const;

protected:
//ig    virtual void            virtual_hook (int id, void* data);
public:
    ~KACL ();
};
// KACL


//force
//ig typedef QList<QPair<QString,ushort>> ACLUserPermissionsList;

//ig typedef QList<QPair<QString,ushort>> ACLGroupPermissionsList;

typedef ACLUserPermissionsList ACLGroupPermissionsList;




%MappedType ACLUserPermissionsList
{
%TypeHeaderCode
#include <qlist.h>
%End

%ConvertFromTypeCode
    if (!sipCpp)
        return PyList_New(0);

    // Create the list
    PyObject *pylist;
    if ((pylist = PyList_New(0)) == NULL)
        return NULL;

    QList<QPair<QString, unsigned short> > *cpplist = (QList<QPair<QString, unsigned short> > *)sipCpp;
    PyObject *inst = NULL;

    // Get it.
    QList<QPair<QString, unsigned short> >::Iterator it;
    for( it = cpplist->begin(); it != cpplist->end(); ++it )
    {
        QString s = (*it).first;
        ushort  u = (*it).second;
        PyObject *pys = sipBuildResult (NULL, "N", new QString (s), sipType_QString);
        if ((pys == NULL) || ((inst = Py_BuildValue ("Ni", pys, u)) == NULL)
            || PyList_Append (pylist, inst) < 0)
        {
            Py_XDECREF (inst);
            Py_XDECREF (pys);
            Py_DECREF (pylist);
            return NULL;
        }
    }

    return pylist;
%End


%ConvertToTypeCode
    if (sipIsErr == NULL)
        return PyList_Check(sipPy);

    QList<QPair<QString, unsigned short> > *cpplist = new QList<QPair<QString, unsigned short> >;

    QString p1;
    int iserr = 0;

    for (int i = 0; i < PyList_Size (sipPy); i++)
    {
        PyObject *elem = PyList_GET_ITEM (sipPy, i);
        PyObject *pyp1 = PyTuple_GET_ITEM (elem, 0);
        p1 = *(QString *)sipForceConvertToType(pyp1, sipType_QString, NULL, 0, NULL, &iserr);
        if (iserr)
        {
            *sipIsErr = 1;
            delete cpplist;
            return 0;
        }
#if PY_MAJOR_VERSION >= 3
        ushort p2 = (ushort)(PyLong_AsLong (PyTuple_GET_ITEM (elem, 1)));
#else
        ushort p2 = (ushort)(PyInt_AS_LONG (PyTuple_GET_ITEM (elem, 1)));
#endif
        cpplist->append (QPair<QString, unsigned short> (p1, p2));
    }

    *sipCppPtr = cpplist;

    return 1;
%End
};

//end
QDataStream&            operator << (QDataStream& s, const KACL& a);
QDataStream&            operator >> (QDataStream& s, KACL& a);
