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

namespace DOM
{

class RangeException
{
%TypeHeaderCode
#include <dom2_range.h>
%End


public:
                            RangeException (unsigned short _code);
                            RangeException (const DOM::RangeException& other);

    enum RangeExceptionCode
    {
        BAD_BOUNDARYPOINTS_ERR,
        INVALID_NODE_TYPE_ERR,
        _EXCEPTION_OFFSET,
        _EXCEPTION_MAX
    };

    unsigned short code;
};   // RangeException


class Range
{
%TypeHeaderCode
#include <dom2_range.h>
%End


public:
                            Range ();
                            Range (const DOM::Document rootContainer);
                            Range (const DOM::Range& other);
                            Range (const DOM::Node startContainer, const long startOffset, const DOM::Node endContainer, const long endOffset);
    DOM::Node               startContainer () const;
    long                    startOffset () const;
    DOM::Node               endContainer () const;
    long                    endOffset () const;
    bool                    collapsed () const;
    DOM::Node               commonAncestorContainer ();
    void                    setStart (const DOM::Node& refNode, long offset);
    void                    setEnd (const DOM::Node& refNode, long offset);
    void                    setStartBefore (const DOM::Node& refNode);
    void                    setStartAfter (const DOM::Node& refNode);
    void                    setEndBefore (const DOM::Node& refNode);
    void                    setEndAfter (const DOM::Node& refNode);
    void                    collapse (bool toStart);
    void                    selectNode (const DOM::Node& refNode);
    void                    selectNodeContents (const DOM::Node& refNode);

    enum CompareHow
    {
        START_TO_START,
        START_TO_END,
        END_TO_END,
        END_TO_START
    };

    short                   compareBoundaryPoints (DOM::Range::CompareHow how, const DOM::Range& sourceRange);
    bool                    boundaryPointsValid ();
    void                    deleteContents ();
    DOM::DocumentFragment   extractContents ();
    DOM::DocumentFragment   cloneContents ();
    void                    insertNode (const DOM::Node& newNode);
    void                    surroundContents (const DOM::Node& newParent);
    DOM::Range              cloneRange ();
    DOM::DOMString          toString ();
    DOM::DOMString          toHTML ();
    DOM::DocumentFragment   createContextualFragment (const DOM::DOMString& html);
    void                    detach ();
    bool                    isDetached () const;
//ig     RangeImpl*         handle () const;
    bool                    isNull () const;

protected:
//ig                        Range (RangeImpl* i);
};   // Range

};   // DOM


