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


class KWidgetItemDelegate : QAbstractItemDelegate
{
%TypeHeaderCode
#include <kwidgetitemdelegate.h>
%End

public:
    explicit                KWidgetItemDelegate (QAbstractItemView* itemView, QObject* parent /TransferThis/ = 0);
    QAbstractItemView*      itemView () const;
    QPersistentModelIndex   focusedIndex () const;

protected:
    virtual QList<QWidget*>  createItemWidgets () const=0;
    virtual void            updateItemWidgets (const QList<QWidget*> widgets, const QStyleOptionViewItem& option, const QPersistentModelIndex& index) const=0;
    void                    paintWidgets (QPainter* painter, const QStyleOptionViewItem& option, const QPersistentModelIndex& index) const;
    void                    setBlockedEventTypes (QWidget* widget, QList<QEvent::Type> types) const;
    QList<QEvent::Type>     blockedEventTypes (QWidget* widget) const;
public:
    ~KWidgetItemDelegate ();
};
// KWidgetItemDelegate

%MappedType QList<QEvent::Type>
{
%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) {
        PyObject *pobj;

#if PY_MAJOR_VERSION >= 3
        if ((pobj = PyLong_FromLong ((long)sipCpp->value(i))) == NULL) {
#else
        if ((pobj = PyInt_FromLong ((long)sipCpp->value(i))) == NULL) {
#endif            
            Py_DECREF(l);

            return NULL;
        }

        PyList_SET_ITEM(l, i, pobj);
    }

    return l;
%End

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

    QList<QEvent::Type> *ql = new QList<QEvent::Type>;
 
    for (int i = 0; i < PyList_GET_SIZE(sipPy); ++i) {
#if PY_MAJOR_VERSION >= 3
        ql->append((QEvent::Type)PyLong_AsLong(PyList_GET_ITEM(sipPy, i)));
#else
        ql->append((QEvent::Type)PyInt_AS_LONG (PyList_GET_ITEM(sipPy, i)));
#endif
    }
    
    *sipCppPtr = ql;
 
    return sipGetState(sipTransferObj);
%End
};

