From b80e0626df5043a45ed670b727b2e114c0d5f1d2 Mon Sep 17 00:00:00 2001
From: Jens-Heiner Rechtien
Date: Wed, 27 Jun 2007 14:38:04 +0000
Subject: INTEGRATION: CWS a11ysep (1.1.2); FILE ADDED 2007/02/28 07:29:09 fs
1.1.2.5: #i10000# 2006/10/05 08:20:13 fs 1.1.2.4: MANUAL RESYNC m130->m185:
file had been modified in MWS, but moved herein in CWS 2005/09/28 11:35:20 fs
1.1.2.3: manual resync (files have been moved herein from another location):
licence change 2005/06/06 10:11:05 fs 1.1.2.2: manual resync - file had been
modified in master, but moved in CWS 2005/03/07 08:29:02 fs 1.1.2.1: #i44293#
moved implementations herein from toolkit module
---
.../source/standard/vclxaccessibleedit.cxx | 666 +++++++++++++++++++++
1 file changed, 666 insertions(+)
create mode 100644 accessibility/source/standard/vclxaccessibleedit.cxx
(limited to 'accessibility/source/standard/vclxaccessibleedit.cxx')
diff --git a/accessibility/source/standard/vclxaccessibleedit.cxx b/accessibility/source/standard/vclxaccessibleedit.cxx
new file mode 100644
index 000000000000..43858a14475c
--- /dev/null
+++ b/accessibility/source/standard/vclxaccessibleedit.cxx
@@ -0,0 +1,666 @@
+/*************************************************************************
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: vclxaccessibleedit.cxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Author: hr $ $Date: 2007-06-27 15:38:04 $
+ *
+ * The Contents of this file are made available subject to
+ * the terms of GNU Lesser General Public License Version 2.1.
+ *
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2005 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_accessibility.hxx"
+
+// includes --------------------------------------------------------------
+
+#ifndef ACCESSIBILITY_STANDARD_VCLXACCESSIBLEEDIT_HXX
+#include
+#endif
+
+#ifndef _TOOLKIT_AWT_VCLXWINDOWS_HXX
+#include
+#endif
+#ifndef _TOOLKIT_HELPER_CONVERT_HXX_
+#include
+#endif
+#ifndef ACCESSIBILITY_HELPER_TKARESMGR_HXX
+#include
+#endif
+#ifndef ACCESSIBILITY_HELPER_ACCESSIBLESTRINGS_HRC_
+#include
+#endif
+
+#ifndef _UTL_ACCESSIBLESTATESETHELPER_HXX
+#include
+#endif
+#ifndef _UTL_ACCESSIBLERELATIONSETHELPER_HXX
+#include
+#endif
+#ifndef _COM_SUN_STAR_ACCESSIBILITY_STANDARD_ACCESSIBLESTATETYPE_HPP_
+#include
+#endif
+#ifndef _COM_SUN_STAR_ACCESSIBILITY_STANDARD_ACCESSIBLEEVENTID_HPP_
+#include
+#endif
+#ifndef _COM_SUN_STAR_ACCESSIBILITY_STANDARD_ACCESSIBLEROLE_HPP_
+#include
+#endif
+#ifndef _COM_SUN_STAR_DATATRANSFER_CLIPBOARD_XCLIPBOARD_HPP_
+#include
+#endif
+#ifndef _CPPUHELPER_TYPEPROVIDER_HXX
+#include
+#endif
+#ifndef _COMPHELPER_SEQUENCE_HXX
+#include
+#endif
+
+#ifndef _SV_SVAPP_HXX
+#include
+#endif
+#ifndef _SV_WINDOW_HXX
+#include
+#endif
+#ifndef _SV_EDIT_HXX
+#include
+#endif
+#ifndef _SOT_EXCHANGE_HXX
+#include
+#endif
+#ifndef _SOT_FORMATS_HXX
+#include
+#endif
+
+#include
+
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::accessibility;
+using namespace ::comphelper;
+
+
+// -----------------------------------------------------------------------------
+// VCLXAccessibleEdit
+// -----------------------------------------------------------------------------
+
+VCLXAccessibleEdit::VCLXAccessibleEdit( VCLXWindow* pVCLWindow )
+ :VCLXAccessibleTextComponent( pVCLWindow )
+{
+ m_nCaretPosition = getCaretPosition();
+}
+
+// -----------------------------------------------------------------------------
+
+VCLXAccessibleEdit::~VCLXAccessibleEdit()
+{
+}
+
+// -----------------------------------------------------------------------------
+
+void VCLXAccessibleEdit::UpdateCaretPosition()
+{
+ sal_Int32 nCaretPosition = getCaretPosition();
+
+ if ( m_nCaretPosition != nCaretPosition )
+ {
+ Any aOldValue, aNewValue;
+ aOldValue <<= (sal_Int32) m_nCaretPosition;
+ aNewValue <<= (sal_Int32) nCaretPosition;
+ m_nCaretPosition = nCaretPosition;
+ NotifyAccessibleEvent( AccessibleEventId::CARET_CHANGED, aOldValue, aNewValue );
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+void VCLXAccessibleEdit::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
+{
+ switch ( rVclWindowEvent.GetId() )
+ {
+ case VCLEVENT_EDIT_MODIFY:
+ {
+ SetText( implGetText() );
+ }
+ break;
+ case VCLEVENT_EDIT_SELECTIONCHANGED:
+ {
+ Window* pWindow = GetWindow();
+ if ( pWindow && pWindow->HasChildPathFocus() )
+ {
+ NotifyAccessibleEvent( AccessibleEventId::TEXT_SELECTION_CHANGED, Any(), Any() );
+ UpdateCaretPosition();
+ }
+ }
+ break;
+ default:
+ VCLXAccessibleTextComponent::ProcessWindowEvent( rVclWindowEvent );
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+void VCLXAccessibleEdit::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet )
+{
+ VCLXAccessibleTextComponent::FillAccessibleStateSet( rStateSet );
+
+ VCLXEdit* pVCLXEdit = static_cast< VCLXEdit* >( GetVCLXWindow() );
+ if ( pVCLXEdit )
+ {
+ rStateSet.AddState( AccessibleStateType::FOCUSABLE );
+ rStateSet.AddState( AccessibleStateType::SINGLE_LINE );
+ if ( pVCLXEdit->isEditable() )
+ rStateSet.AddState( AccessibleStateType::EDITABLE );
+ }
+}
+
+// -----------------------------------------------------------------------------
+// OCommonAccessibleText
+// -----------------------------------------------------------------------------
+
+::rtl::OUString VCLXAccessibleEdit::implGetText()
+{
+ ::rtl::OUString aText;
+
+ Edit* pEdit = static_cast< Edit* >( GetWindow() );
+ if ( pEdit )
+ {
+ aText = OutputDevice::GetNonMnemonicString( pEdit->GetText() );
+
+ if ( getAccessibleRole() == AccessibleRole::PASSWORD_TEXT )
+ {
+ xub_Unicode cEchoChar = pEdit->GetEchoChar();
+ if ( !cEchoChar )
+ cEchoChar = '*';
+ XubString sTmp;
+ aText = sTmp.Fill( (USHORT)aText.getLength(), cEchoChar );
+ }
+ }
+
+ return aText;
+}
+
+// -----------------------------------------------------------------------------
+
+void VCLXAccessibleEdit::implGetSelection( sal_Int32& nStartIndex, sal_Int32& nEndIndex )
+{
+ awt::Selection aSelection;
+ VCLXEdit* pVCLXEdit = static_cast< VCLXEdit* >( GetVCLXWindow() );
+ if ( pVCLXEdit )
+ aSelection = pVCLXEdit->getSelection();
+
+ nStartIndex = aSelection.Min;
+ nEndIndex = aSelection.Max;
+}
+
+// -----------------------------------------------------------------------------
+// XInterface
+// -----------------------------------------------------------------------------
+
+IMPLEMENT_FORWARD_XINTERFACE2( VCLXAccessibleEdit, VCLXAccessibleTextComponent, VCLXAccessibleEdit_BASE )
+
+// -----------------------------------------------------------------------------
+// XTypeProvider
+// -----------------------------------------------------------------------------
+
+IMPLEMENT_FORWARD_XTYPEPROVIDER2( VCLXAccessibleEdit, VCLXAccessibleTextComponent, VCLXAccessibleEdit_BASE )
+
+// -----------------------------------------------------------------------------
+// XServiceInfo
+// -----------------------------------------------------------------------------
+
+::rtl::OUString VCLXAccessibleEdit::getImplementationName() throw (RuntimeException)
+{
+ return ::rtl::OUString::createFromAscii( "com.sun.star.comp.toolkit.AccessibleEdit" );
+}
+
+// -----------------------------------------------------------------------------
+
+Sequence< ::rtl::OUString > VCLXAccessibleEdit::getSupportedServiceNames() throw (RuntimeException)
+{
+ Sequence< ::rtl::OUString > aNames(1);
+ aNames[0] = ::rtl::OUString::createFromAscii( "com.sun.star.awt.AccessibleEdit" );
+ return aNames;
+}
+
+// -----------------------------------------------------------------------------
+// XAccessibleContext
+// -----------------------------------------------------------------------------
+
+sal_Int32 VCLXAccessibleEdit::getAccessibleChildCount() throw (RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return 0;
+}
+
+// -----------------------------------------------------------------------------
+
+Reference< XAccessible > VCLXAccessibleEdit::getAccessibleChild( sal_Int32 i ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ if ( i < 0 || i >= getAccessibleChildCount() )
+ throw IndexOutOfBoundsException();
+
+ return Reference< XAccessible >();
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Int16 VCLXAccessibleEdit::getAccessibleRole( ) throw (RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ sal_Int16 nRole;
+ Edit* pEdit = static_cast< Edit* >( GetWindow() );
+ if ( pEdit && ( ( pEdit->GetStyle() & WB_PASSWORD ) || pEdit->GetEchoChar() ) )
+ nRole = AccessibleRole::PASSWORD_TEXT;
+ else
+ nRole = AccessibleRole::TEXT;
+
+ return nRole;
+}
+
+// -----------------------------------------------------------------------------
+// XAccessibleAction
+// -----------------------------------------------------------------------------
+
+sal_Int32 VCLXAccessibleEdit::getAccessibleActionCount( ) throw (RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return 0;
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Bool VCLXAccessibleEdit::doAccessibleAction ( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ if ( nIndex < 0 || nIndex >= getAccessibleActionCount() )
+ throw IndexOutOfBoundsException();
+
+ return sal_False;
+}
+
+// -----------------------------------------------------------------------------
+
+::rtl::OUString VCLXAccessibleEdit::getAccessibleActionDescription ( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ if ( nIndex < 0 || nIndex >= getAccessibleActionCount() )
+ throw IndexOutOfBoundsException();
+
+ return ::rtl::OUString();
+}
+
+// -----------------------------------------------------------------------------
+
+Reference< XAccessibleKeyBinding > VCLXAccessibleEdit::getAccessibleActionKeyBinding( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ if ( nIndex < 0 || nIndex >= getAccessibleActionCount() )
+ throw IndexOutOfBoundsException();
+
+ return Reference< XAccessibleKeyBinding >();
+}
+
+// -----------------------------------------------------------------------------
+// XAccessibleText
+// -----------------------------------------------------------------------------
+
+sal_Int32 VCLXAccessibleEdit::getCaretPosition( ) throw (RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ awt::Selection aSelection;
+ VCLXEdit* pVCLXEdit = static_cast< VCLXEdit* >( GetVCLXWindow() );
+ if ( pVCLXEdit )
+ aSelection = pVCLXEdit->getSelection();
+
+ return aSelection.Max;
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Bool VCLXAccessibleEdit::setCaretPosition( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return setSelection( nIndex, nIndex );
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Unicode VCLXAccessibleEdit::getCharacter( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return VCLXAccessibleTextComponent::getCharacter( nIndex );
+}
+
+// -----------------------------------------------------------------------------
+
+Sequence< PropertyValue > VCLXAccessibleEdit::getCharacterAttributes( sal_Int32 nIndex, const Sequence< ::rtl::OUString >& aRequestedAttributes ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return VCLXAccessibleTextComponent::getCharacterAttributes( nIndex, aRequestedAttributes );
+}
+
+// -----------------------------------------------------------------------------
+
+awt::Rectangle VCLXAccessibleEdit::getCharacterBounds( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ awt::Rectangle aBounds( 0, 0, 0, 0 );
+ sal_Int32 nLength = implGetText().getLength();
+
+ if ( !implIsValidRange( nIndex, nIndex, nLength ) )
+ throw IndexOutOfBoundsException();
+
+ Control* pControl = static_cast< Control* >( GetWindow() );
+ if ( pControl )
+ {
+ if ( nIndex == nLength )
+ {
+ // #108914# calculate virtual bounding rectangle
+ for ( sal_Int32 i = 0; i < nLength; ++i )
+ {
+ Rectangle aRect = pControl->GetCharacterBounds( i );
+ sal_Int32 nHeight = aRect.GetHeight();
+ if ( aBounds.Height < nHeight )
+ {
+ aBounds.Y = aRect.Top();
+ aBounds.Height = nHeight;
+ }
+ if ( i == nLength - 1 )
+ {
+ aBounds.X = aRect.Right() + 1;
+ aBounds.Width = 1;
+ }
+ }
+ }
+ else
+ {
+ aBounds = AWTRectangle( pControl->GetCharacterBounds( nIndex ) );
+ }
+ }
+
+ return aBounds;
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Int32 VCLXAccessibleEdit::getCharacterCount( ) throw (RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return VCLXAccessibleTextComponent::getCharacterCount();
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Int32 VCLXAccessibleEdit::getIndexAtPoint( const awt::Point& aPoint ) throw (RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return VCLXAccessibleTextComponent::getIndexAtPoint( aPoint );
+}
+
+// -----------------------------------------------------------------------------
+
+::rtl::OUString VCLXAccessibleEdit::getSelectedText( ) throw (RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return VCLXAccessibleTextComponent::getSelectedText();
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Int32 VCLXAccessibleEdit::getSelectionStart( ) throw (RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return VCLXAccessibleTextComponent::getSelectionStart();
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Int32 VCLXAccessibleEdit::getSelectionEnd( ) throw (RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return VCLXAccessibleTextComponent::getSelectionEnd();
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Bool VCLXAccessibleEdit::setSelection( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ sal_Bool bReturn = sal_False;
+ ::rtl::OUString sText( implGetText() );
+
+ if ( !implIsValidRange( nStartIndex, nEndIndex, sText.getLength() ) )
+ throw IndexOutOfBoundsException();
+
+ VCLXEdit* pVCLXEdit = static_cast< VCLXEdit* >( GetVCLXWindow() );
+ Edit* pEdit = static_cast< Edit* >( GetWindow() );
+ if ( pVCLXEdit && pEdit && pEdit->IsEnabled() )
+ {
+ pVCLXEdit->setSelection( awt::Selection( nStartIndex, nEndIndex ) );
+ bReturn = sal_True;
+ }
+
+ return bReturn;
+}
+
+// -----------------------------------------------------------------------------
+
+::rtl::OUString VCLXAccessibleEdit::getText( ) throw (RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return VCLXAccessibleTextComponent::getText();
+}
+
+// -----------------------------------------------------------------------------
+
+::rtl::OUString VCLXAccessibleEdit::getTextRange( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return VCLXAccessibleTextComponent::getTextRange( nStartIndex, nEndIndex );
+}
+
+// -----------------------------------------------------------------------------
+
+::com::sun::star::accessibility::TextSegment VCLXAccessibleEdit::getTextAtIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return VCLXAccessibleTextComponent::getTextAtIndex( nIndex, aTextType );
+}
+
+// -----------------------------------------------------------------------------
+
+::com::sun::star::accessibility::TextSegment VCLXAccessibleEdit::getTextBeforeIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return VCLXAccessibleTextComponent::getTextBeforeIndex( nIndex, aTextType );
+}
+
+// -----------------------------------------------------------------------------
+
+::com::sun::star::accessibility::TextSegment VCLXAccessibleEdit::getTextBehindIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return VCLXAccessibleTextComponent::getTextBehindIndex( nIndex, aTextType );
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Bool VCLXAccessibleEdit::copyText( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return VCLXAccessibleTextComponent::copyText( nStartIndex, nEndIndex );
+}
+
+// -----------------------------------------------------------------------------
+// XAccessibleEditableText
+// -----------------------------------------------------------------------------
+
+sal_Bool VCLXAccessibleEdit::cutText( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return copyText( nStartIndex, nEndIndex ) && deleteText( nStartIndex, nEndIndex );
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Bool VCLXAccessibleEdit::pasteText( sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ sal_Bool bReturn = sal_False;
+
+ if ( GetWindow() )
+ {
+ Reference< datatransfer::clipboard::XClipboard > xClipboard = GetWindow()->GetClipboard();
+ if ( xClipboard.is() )
+ {
+ const sal_uInt32 nRef = Application::ReleaseSolarMutex();
+ Reference< datatransfer::XTransferable > xDataObj = xClipboard->getContents();
+ Application::AcquireSolarMutex( nRef );
+ if ( xDataObj.is() )
+ {
+ datatransfer::DataFlavor aFlavor;
+ SotExchange::GetFormatDataFlavor( SOT_FORMAT_STRING, aFlavor );
+ if ( xDataObj->isDataFlavorSupported( aFlavor ) )
+ {
+ Any aData = xDataObj->getTransferData( aFlavor );
+ ::rtl::OUString sText;
+ aData >>= sText;
+ bReturn = replaceText( nIndex, nIndex, sText );
+ }
+ }
+ }
+ }
+
+ return bReturn;
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Bool VCLXAccessibleEdit::deleteText( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return replaceText( nStartIndex, nEndIndex, ::rtl::OUString() );
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Bool VCLXAccessibleEdit::insertText( const ::rtl::OUString& sText, sal_Int32 nIndex ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ return replaceText( nIndex, nIndex, sText );
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Bool VCLXAccessibleEdit::replaceText( sal_Int32 nStartIndex, sal_Int32 nEndIndex, const ::rtl::OUString& sReplacement ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ sal_Bool bReturn = sal_False;
+ ::rtl::OUString sText( implGetText() );
+
+ if ( !implIsValidRange( nStartIndex, nEndIndex, sText.getLength() ) )
+ throw IndexOutOfBoundsException();
+
+ sal_Int32 nMinIndex = ::std::min( nStartIndex, nEndIndex );
+ sal_Int32 nMaxIndex = ::std::max( nStartIndex, nEndIndex );
+
+ VCLXEdit* pVCLXEdit = static_cast< VCLXEdit* >( GetVCLXWindow() );
+ if ( pVCLXEdit && pVCLXEdit->isEditable() )
+ {
+ pVCLXEdit->setText( sText.replaceAt( nMinIndex, nMaxIndex - nMinIndex, sReplacement ) );
+ sal_Int32 nIndex = nMinIndex + sReplacement.getLength();
+ setSelection( nIndex, nIndex );
+ bReturn = sal_True;
+ }
+
+ return bReturn;
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Bool VCLXAccessibleEdit::setAttributes( sal_Int32 nStartIndex, sal_Int32 nEndIndex, const Sequence& ) throw (IndexOutOfBoundsException, RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ if ( !implIsValidRange( nStartIndex, nEndIndex, implGetText().getLength() ) )
+ throw IndexOutOfBoundsException();
+
+ return sal_False; // attributes cannot be set for an edit
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Bool VCLXAccessibleEdit::setText( const ::rtl::OUString& sText ) throw (RuntimeException)
+{
+ OExternalLockGuard aGuard( this );
+
+ sal_Bool bSuccess = sal_False;
+ try
+ {
+ bSuccess = replaceText( 0, implGetText().getLength(), sText );
+ }
+ catch( const IndexOutOfBoundsException& )
+ {
+ OSL_ENSURE( sal_False, "VCLXAccessibleText::setText: caught an exception!" );
+ }
+ return bSuccess;
+}
+
+// -----------------------------------------------------------------------------
--
cgit