/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */

#ifndef __com_sun_star_accessibility_XAccessibleEditableText_idl__
#define __com_sun_star_accessibility_XAccessibleEditableText_idl__

#include <com/sun/star/accessibility/XAccessibleText.idl>
#include <com/sun/star/lang/IndexOutOfBoundsException.idl>
#include <com/sun/star/beans/PropertyValue.idl>

module com { module sun { module star { module accessibility {

/** Implement this interface to give read and write access to a text
    representation.

    <p>This interface is typically used in conjunction with the
    XAccessibleText interface and extents it about the ability
    to modify the text represented by that interface.</p>

    @since OOo 1.1.2
*/
interface XAccessibleEditableText
    : ::com::sun::star::accessibility::XAccessibleText
{
    /** Copies the text range into the clipboard.

        <p>The specified text between and including the two given indices is
        copied into the system clipboard and is deleted afterwards from the
        text represented by this object.  This is equivalent to calling
        first XAccessibleText::copyText() and then
        XAccessibleEditableText::deleteText() with the given
        start and end indices.</p>

        <p>The text indices are interpreted like those in the
        XAccessibleText::getTextRange() method. </p>

        @param nStartIndex
            Start index of the text to moved into the clipboard.
            The valid range is 0..length.

        @param nEndIndex
            End index of the text to moved into the clipboard.
            The valid range is 0..length.

        @return
            Returns a flag that indicates whether the operation has been
            executed successfully.

        @throws ::com::sun::star::lang::IndexOutOfBoundsException
            if the indices are invalid
    */
    boolean cutText ([in] long nStartIndex, [in] long nEndIndex)
        raises (::com::sun::star::lang::IndexOutOfBoundsException);

    /** Pastes text from the clipboard.

        <p>The text in the system clipboard is pasted into the text
        represented by this object at the given index.  This method is
        similar to the XAccessibleEditableText::insertText()
        method.  If the index is not valid then the system clipboard text is
        not inserted.</p>

        @param nIndex
            Index at which to insert the text from the system clipboard into
            the text represented by this object.
            The valid range is 0..length.

        @return
            Returns a flag that indicates whether the operation has been
            executed successfully.

        @throws ::com::sun::star::lang::IndexOutOfBoundsException
            if the index is invalid
    */
    boolean pasteText ([in] long nIndex)
        raises (::com::sun::star::lang::IndexOutOfBoundsException);

    /** Deletes a range of text.

        <p>The text between and including the two given indices is deleted
        from the text represented by this object.</p>

        <p>The text indices are interpreted like those in the
        XAccessibleText::getTextRange() method. </p>

        @param nStartIndex
            Start index of the text to be deleted.
            The valid range is 0..length.

        @param nEndIndex
            End index of the text to be deleted.
            The valid range is 0..length.

        @return
            Returns a flag that indicates whether the operation has been
            executed successfully.

        @throws ::com::sun::star::lang::IndexOutOfBoundsException
            if the indices are invalid
    */
    boolean deleteText ([in] long nStartIndex, [in] long nEndIndex)
        raises (::com::sun::star::lang::IndexOutOfBoundsException);

    /** Inserts text at the specified position.

        <p>The specified string is inserted at the given index into the text
        represented by this object.</p>

        @param sText
            Text that is inserted.

        @param nIndex
            Index at which to insert the text.
            The valid range is 0..length.

        @return
            Returns a flag that indicates whether the operation has been
            executed successfully.

        @throws ::com::sun::star::lang::IndexOutOfBoundsException
            if the indices are invalid
    */
    boolean insertText ([in] string sText, [in] long nIndex)
        raises (::com::sun::star::lang::IndexOutOfBoundsException);

    /** Replaces text.

        <p>The text between the two given indices is replaced
        by the specified replacement string. This method is
        equivalent to calling first
        XAccessibleEditableText::deleteText() with the two
        indices and afterwards calling
        XAccessibleEditableText::insertText() with the
        replacement text and the start index.</p>

        <p>The text indices are interpreted like those in the
        XAccessibleText::getTextRange() method. </p>

        @param nStartIndex
            Start index of the text to be replaced.
            The valid range is 0..length.

        @param nEndIndex
            Start index of the text to be replaced.
            The valid range is 0..length.

        @param sReplacement
            The Text that replaces the text between the given indices.

        @return
            Returns a flag that indicates whether the operation has been
            executed successfully.

        @throws ::com::sun::star::lang::IndexOutOfBoundsException
            if the indices are invalid
    */
    boolean replaceText ([in] long nStartIndex, [in] long nEndIndex,
        [in] string sReplacement)
        raises (::com::sun::star::lang::IndexOutOfBoundsException);

    /** Replaces the attributes of a text range by the given set of
        attributes.

        <p>Sets the attributes for the text between and including the two
        given indices to those given.  The old attributes of this text
        portion are replaced by the new list of attributes.</p>

        <p>The text indices are interpreted like those in the
        XAccessibleText::getTextRange() method. </p>

        @param nStartIndex
            Start index of the text whose attributes are modified.
            The valid range is 0..length.

        @param nEndIndex
            Start index of the text whose attributes are modified.
            The valid range is 0..length.

        @param aAttributeSet
            Set of attributes that replaces the old list of attributes of
            the specified text portion.

        @return
            Returns a flag that indicates whether the operation has been
            executed successfully.

        @throws ::com::sun::star::lang::IndexOutOfBoundsException
            if the indices are invalid
    */
    boolean setAttributes ([in] long nStartIndex, [in] long nEndIndex,
        [in] sequence<::com::sun::star::beans::PropertyValue> aAttributeSet)
        raises (::com::sun::star::lang::IndexOutOfBoundsException);

    /** Replaces the whole text with the given text.

        <p>The text content of this object is set to the given string.</p>

        @param sText
            The new text that replaces the old text.

        @return
            Returns a flag that indicates whether the operation has been
            executed successfully.
    */
    boolean setText ([in] string sText);
};

}; }; }; };

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
