//
//     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 ();

public:
    virtual uint         mark (int)  = 0;
    virtual void         setMark (int, uint)  = 0;
    virtual void         clearMark (int)  = 0;
    virtual void         addMark (int, uint)  = 0;
    virtual void         removeMark (int, uint)  = 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
    };


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

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

    enum MarkChangeAction
    {
        MarkAdded, 
        MarkRemoved
    };


public:
    virtual void         markChanged (KTextEditor::Document*, KTextEditor::Mark, KTextEditor::MarkInterface::MarkChangeAction)  = 0;
private:
                         MarkInterface (const KTextEditor::MarkInterface &other);
};  // 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();

        PyObject *t1obj = PyInt_FromLong ((long)t1);
        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 (!PyInt_Check (t1obj))
                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;

        int t1 = PyInt_AS_LONG (t1obj);
        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
};


