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


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

namespace KTextEditor
{

class Mark
{
%TypeHeaderCode
#include <ktexteditor/markinterface.h>
%End


public:
    int line;
    uint type;

};
// class Mark


class MarkInterface
{
%TypeHeaderCode
#include <ktexteditor/markinterface.h>
%End


public:
                            MarkInterface ();

    virtual uint            mark (int line)=0;
    virtual void            setMark (int line, uint markType)=0;
    virtual void            clearMark (int line)=0;
    virtual void            addMark (int line, uint markType)=0;
    virtual void            removeMark (int line, uint markType)=0;
    virtual const QHash<int,KTextEditor::Mark*>&  marks ()=0;
    virtual void            clearMarks ()=0;
    static int              reservedMarkersCount ();

    enum MarkTypes
    {
        markType01,
        markType02,
        markType03,
        markType04,
        markType05,
        markType06,
        markType07,
        markType08,
        markType09,
        markType10,
        markType11,
        markType12,
        markType13,
        markType14,
        markType15,
        markType16,
        markType17,
        markType18,
        markType19,
        markType20,
        markType21,
        markType22,
        markType23,
        markType24,
        markType25,
        markType26,
        markType27,
        markType28,
        markType29,
        markType30,
        markType31,
        markType32,
        Bookmark,
        BreakpointActive,
        BreakpointReached,
        BreakpointDisabled,
        Execution,
        Warning,
        Error
    };


    virtual void            marksChanged (KTextEditor::Document* document)=0;

    virtual void            setMarkPixmap (KTextEditor::MarkInterface::MarkTypes mark, const QPixmap& pixmap)=0;
    virtual QPixmap         markPixmap (KTextEditor::MarkInterface::MarkTypes mark) const=0;
    virtual void            setMarkDescription (KTextEditor::MarkInterface::MarkTypes mark, const QString& text)=0;
    virtual QString         markDescription (KTextEditor::MarkInterface::MarkTypes mark) const=0;
    virtual void            setEditableMarks (uint markMask)=0;
    virtual uint            editableMarks () const=0;

    enum MarkChangeAction
    {
        MarkAdded,
        MarkRemoved
    };


    virtual void            markChanged (KTextEditor::Document* document, KTextEditor::Mark mark, KTextEditor::MarkInterface::MarkChangeAction action)=0;
    virtual ~MarkInterface ();
signals:
//ig    void                    markToolTipRequested (KTextEditor::Document* document, KTextEditor::Mark mark, QPoint position, bool& handled);
//ig    void                    markContextMenuRequested (KTextEditor::Document* document, KTextEditor::Mark mark, QPoint pos, bool& handled);
//ig    void                    markClicked (KTextEditor::Document* document, KTextEditor::Mark mark, bool& handled);
};
// class MarkInterface

};
// namespace KTextEditor



%MappedType QHash<int,KTextEditor::Mark*>
{
%TypeHeaderCode
#include <qhash.h>
%End

%ConvertFromTypeCode
    // Create the dictionary.
    PyObject *d = PyDict_New();

    if (!d)
        return NULL;

    // Set the dictionary elements.
    QHash<int, KTextEditor::Mark*>::const_iterator i = sipCpp->constBegin();

    while (i != sipCpp->constEnd())
    {
        int t1 = i.key();
        KTextEditor::Mark *t2 = i.value();

#if PY_MAJOR_VERSION >= 3
        PyObject *t1obj = PyLong_FromLong ((long)t1);
#else
        PyObject *t1obj = PyInt_FromLong ((long)t1);
#endif
        PyObject *t2obj = sipConvertFromNewInstance(t2, sipClass_KTextEditor_Mark, sipTransferObj);

        if (t2obj == NULL || PyDict_SetItem(d, t1obj, t2obj) < 0)
        {
            Py_DECREF(d);

            if (t1obj)
                Py_DECREF(t1obj);

            if (t2obj)
                Py_DECREF(t2obj);
            else
                delete t2;

            return NULL;
        }

        Py_DECREF(t1obj);
        Py_DECREF(t2obj);

        ++i;
    }

    return d;
%End

%ConvertToTypeCode
    PyObject *t1obj, *t2obj;
    SIP_SSIZE_T i = 0;

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

        while (PyDict_Next(sipPy, &i, &t1obj, &t2obj))
        {
#if PY_MAJOR_VERSION >= 3
            if (!PyNumber_Check (t1obj))
#else
            if (!PyInt_Check (t1obj))
#endif
                return 0;

            if (!sipCanConvertToInstance(t2obj, sipClass_KTextEditor_Mark, SIP_NOT_NONE))
                return 0;
        } 

        return 1;
    }

    QHash<int, KTextEditor::Mark*> *qm = new QHash<int, KTextEditor::Mark*>;
 
    while (PyDict_Next(sipPy, &i, &t1obj, &t2obj))
    {
        int state2;

#if PY_MAJOR_VERSION >= 3
        int t1 = PyLong_AsLong (t1obj);
#else
        int t1 = PyInt_AS_LONG (t1obj);
#endif
        KTextEditor::Mark *t2 = reinterpret_cast<KTextEditor::Mark *>(sipConvertToInstance(t2obj, sipClass_KTextEditor_Mark, sipTransferObj, SIP_NOT_NONE, &state2, sipIsErr));
 
        if (*sipIsErr)
        {
            sipReleaseInstance(t2, sipClass_KTextEditor_Mark, state2);

            delete qm;
            return 0;
        }

        qm->insert(t1, t2);

        sipReleaseInstance(t2, sipClass_KTextEditor_Mark, state2);
    }
 
    *sipCppPtr = qm;
 
    return sipGetState(sipTransferObj);
%End
};


