// Copyright 2011 Simon Edwards <simon@simonzone.com>

//                 Generated by twine2

// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU Library General Public License as
// published by the Free Software Foundation; either version 2, or
// (at your option) any later version.

// This program 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 Library General Public
// License along with this program; if not, write to the
// Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

namespace KTextEditor
{
class MovingCursor /Abstract/
{
%TypeHeaderCode
#include <ktexteditor/movingcursor.h>
%End
public:
    enum InsertBehavior
    {
        StayOnInsert,
        MoveOnInsert
    };
    enum WrapBehavior
    {
        Wrap,
        NoWrap
    };

    virtual void            setInsertBehavior (KTextEditor::MovingCursor::InsertBehavior insertBehavior)=0;
    virtual KTextEditor::MovingCursor::InsertBehavior  insertBehavior () const=0;
    virtual KTextEditor::Document*  document () const=0;
    virtual KTextEditor::MovingRange*  range () const=0;
    virtual void            setPosition (const KTextEditor::Cursor& position)=0;
    virtual int             line () const=0;
    virtual int             column () const=0;
    virtual ~MovingCursor ();

protected:
                            MovingCursor ();
private:
                            MovingCursor (const KTextEditor::MovingCursor&);
public:
    bool                    isValid () const;
    bool                    isValidTextPosition () const;
    void                    setPosition (int line, int column);
    void                    setLine (int line);
    void                    setColumn (int column);
    bool                    atStartOfLine () const;
    bool                    atEndOfLine () const;
    bool                    atStartOfDocument () const;
    bool                    atEndOfDocument () const;
    bool                    gotoNextLine ();
    bool                    gotoPreviousLine ();
    bool                    move (int chars, KTextEditor::MovingCursor::WrapBehavior wrapBehavior = KTextEditor::MovingCursor::Wrap);
    const KTextEditor::Cursor  toCursor () const;
//ig    const Cursor            operator const Cursor () const;
//ig    bool                    operator == (const KTextEditor::MovingCursor& c1, const KTextEditor::MovingCursor& c2);
//ig    bool                    operator != (const KTextEditor::MovingCursor& c1, const KTextEditor::MovingCursor& c2);
//ig    bool                    operator > (const KTextEditor::MovingCursor& c1, const KTextEditor::MovingCursor& c2);
//ig    bool                    operator >= (const KTextEditor::MovingCursor& c1, const KTextEditor::MovingCursor& c2);
//ig    bool                    operator < (const KTextEditor::MovingCursor& c1, const KTextEditor::MovingCursor& c2);
//ig    bool                    operator <= (const KTextEditor::MovingCursor& c1, const KTextEditor::MovingCursor& c2);
//ig    QDebug                  operator << (QDebug s, const KTextEditor::MovingCursor* cursor);
//ig    QDebug                  operator << (QDebug s, const KTextEditor::MovingCursor& cursor);
};
};
