#98735# Refactored unoedit/unoedacc.cxx

This commit is contained in:
Thorsten Behrens
2002-05-16 15:12:20 +00:00
parent 87f258d7f5
commit a909acb700
11 changed files with 6396 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,403 @@
/*************************************************************************
*
* $RCSfile: AccessibleEditableTextPara.hxx,v $
*
* $Revision: 1.1 $
*
* last change: $Author: thb $ $Date: 2002-05-16 16:10:17 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 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
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (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.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
#ifndef _SVX_ACCESSIBLE_EDITABLE_TEXT_PARA_HXX
#define _SVX_ACCESSIBLE_EDITABLE_TEXT_PARA_HXX
#ifndef _SV_GEN_HXX
#include <tools/gen.hxx>
#endif
#ifndef _CPPUHELPER_WEAKREF_HXX_
#include <cppuhelper/weakref.hxx>
#endif
#ifndef _CPPUHELPER_IMPLBASE6_HXX_
#include <cppuhelper/implbase6.hxx>
#endif
#ifndef _CPPUHELPER_TYPEPROVIDER_HXX_
#include <cppuhelper/typeprovider.hxx>
#endif
#ifndef _CPPUHELPER_INTERFACECONTAINER_H_
#include <cppuhelper/interfacecontainer.hxx>
#endif
#ifndef _COM_SUN_STAR_UNO_REFERENCE_HXX_
#include <com/sun/star/uno/Reference.hxx>
#endif
#ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_
#include <com/sun/star/lang/XServiceInfo.hpp>
#endif
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLE_HPP_
#include <drafts/com/sun/star/accessibility/XAccessible.hpp>
#endif
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLECONTEXT_HPP_
#include <drafts/com/sun/star/accessibility/XAccessibleContext.hpp>
#endif
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLECOMPONENT_HPP_
#include <drafts/com/sun/star/accessibility/XAccessibleComponent.hpp>
#endif
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLEEDITABLETEXT_HPP_
#include <drafts/com/sun/star/accessibility/XAccessibleEditableText.hpp>
#endif
#ifndef _SVX_ACCESSIBLE_PARA_MANAGER_HXX
#include "AccessibleParaManager.hxx"
#endif
#ifndef _SVX_ACCESSIBLE_IMAGE_BULLET_HXX
#include "AccessibleImageBullet.hxx"
#endif
#ifndef _SVX_UNOEDPRX_HXX
#include "unoedprx.hxx"
#endif
namespace accessibility
{
typedef ::cppu::WeakImplHelper6< ::drafts::com::sun::star::accessibility::XAccessible,
::drafts::com::sun::star::accessibility::XAccessibleContext,
::drafts::com::sun::star::accessibility::XAccessibleComponent,
::drafts::com::sun::star::accessibility::XAccessibleEditableText,
::drafts::com::sun::star::accessibility::XAccessibleEventBroadcaster,
::com::sun::star::lang::XServiceInfo > AccessibleTextParaInterfaceBase;
/** This class implements the actual text paragraphs for the EditEngine/Outliner UAA
*/
class AccessibleEditableTextPara : public AccessibleTextParaInterfaceBase
{
public:
/// Create accessible object for given parent
AccessibleEditableTextPara ( const ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessible >& rParent );
virtual ~AccessibleEditableTextPara ();
// XInterface
virtual ::com::sun::star::uno::Any SAL_CALL queryInterface (const ::com::sun::star::uno::Type & rType) throw (::com::sun::star::uno::RuntimeException);
// XAccessible
virtual ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) throw (::com::sun::star::uno::RuntimeException);
// XAccessibleContext
virtual sal_Int32 SAL_CALL getAccessibleChildCount() throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleParent() throw (::com::sun::star::uno::RuntimeException);
virtual sal_Int32 SAL_CALL getAccessibleIndexInParent() throw (::com::sun::star::uno::RuntimeException);
virtual sal_Int16 SAL_CALL getAccessibleRole() throw (::com::sun::star::uno::RuntimeException);
/// Maximal length of text returned by getAccessibleDescription()
enum { MaxDescriptionLen = 40 };
virtual ::rtl::OUString SAL_CALL getAccessibleDescription() throw (::com::sun::star::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getAccessibleName() throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet() throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::lang::Locale SAL_CALL getLocale() throw (::drafts::com::sun::star::accessibility::IllegalAccessibleComponentStateException, ::com::sun::star::uno::RuntimeException);
// XAccessibleEventBroadcaster
virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessibleEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessibleEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
// XAccessibleComponent
virtual sal_Bool SAL_CALL contains( const ::com::sun::star::awt::Point& aPoint ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleAt( const ::com::sun::star::awt::Point& aPoint ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::awt::Rectangle SAL_CALL getBounds( ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::awt::Point SAL_CALL getLocation( ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::awt::Point SAL_CALL getLocationOnScreen( ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::awt::Size SAL_CALL getSize( ) throw (::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL isShowing( ) throw (::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL isVisible( ) throw (::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL isFocusTraversable( ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL grabFocus( ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Any SAL_CALL getAccessibleKeyBinding( ) throw (::com::sun::star::uno::RuntimeException);
// XAccessibleText (this comes implicitely inherited by XAccessibleEditableText)
virtual sal_Int32 SAL_CALL getCaretPosition() throw (::com::sun::star::uno::RuntimeException);
virtual sal_Unicode SAL_CALL getCharacter( sal_Int32 nIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL getCharacterAttributes( sal_Int32 nIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::awt::Rectangle SAL_CALL getCharacterBounds( sal_Int32 nIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
virtual sal_Int32 SAL_CALL getCharacterCount() throw (::com::sun::star::uno::RuntimeException);
virtual sal_Int32 SAL_CALL getIndexAtPoint( const ::com::sun::star::awt::Point& aPoint ) throw (::com::sun::star::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getSelectedText() throw (::com::sun::star::uno::RuntimeException);
virtual sal_Int32 SAL_CALL getSelectionStart() throw (::com::sun::star::uno::RuntimeException);
virtual sal_Int32 SAL_CALL getSelectionEnd() throw (::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL setSelection( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getText() throw (::com::sun::star::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getTextRange( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
/// Does not support AccessibleTextType::SENTENCE (missing feature in EditEngine)
virtual ::rtl::OUString SAL_CALL getTextAtIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
/// Does not support AccessibleTextType::SENTENCE (missing feature in EditEngine)
virtual ::rtl::OUString SAL_CALL getTextBeforeIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
/// Does not support AccessibleTextType::SENTENCE (missing feature in EditEngine)
virtual ::rtl::OUString SAL_CALL getTextBehindIndex( sal_Int32 nIndex, sal_Int16 aTextType ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL copyText( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
// XAccessibleEditableText
virtual sal_Bool SAL_CALL cutText( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL pasteText( sal_Int32 nIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL deleteText( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL insertText( const ::rtl::OUString& sText, sal_Int32 nIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL replaceText( sal_Int32 nStartIndex, sal_Int32 nEndIndex, const ::rtl::OUString& sReplacement ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL setAttributes( sal_Int32 nStartIndex, sal_Int32 nEndIndex, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aAttributeSet ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL setText( const ::rtl::OUString& sText ) throw (::com::sun::star::uno::RuntimeException);
// XServiceInfo
virtual ::rtl::OUString SAL_CALL getImplementationName (void) throw (::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL supportsService (const ::rtl::OUString& sServiceName) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL getSupportedServiceNames (void) throw (::com::sun::star::uno::RuntimeException);
// XServiceName
virtual ::rtl::OUString SAL_CALL getServiceName (void) throw (::com::sun::star::uno::RuntimeException);
/** Set the current index in the accessibility parent
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
void SetIndexInParent( sal_Int32 nIndex );
/** Get the current index in the accessibility parent
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
sal_Int32 GetIndexInParent() const;
/** Set the current paragraph number
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
void SetParagraphIndex( sal_Int32 nIndex );
/** Query the current paragraph number (0 - nParas-1)
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
sal_Int32 GetParagraphIndex() const throw (::com::sun::star::uno::RuntimeException);
/** Set the edit engine offset
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
void SetEEOffset( const Point& rOffset );
/** Set the EditEngine offset
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
void SetEditSource( SvxEditSourceAdapter* pEditSource );
/// Calls all Listener objects to tell them the change. Don't hold locks when calling this!
virtual void FireEvent(const sal_Int16 nEventId, const ::com::sun::star::uno::Any& rNewValue = ::com::sun::star::uno::Any(), const ::com::sun::star::uno::Any& rOldValue = ::com::sun::star::uno::Any() ) const;
static Rectangle LogicToPixel( const Rectangle& rRect, const MapMode& rMapMode, SvxViewForwarder& rForwarder );
private:
// declared, but not defined
AccessibleEditableTextPara( const AccessibleEditableTextPara& );
AccessibleEditableTextPara& operator= ( const AccessibleEditableTextPara& );
// syntactic sugar for FireEvent
void GotPropertyEvent( const ::com::sun::star::uno::Any& rNewValue, const sal_Int16 nEventId ) const;
void LostPropertyEvent( const ::com::sun::star::uno::Any& rOldValue, const sal_Int16 nEventId ) const;
/** Query the visibility state
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
@return the visibility state. Per definition, a defunc object is no longer visible
*/
sal_Bool IsVisible() const;
// retrieve text interface for given paragraph index
::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessibleText > GetParaInterface( sal_Int32 nIndex );
SvxEditSourceAdapter& GetEditSource() const throw (::com::sun::star::uno::RuntimeException);
/** Query the SvxTextForwarder for EditEngine access.
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
SvxAccessibleTextAdapter& GetTextForwarder() const throw (::com::sun::star::uno::RuntimeException);
/** Query the SvxViewForwarder for EditEngine access.
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
SvxViewForwarder& GetViewForwarder() const throw (::com::sun::star::uno::RuntimeException);
/** Query whether a GetEditViewForwarder( sal_False ) will return a forwarder
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
sal_Bool HaveEditView() const;
/** Query the SvxEditViewForwarder for EditEngine access.
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
SvxAccessibleTextEditViewAdapter& GetEditViewForwarder( sal_Bool bCreate = sal_False ) const throw (::com::sun::star::uno::RuntimeException);
/// Do we have children? This is the case for image bullets
sal_Bool HaveChildren();
/// Is the underlying object in edit mode
sal_Bool IsActive() const throw (::com::sun::star::uno::RuntimeException);
const Point& GetEEOffset() const;
// Get text from forwarder
String GetText( sal_Int32 nIndex ) throw (::com::sun::star::uno::RuntimeException);
String GetTextRange( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) throw (::com::sun::star::uno::RuntimeException);
USHORT GetTextLen() const throw (::com::sun::star::uno::RuntimeException);
/** Get the current selection of this paragraph
@return sal_False, if nothing in this paragraph is selected
*/
sal_Bool GetSelection( USHORT& nStartPos, USHORT& nEndPos ) throw (::com::sun::star::uno::RuntimeException);
/** create selection from Accessible selection.
*/
ESelection MakeSelection( sal_Int32 nStartEEIndex, sal_Int32 nEndEEIndex );
ESelection MakeSelection( sal_Int32 nEEIndex );
// check whether index value is within permitted range
/// Check whether 0<=nIndex<=n-1
void CheckIndex( sal_Int32 nIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
/// Check whether 0<=nIndex<=n
void CheckPosition( sal_Int32 nIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
/// Check whether 0<=nStart<=n and 0<=nEnd<=n
void CheckRange( sal_Int32 nStart, sal_Int32 nEnd ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
// the paragraph index in the edit engine (guarded by solar mutex)
sal_Int32 mnParagraphIndex;
// our current index in the parent (guarded by solar mutex)
sal_Int32 mnIndexInParent;
// the current edit source (guarded by solar mutex)
SvxEditSourceAdapter* mpEditSource;
// the possible child (for image bullets, guarded by solar mutex)
typedef WeakCppRef < ::drafts::com::sun::star::accessibility::XAccessible, AccessibleImageBullet > WeakBullet;
WeakBullet maImageBullet;
// the offset of the underlying EditEngine from the shape/cell (guarded by solar mutex)
Point maEEOffset;
mutable osl::Mutex maMutex;
/// The shape we're the accessible for (unguarded)
::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessible > mxParent;
/// Our listeners (guarded by maMutex)
::cppu::OInterfaceContainerHelper maStateListeners;
};
} // end of namespace accessibility
#endif

View File

@@ -0,0 +1,582 @@
/*************************************************************************
*
* $RCSfile: AccessibleImageBullet.cxx,v $
*
* $Revision: 1.1 $
*
* last change: $Author: thb $ $Date: 2002-05-16 16:10:32 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 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
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (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.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
#ifndef _SV_GEN_HXX
#include <tools/gen.hxx>
#endif
#ifndef _VOS_MUTEX_HXX_
#include <vos/mutex.hxx>
#endif
#ifndef _SV_SVAPP_HXX
#include <vcl/svapp.hxx>
#endif
#ifndef _RTL_USTRING_HXX_
#include <rtl/ustring.hxx>
#endif
#ifndef _COM_SUN_STAR_AWT_POINT_HPP_
#include <com/sun/star/awt/Point.hpp>
#endif
#ifndef _COM_SUN_STAR_AWT_RECTANGLE_HPP_
#include <com/sun/star/awt/Rectangle.hpp>
#endif
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEROLE_HPP_
#include <drafts/com/sun/star/accessibility/AccessibleRole.hpp>
#endif
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLETEXTTYPE_HPP_
#include <drafts/com/sun/star/accessibility/AccessibleTextType.hpp>
#endif
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLESTATETYPE_HPP_
#include <drafts/com/sun/star/accessibility/AccessibleStateType.hpp>
#endif
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEEVENTID_HPP_
#include <drafts/com/sun/star/accessibility/AccessibleEventId.hpp>
#endif
#ifndef _UTL_ACCESSIBLESTATESETHELPER_HXX_
#include <unotools/accessiblestatesethelper.hxx>
#endif
#ifndef _UNO_LINGU_HXX
#include "unolingu.hxx"
#endif
#ifndef _SVX_ACCESSIBLE_EDITABLE_TEXT_PARA_HXX
#include "AccessibleEditableTextPara.hxx"
#endif
#ifndef _SVX_ACCESSIBLE_IMAGE_BULLET_HXX
#include "AccessibleImageBullet.hxx"
#endif
#include "editdata.hxx"
#include "editeng.hxx"
#include "outliner.hxx"
using namespace ::com::sun::star;
using namespace ::drafts::com::sun::star::accessibility;
namespace accessibility
{
AccessibleImageBullet::AccessibleImageBullet ( const uno::Reference< XAccessible >& rParent ) :
mnParagraphIndex( 0 ),
mnIndexInParent( 0 ),
mpEditSource( NULL ),
maEEOffset( 0, 0 ),
mxParent( rParent ),
maStateListeners( maMutex )
{
}
AccessibleImageBullet::~AccessibleImageBullet()
{
}
uno::Any SAL_CALL AccessibleImageBullet::queryInterface (const uno::Type & rType) throw (uno::RuntimeException)
{
return AccessibleImageBulletInterfaceBase::queryInterface(rType);
}
uno::Reference< XAccessibleContext > SAL_CALL AccessibleImageBullet::getAccessibleContext( ) throw (uno::RuntimeException)
{
// We implement the XAccessibleContext interface in the same object
return uno::Reference< XAccessibleContext > ( this );
}
sal_Int32 SAL_CALL AccessibleImageBullet::getAccessibleChildCount() throw (uno::RuntimeException)
{
return 0;
}
uno::Reference< XAccessible > SAL_CALL AccessibleImageBullet::getAccessibleChild( sal_Int32 i ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
{
throw lang::IndexOutOfBoundsException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("No childs available")),
uno::Reference< uno::XInterface >
( static_cast< ::cppu::OWeakObject* > (this) ) ); // static_cast: disambiguate hierarchy
}
uno::Reference< XAccessible > SAL_CALL AccessibleImageBullet::getAccessibleParent() throw (uno::RuntimeException)
{
return mxParent;
}
sal_Int32 SAL_CALL AccessibleImageBullet::getAccessibleIndexInParent() throw (uno::RuntimeException)
{
return mnIndexInParent;
}
sal_Int16 SAL_CALL AccessibleImageBullet::getAccessibleRole() throw (uno::RuntimeException)
{
// TODO
return AccessibleRole::GRAPHIC;
}
::rtl::OUString SAL_CALL AccessibleImageBullet::getAccessibleDescription() throw (uno::RuntimeException)
{
::vos::OGuard aGuard( Application::GetSolarMutex() );
::rtl::OUString aStr( RTL_CONSTASCII_USTRINGPARAM("Image bullet in paragraph ") );
aStr += ::rtl::OUString::valueOf( GetParagraphIndex() );
return aStr;
}
::rtl::OUString SAL_CALL AccessibleImageBullet::getAccessibleName() throw (uno::RuntimeException)
{
return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Image bullet") );
}
uno::Reference< XAccessibleRelationSet > SAL_CALL AccessibleImageBullet::getAccessibleRelationSet() throw (uno::RuntimeException)
{
// no relations, therefore empty
return uno::Reference< XAccessibleRelationSet >();
}
uno::Reference< XAccessibleStateSet > SAL_CALL AccessibleImageBullet::getAccessibleStateSet() throw (uno::RuntimeException)
{
::vos::OGuard aGuard( Application::GetSolarMutex() );
utl::AccessibleStateSetHelper* aStateSet = new utl::AccessibleStateSetHelper();
uno::Reference< XAccessibleStateSet > xStateSet( static_cast< cppu::OWeakObject* > (aStateSet), uno::UNO_QUERY );
// are we defunc?
if( !mpEditSource )
{
aStateSet->AddState( AccessibleStateType::DEFUNC );
aStateSet->AddState( AccessibleStateType::INVALID );
}
// are we visible?
if( IsVisible() )
{
aStateSet->AddState( AccessibleStateType::SHOWING );
aStateSet->AddState( AccessibleStateType::VISIBLE );
}
return xStateSet;
}
lang::Locale SAL_CALL AccessibleImageBullet::getLocale() throw (IllegalAccessibleComponentStateException, uno::RuntimeException)
{
::vos::OGuard aGuard( Application::GetSolarMutex() );
lang::Locale aLocale;
DBG_ASSERT(GetParagraphIndex() >= 0 && GetParagraphIndex() <= USHRT_MAX,
"AccessibleImageBullet::getLocale: paragraph index value overflow");
// return locale of first character in the paragraph
return SvxLanguageToLocale(aLocale, GetTextForwarder().GetLanguage( static_cast< USHORT >( GetParagraphIndex() ), 0 ));
}
void SAL_CALL AccessibleImageBullet::addEventListener( const uno::Reference< XAccessibleEventListener >& xListener ) throw (uno::RuntimeException)
{
maStateListeners.addInterface( xListener );
}
void SAL_CALL AccessibleImageBullet::removeEventListener( const uno::Reference< XAccessibleEventListener >& xListener ) throw (uno::RuntimeException)
{
maStateListeners.removeInterface( xListener );
}
sal_Bool SAL_CALL AccessibleImageBullet::contains( const awt::Point& rPoint ) throw (uno::RuntimeException)
{
::vos::OGuard aGuard( Application::GetSolarMutex() );
DBG_ASSERT(GetParagraphIndex() >= 0 && GetParagraphIndex() <= USHRT_MAX,
"AccessibleEditableTextPara::contains: index value overflow");
awt::Rectangle aTmpRect = getBounds();
Rectangle aRect( Point(aTmpRect.X, aTmpRect.Y), Size(aTmpRect.Width, aTmpRect.Height) );
Point aPoint( rPoint.X, rPoint.Y );
return aRect.IsInside( aPoint );
}
uno::Reference< XAccessible > SAL_CALL AccessibleImageBullet::getAccessibleAt( const awt::Point& aPoint ) throw (uno::RuntimeException)
{
// as we have no children, empty reference
return uno::Reference< XAccessible >();
}
awt::Rectangle SAL_CALL AccessibleImageBullet::getBounds( ) throw (uno::RuntimeException)
{
::vos::OGuard aGuard( Application::GetSolarMutex() );
DBG_ASSERT(GetParagraphIndex() >= 0 && GetParagraphIndex() <= USHRT_MAX,
"AccessibleEditableTextPara::getBounds: index value overflow");
SvxTextForwarder& rCacheTF = GetTextForwarder();
EBulletInfo aBulletInfo = rCacheTF.GetBulletInfo( static_cast< USHORT > (GetParagraphIndex()) );
if( aBulletInfo.nParagraph != EE_PARA_NOT_FOUND &&
aBulletInfo.bVisible &&
aBulletInfo.nType == SVX_NUM_BITMAP )
{
Rectangle aRect = aBulletInfo.aBounds;
// convert to screen coordinates
Rectangle aScreenRect = AccessibleEditableTextPara::LogicToPixel( aRect,
rCacheTF.GetMapMode(),
GetViewForwarder() );
// offset from shape/cell
Point aOffset = GetEEOffset();
return awt::Rectangle( aScreenRect.Left() + aOffset.X(),
aScreenRect.Top() + aOffset.Y(),
aScreenRect.GetSize().Width(),
aScreenRect.GetSize().Height() );
}
return awt::Rectangle();
}
awt::Point SAL_CALL AccessibleImageBullet::getLocation( ) throw (uno::RuntimeException)
{
::vos::OGuard aGuard( Application::GetSolarMutex() );
awt::Rectangle aRect = getBounds();
return awt::Point( aRect.X, aRect.Y );
}
awt::Point SAL_CALL AccessibleImageBullet::getLocationOnScreen( ) throw (uno::RuntimeException)
{
::vos::OGuard aGuard( Application::GetSolarMutex() );
// relate us to parent
uno::Reference< XAccessible > xParent = getAccessibleParent();
if( xParent.is() )
{
uno::Reference< XAccessibleComponent > xParentComponent( xParent, uno::UNO_QUERY );
if( xParentComponent.is() )
{
awt::Point aRefPoint = xParentComponent->getLocationOnScreen();
awt::Point aPoint = getLocation();
aPoint.X += aRefPoint.X;
aPoint.Y += aRefPoint.Y;
return aPoint;
}
}
throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Cannot access parent")),
uno::Reference< uno::XInterface >
( static_cast< XAccessible* > (this) ) ); // disambiguate hierarchy
}
awt::Size SAL_CALL AccessibleImageBullet::getSize( ) throw (uno::RuntimeException)
{
::vos::OGuard aGuard( Application::GetSolarMutex() );
awt::Rectangle aRect = getBounds();
return awt::Size( aRect.Width, aRect.Height );
}
sal_Bool SAL_CALL AccessibleImageBullet::isShowing( ) throw (uno::RuntimeException)
{
return IsVisible();
}
sal_Bool SAL_CALL AccessibleImageBullet::isVisible( ) throw (uno::RuntimeException)
{
return IsVisible();
}
sal_Bool SAL_CALL AccessibleImageBullet::isFocusTraversable( ) throw (uno::RuntimeException)
{
return sal_False;
}
void SAL_CALL AccessibleImageBullet::addFocusListener( const uno::Reference< awt::XFocusListener >& xListener ) throw (uno::RuntimeException)
{
// TODO: remove
throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Not focusable")),
uno::Reference< uno::XInterface >
( static_cast< XAccessible* > (this) ) ); // disambiguate hierarchy
}
void SAL_CALL AccessibleImageBullet::removeFocusListener( const uno::Reference< awt::XFocusListener >& xListener ) throw (uno::RuntimeException)
{
// TODO: remove
throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Not focusable")),
uno::Reference< uno::XInterface >
( static_cast< XAccessible* > (this) ) ); // disambiguate hierarchy
}
void SAL_CALL AccessibleImageBullet::grabFocus( ) throw (uno::RuntimeException)
{
throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Not focusable")),
uno::Reference< uno::XInterface >
( static_cast< XAccessible* > (this) ) ); // disambiguate hierarchy
}
uno::Any SAL_CALL AccessibleImageBullet::getAccessibleKeyBinding( ) throw (uno::RuntimeException)
{
// AFAIK, none.
return uno::Any();
}
::rtl::OUString SAL_CALL AccessibleImageBullet::getImplementationName (void) throw (uno::RuntimeException)
{
return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM ("AccessibleImageBullet"));
}
sal_Bool SAL_CALL AccessibleImageBullet::supportsService (const ::rtl::OUString& sServiceName) throw (uno::RuntimeException)
{
// Iterate over all supported service names and return true if on of them
// matches the given name.
uno::Sequence< ::rtl::OUString> aSupportedServices (
getSupportedServiceNames ());
for (int i=0; i<aSupportedServices.getLength(); i++)
if (sServiceName == aSupportedServices[i])
return sal_True;
return sal_False;
}
uno::Sequence< ::rtl::OUString> SAL_CALL AccessibleImageBullet::getSupportedServiceNames (void) throw (uno::RuntimeException)
{
const ::rtl::OUString sServiceName (RTL_CONSTASCII_USTRINGPARAM ("drafts.com.sun.star.accessibility.AccessibleContext"));
return uno::Sequence< ::rtl::OUString > (&sServiceName, 1);
}
::rtl::OUString SAL_CALL AccessibleImageBullet::getServiceName (void) throw (uno::RuntimeException)
{
return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("drafts.com.sun.star.accessibility.AccessibleContext"));
}
void AccessibleImageBullet::SetIndexInParent( sal_Int32 nIndex )
{
mnIndexInParent = nIndex;
}
sal_Int32 AccessibleImageBullet::GetIndexInParent() const
{
return mnIndexInParent;
}
void AccessibleImageBullet::SetEEOffset( const Point& rOffset )
{
maEEOffset = rOffset;
}
void AccessibleImageBullet::SetEditSource( SvxEditSource* pEditSource )
{
mpEditSource = pEditSource;
if( !mpEditSource )
{
// going defunc
FireEvent( AccessibleEventId::ACCESSIBLE_STATE_EVENT );
try
{
uno::Reference < XAccessibleContext > xThis = getAccessibleContext();
lang::EventObject aEvent (xThis);
maStateListeners.disposeAndClear( aEvent );
}
catch( const uno::RuntimeException& ) {}
}
}
void AccessibleImageBullet::FireEvent(const sal_Int16 nEventId, const uno::Any& rNewValue, const uno::Any& rOldValue ) const
{
uno::Reference < XAccessibleContext > xThis( const_cast< AccessibleImageBullet* > (this)->getAccessibleContext() );
AccessibleEventObject aEvent(xThis, nEventId, rNewValue, rOldValue);
// no locking necessary, OInterfaceIteratorHelper copies listeners if someone removes/adds in between
::cppu::OInterfaceIteratorHelper aIter( const_cast< AccessibleImageBullet* >(this)->maStateListeners );
while( aIter.hasMoreElements() )
{
uno::Reference < XAccessibleEventListener > xListener( aIter.next(), uno::UNO_QUERY );
if( xListener.is() )
{
try
{
xListener->notifyEvent( aEvent );
}
catch( const uno::RuntimeException& )
{
#ifdef DBG_UTIL
DBG_ERROR("AccessibleImageBullet::FireEvent: Caught runtime exception from listener, removing object (bridge/listener dead?)");
#endif
}
}
}
}
void AccessibleImageBullet::GotPropertyEvent( const uno::Any& rNewValue, const sal_Int16 nEventId ) const
{
FireEvent( nEventId, rNewValue );
}
void AccessibleImageBullet::LostPropertyEvent( const uno::Any& rOldValue, const sal_Int16 nEventId ) const
{
FireEvent( nEventId, uno::Any(), rOldValue );
}
sal_Bool AccessibleImageBullet::IsVisible() const
{
return mpEditSource ? sal_True : sal_False ;
}
void AccessibleImageBullet::SetParagraphIndex( sal_Int32 nIndex )
{
sal_Int32 nOldIndex = mnParagraphIndex;
if( nOldIndex != nIndex )
{
// index and therefore description changed
LostPropertyEvent( uno::makeAny( getAccessibleDescription() ), AccessibleEventId::ACCESSIBLE_DESCRIPTION_EVENT );
LostPropertyEvent( uno::makeAny( getAccessibleName() ), AccessibleEventId::ACCESSIBLE_NAME_EVENT );
}
mnParagraphIndex = nIndex;
if( nOldIndex != nIndex )
{
// index and therefore description changed
GotPropertyEvent( uno::makeAny( getAccessibleDescription() ), AccessibleEventId::ACCESSIBLE_DESCRIPTION_EVENT );
GotPropertyEvent( uno::makeAny( getAccessibleName() ), AccessibleEventId::ACCESSIBLE_NAME_EVENT );
}
}
sal_Int32 AccessibleImageBullet::GetParagraphIndex() const throw (uno::RuntimeException)
{
return mnParagraphIndex;
}
SvxEditSource& AccessibleImageBullet::GetEditSource() const throw (uno::RuntimeException)
{
if( mpEditSource )
return *mpEditSource;
else
throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("No edit source, object is defunct")),
uno::Reference< uno::XInterface >
( static_cast< ::cppu::OWeakObject* >
( const_cast< AccessibleImageBullet* > (this) ) ) ); // disambiguate hierarchy
}
SvxTextForwarder& AccessibleImageBullet::GetTextForwarder() const throw (uno::RuntimeException)
{
SvxEditSource& rEditSource = GetEditSource();
SvxTextForwarder* pTextForwarder = rEditSource.GetTextForwarder();
if( !pTextForwarder )
throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Unable to fetch text forwarder, object is defunct")),
uno::Reference< uno::XInterface >
( static_cast< ::cppu::OWeakObject* >
( const_cast< AccessibleImageBullet* > (this) ) ) ); // disambiguate hierarchy
if( pTextForwarder->IsValid() )
return *pTextForwarder;
else
throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Text forwarder is invalid, object is defunct")),
uno::Reference< uno::XInterface >
( static_cast< ::cppu::OWeakObject* >
( const_cast< AccessibleImageBullet* > (this) ) ) ); // disambiguate hierarchy
}
SvxViewForwarder& AccessibleImageBullet::GetViewForwarder() const throw (uno::RuntimeException)
{
SvxEditSource& rEditSource = GetEditSource();
SvxViewForwarder* pViewForwarder = rEditSource.GetViewForwarder();
if( !pViewForwarder )
{
throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Unable to fetch view forwarder, object is defunct")),
uno::Reference< uno::XInterface >
( static_cast< ::cppu::OWeakObject* >
( const_cast< AccessibleImageBullet* > (this) ) ) ); // disambiguate hierarchy
}
if( pViewForwarder->IsValid() )
return *pViewForwarder;
else
throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("View forwarder is invalid, object is defunct")),
uno::Reference< uno::XInterface >
( static_cast< ::cppu::OWeakObject* >
( const_cast< AccessibleImageBullet* > (this) ) ) ); // disambiguate hierarchy
}
const Point& AccessibleImageBullet::GetEEOffset() const
{
return maEEOffset;
}
} // end of namespace accessibility

View File

@@ -0,0 +1,304 @@
/*************************************************************************
*
* $RCSfile: AccessibleImageBullet.hxx,v $
*
* $Revision: 1.1 $
*
* last change: $Author: thb $ $Date: 2002-05-16 16:10:25 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 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
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (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.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
#ifndef _SVX_ACCESSIBLE_IMAGE_BULLET_HXX
#define _SVX_ACCESSIBLE_IMAGE_BULLET_HXX
#ifndef _SV_GEN_HXX
#include <tools/gen.hxx>
#endif
#ifndef _CPPUHELPER_WEAKREF_HXX_
#include <cppuhelper/weakref.hxx>
#endif
#ifndef _CPPUHELPER_IMPLBASE5_HXX_
#include <cppuhelper/implbase5.hxx>
#endif
#ifndef _CPPUHELPER_INTERFACECONTAINER_H_
#include <cppuhelper/interfacecontainer.hxx>
#endif
#ifndef _COM_SUN_STAR_UNO_REFERENCE_HXX_
#include <com/sun/star/uno/Reference.hxx>
#endif
#ifndef _COM_SUN_STAR_LANG_XSERVICEINFO_HPP_
#include <com/sun/star/lang/XServiceInfo.hpp>
#endif
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLE_HPP_
#include <drafts/com/sun/star/accessibility/XAccessible.hpp>
#endif
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLECONTEXT_HPP_
#include <drafts/com/sun/star/accessibility/XAccessibleContext.hpp>
#endif
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLECOMPONENT_HPP_
#include <drafts/com/sun/star/accessibility/XAccessibleComponent.hpp>
#endif
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLEEVENTBROADCASTER_HPP_
#include <drafts/com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp>
#endif
#ifndef _SVX_ACCESSIBLE_PARA_MANAGER_HXX
#include "AccessibleParaManager.hxx"
#endif
#ifndef _SVX_UNOEDSRC_HXX
#include "unoedsrc.hxx"
#endif
namespace accessibility
{
typedef ::cppu::WeakImplHelper5< ::drafts::com::sun::star::accessibility::XAccessible,
::drafts::com::sun::star::accessibility::XAccessibleContext,
::drafts::com::sun::star::accessibility::XAccessibleComponent,
::drafts::com::sun::star::accessibility::XAccessibleEventBroadcaster,
::com::sun::star::lang::XServiceInfo > AccessibleImageBulletInterfaceBase;
/** This class implements the image bullets for the EditEngine/Outliner UAA
*/
class AccessibleImageBullet : public AccessibleImageBulletInterfaceBase
{
public:
/// Create accessible object for given parent
AccessibleImageBullet ( const ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessible >& rParent );
virtual ~AccessibleImageBullet ();
// XInterface
virtual ::com::sun::star::uno::Any SAL_CALL queryInterface (const ::com::sun::star::uno::Type & rType) throw (::com::sun::star::uno::RuntimeException);
// XAccessible
virtual ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) throw (::com::sun::star::uno::RuntimeException);
// XAccessibleContext
virtual sal_Int32 SAL_CALL getAccessibleChildCount() throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleParent() throw (::com::sun::star::uno::RuntimeException);
virtual sal_Int32 SAL_CALL getAccessibleIndexInParent() throw (::com::sun::star::uno::RuntimeException);
virtual sal_Int16 SAL_CALL getAccessibleRole() throw (::com::sun::star::uno::RuntimeException);
/// Maximal length of text returned by getAccessibleDescription()
enum { MaxDescriptionLen = 40 };
virtual ::rtl::OUString SAL_CALL getAccessibleDescription() throw (::com::sun::star::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getAccessibleName() throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet() throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::lang::Locale SAL_CALL getLocale() throw (::drafts::com::sun::star::accessibility::IllegalAccessibleComponentStateException, ::com::sun::star::uno::RuntimeException);
// XAccessibleEventBroadcaster
virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessibleEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessibleEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
// XAccessibleComponent
virtual sal_Bool SAL_CALL contains( const ::com::sun::star::awt::Point& aPoint ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleAt( const ::com::sun::star::awt::Point& aPoint ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::awt::Rectangle SAL_CALL getBounds( ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::awt::Point SAL_CALL getLocation( ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::awt::Point SAL_CALL getLocationOnScreen( ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::awt::Size SAL_CALL getSize( ) throw (::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL isShowing( ) throw (::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL isVisible( ) throw (::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL isFocusTraversable( ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL addFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL removeFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL grabFocus( ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Any SAL_CALL getAccessibleKeyBinding( ) throw (::com::sun::star::uno::RuntimeException);
// XServiceInfo
virtual ::rtl::OUString SAL_CALL getImplementationName (void) throw (::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL supportsService (const ::rtl::OUString& sServiceName) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL getSupportedServiceNames (void) throw (::com::sun::star::uno::RuntimeException);
// XServiceName
virtual ::rtl::OUString SAL_CALL getServiceName (void) throw (::com::sun::star::uno::RuntimeException);
/** Set the current index in the accessibility parent
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
void SetIndexInParent( sal_Int32 nIndex );
/** Get the current index in the accessibility parent
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
sal_Int32 GetIndexInParent() const;
/** Set the edit engine offset
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
void SetEEOffset( const Point& rOffset );
/** Set the EditEngine offset
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
void SetEditSource( SvxEditSource* pEditSource );
/** Set the current paragraph number
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
void SetParagraphIndex( sal_Int32 nIndex );
/** Query the current paragraph number (0 - nParas-1)
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
sal_Int32 GetParagraphIndex() const throw (::com::sun::star::uno::RuntimeException);
/// Calls all Listener objects to tell them the change. Don't hold locks when calling this!
virtual void FireEvent(const sal_Int16 nEventId, const ::com::sun::star::uno::Any& rNewValue = ::com::sun::star::uno::Any(), const ::com::sun::star::uno::Any& rOldValue = ::com::sun::star::uno::Any() ) const;
private:
// declared, but not defined
AccessibleImageBullet( const AccessibleImageBullet& );
AccessibleImageBullet& operator= ( const AccessibleImageBullet& );
// syntactic sugar for FireEvent
void GotPropertyEvent( const ::com::sun::star::uno::Any& rNewValue, const sal_Int16 nEventId ) const;
void LostPropertyEvent( const ::com::sun::star::uno::Any& rOldValue, const sal_Int16 nEventId ) const;
/** Query the visibility state
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
@return the visibility state. Per definition, a defunc object is no longer visible
*/
sal_Bool IsVisible() const;
SvxEditSource& GetEditSource() const throw (::com::sun::star::uno::RuntimeException);
/** Query the SvxTextForwarder for EditEngine access.
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
SvxTextForwarder& GetTextForwarder() const throw (::com::sun::star::uno::RuntimeException);
/** Query the SvxViewForwarder for EditEngine access.
@attention This method does not lock the SolarMutex,
leaving that to the calling code. This is because only
there potential deadlock situations can be resolved. Thus,
make sure SolarMutex is locked when calling this.
*/
SvxViewForwarder& GetViewForwarder() const throw (::com::sun::star::uno::RuntimeException);
const Point& GetEEOffset() const;
// the paragraph index in the edit engine (guarded by solar mutex)
sal_Int32 mnParagraphIndex;
// our current index in the parent (guarded by solar mutex)
sal_Int32 mnIndexInParent;
// the current edit source (guarded by solar mutex)
SvxEditSource* mpEditSource;
// the offset of the underlying EditEngine from the shape/cell (guarded by solar mutex)
Point maEEOffset;
mutable osl::Mutex maMutex;
/// The shape we're the accessible for (unguarded)
::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessible > mxParent;
/// Our listeners (guarded by maMutex)
::cppu::OInterfaceContainerHelper maStateListeners;
};
} // end of namespace accessibility
#endif

View File

@@ -0,0 +1,306 @@
/*************************************************************************
*
* $RCSfile: AccessibleParaManager.cxx,v $
*
* $Revision: 1.1 $
*
* last change: $Author: thb $ $Date: 2002-05-16 16:10:49 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 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
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (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.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
#pragma hdrstop
//------------------------------------------------------------------------
//
// Global header
//
//------------------------------------------------------------------------
#ifndef _COM_SUN_STAR_UNO_ANY_HXX_
#include <com/sun/star/uno/Any.hxx>
#endif
#ifndef _COM_SUN_STAR_UNO_REFERENCE_HXX_
#include <com/sun/star/uno/Reference.hxx>
#endif
#ifndef _CPPUHELPER_WEAKREF_HXX_
#include <cppuhelper/weakref.hxx>
#endif
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLE_HPP_
#include <drafts/com/sun/star/accessibility/XAccessible.hpp>
#endif
//------------------------------------------------------------------------
//
// Project-local header
//
//------------------------------------------------------------------------
#include "unoedhlp.hxx"
#include "unopracc.hxx"
#include "unoedsrc.hxx"
#include "AccessibleParaManager.hxx"
#include "AccessibleEditableTextPara.hxx"
using namespace ::com::sun::star;
using namespace ::drafts::com::sun::star::accessibility;
namespace accessibility
{
AccessibleParaManager::AccessibleParaManager()
{
}
AccessibleParaManager::~AccessibleParaManager()
{
// owner is responsible for possible child defuncs
}
void AccessibleParaManager::SetNum( sal_Int32 nNumParas )
{
maChildren.resize( nNumParas );
}
AccessibleParaManager::VectorOfChildren::iterator AccessibleParaManager::begin()
{
return maChildren.begin();
}
AccessibleParaManager::VectorOfChildren::iterator AccessibleParaManager::end()
{
return maChildren.end();
}
AccessibleParaManager::VectorOfChildren::const_iterator AccessibleParaManager::begin() const
{
return maChildren.begin();
}
AccessibleParaManager::VectorOfChildren::const_iterator AccessibleParaManager::end() const
{
return maChildren.end();
}
void AccessibleParaManager::Release( sal_Int32 nPara )
{
ShutdownPara( maChildren[ nPara ] );
// clear reference and rect
maChildren[ nPara ] = WeakChild();
}
void AccessibleParaManager::FireEvent( sal_Int32 nPara,
const sal_Int16 nEventId,
const uno::Any& rNewValue,
const uno::Any& rOldValue ) const
{
WeakPara::HardRefType maChild( maChildren[ nPara ].first.get() );
if( maChild.is() )
maChild->FireEvent( nEventId, rNewValue, rOldValue );
}
sal_Bool AccessibleParaManager::IsReferencable( WeakPara::HardRefType aChild )
{
return aChild.is();
}
sal_Bool AccessibleParaManager::IsReferencable( sal_Int32 nChild ) const
{
// retrieve hard reference from weak one
return IsReferencable( maChildren[ nChild ].first.get() );
}
AccessibleParaManager::Child AccessibleParaManager::GetChild( sal_Int32 nChild,
const uno::Reference< XAccessible >& xFrontEnd,
SvxEditSourceAdapter& rEditSource,
sal_Int32 nParagraphIndex )
{
// retrieve hard reference from weak one
WeakPara::HardRefType aChild( maChildren[ nChild ].first.get() );
if( !IsReferencable( nChild ) )
{
// there is no hard reference available, create object then
AccessibleEditableTextPara* pChild = new AccessibleEditableTextPara( xFrontEnd );
uno::Reference< XAccessible > xChild( static_cast< ::cppu::OWeakObject* > (pChild), uno::UNO_QUERY );
if( !xChild.is() )
throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Child creation failed")), xFrontEnd);
aChild = WeakPara::HardRefType( xChild, pChild );
aChild->SetEditSource( &rEditSource );
aChild->SetIndexInParent( nChild );
aChild->SetParagraphIndex( nParagraphIndex );
maChildren[ nChild ] = WeakChild( aChild, pChild->getBounds() );
}
return Child( aChild.getRef(), maChildren[ nChild ].second );
}
// TODO: refactor these functors to a single template
class SetChildrenEEOffset : public ::std::unary_function< accessibility::AccessibleEditableTextPara&, void >
{
public:
SetChildrenEEOffset( const Point& rOffset ) : mrOffset( rOffset ) {}
void operator()( accessibility::AccessibleEditableTextPara& rPara )
{
rPara.SetEEOffset( mrOffset );
}
private:
const Point& mrOffset;
};
void AccessibleParaManager::SetEEOffset( const Point& rOffset )
{
ForEach( SetChildrenEEOffset( rOffset ) );
}
// TODO: refactor these functors to a single template
class SetChildrenEditSource : public ::std::unary_function< accessibility::AccessibleEditableTextPara&, void >
{
public:
SetChildrenEditSource( SvxEditSourceAdapter* pEditSource ) : mpEditSource( pEditSource ) {}
void operator()( accessibility::AccessibleEditableTextPara& rPara )
{
rPara.SetEditSource( mpEditSource );
}
private:
SvxEditSourceAdapter* mpEditSource;
};
void AccessibleParaManager::SetEditSource( SvxEditSourceAdapter* pEditSource )
{
ForEach( SetChildrenEditSource( pEditSource ) );
}
// TODO: refactor these functors to a single template (EffSTL or MExC++)
class StateChangeEvent : public ::std::unary_function< accessibility::AccessibleEditableTextPara&, void >
{
public:
typedef void return_type;
StateChangeEvent( const sal_Int16 nEventId,
const uno::Any& rNewValue,
const uno::Any& rOldValue ) :
mnEventId( nEventId ),
mrNewValue( rNewValue ),
mrOldValue( rOldValue ) {}
void operator()( accessibility::AccessibleEditableTextPara& rPara )
{
rPara.FireEvent( mnEventId, mrNewValue, mrOldValue );
}
private:
const sal_Int16 mnEventId;
const uno::Any& mrNewValue;
const uno::Any& mrOldValue;
};
void AccessibleParaManager::FireEvent( sal_Int32 nStartPara,
sal_Int32 nEndPara,
const sal_Int16 nEventId,
const uno::Any& rNewValue,
const uno::Any& rOldValue ) const
{
VectorOfChildren::const_iterator begin = maChildren.begin();
VectorOfChildren::const_iterator end = begin;
::std::advance< VectorOfChildren::const_iterator, sal_Int32 >( begin, nStartPara );
::std::advance< VectorOfChildren::const_iterator, sal_Int32 >( end, nEndPara );
::std::for_each( begin, end, AccessibleParaManager::WeakChildAdapter< StateChangeEvent > (StateChangeEvent( nEventId, rNewValue, rOldValue )) );
}
class ReleaseChild : public ::std::unary_function< const AccessibleParaManager::WeakChild&, AccessibleParaManager::WeakChild >
{
public:
AccessibleParaManager::WeakChild operator()( const AccessibleParaManager::WeakChild& rPara )
{
AccessibleParaManager::ShutdownPara( rPara );
// clear reference
return AccessibleParaManager::WeakChild();
}
};
void AccessibleParaManager::Release( sal_Int32 nStartPara, sal_Int32 nEndPara )
{
VectorOfChildren::iterator begin = maChildren.begin();
VectorOfChildren::iterator end = begin;
::std::advance< VectorOfChildren::iterator, sal_Int32 >( begin, nStartPara );
::std::advance< VectorOfChildren::iterator, sal_Int32 >( end, nEndPara );
::std::transform( begin, end, begin, ReleaseChild() );
}
void AccessibleParaManager::ShutdownPara( const WeakChild& rChild )
{
WeakPara::HardRefType aChild( rChild.first.get() );
if( IsReferencable( aChild ) )
aChild->SetEditSource( NULL );
}
}
//------------------------------------------------------------------------

View File

@@ -0,0 +1,276 @@
/*************************************************************************
*
* $RCSfile: AccessibleParaManager.hxx,v $
*
* $Revision: 1.1 $
*
* last change: $Author: thb $ $Date: 2002-05-16 16:10:41 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 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
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (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.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
#ifndef _SVX_ACCESSIBLE_PARA_MANAGER_HXX
#define _SVX_ACCESSIBLE_PARA_MANAGER_HXX
#include <vector>
#include <algorithm>
#include <functional>
#include <utility>
#ifndef _SV_GEN_HXX
#include <tools/gen.hxx>
#endif
#ifndef _COM_SUN_STAR_AWT_RECTANGLE_HPP_
#include <com/sun/star/awt/Rectangle.hpp>
#endif
#ifndef _COM_SUN_STAR_UNO_REFERENCE_HXX_
#include <com/sun/star/uno/Reference.hxx>
#endif
#ifndef _CPPUHELPER_WEAKREF_HXX_
#include <cppuhelper/weakref.hxx>
#endif
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLECONTEXT_HPP_
#include <drafts/com/sun/star/accessibility/XAccessibleContext.hpp>
#endif
class SvxEditSourceAdapter;
namespace accessibility
{
class AccessibleEditableTextPara;
/** Helper class for WeakCppRef
This class is returned by WeakChild::get() and contains a hard
reference and a reference to the c++ object. This combination
prevents the c++ object from destruction during usage. Hold
this object only as long as absolutely necessary, prevents
referenced object from vanishing otherwise
*/
template < class UnoType, class CppType > class HardCppRef
{
public:
typedef UnoType UnoInterfaceType;
typedef CppType InterfaceType;
HardCppRef( const ::com::sun::star::uno::WeakReference< UnoInterfaceType >& xRef, InterfaceType* rImpl ) :
mxRef( xRef ),
mpImpl( rImpl )
{
}
/** Query whether the reference is still valid.
Hands off also from the implementation pointer if this
returns sal_False!
*/
sal_Bool is() const { return mxRef.is(); }
InterfaceType* operator->() const { return mpImpl; }
InterfaceType& operator*() const { return *mpImpl; }
::com::sun::star::uno::Reference< UnoInterfaceType >& getRef() { return mxRef; }
const ::com::sun::star::uno::Reference< UnoInterfaceType >& getRef() const { return mxRef; }
// default copy constructor and assignment will do
// HardCppRef( const HardCppRef& );
// HardCppRef& operator= ( const HardCppRef& );
private:
// the interface, hard reference to prevent object from vanishing
::com::sun::star::uno::Reference< UnoInterfaceType > mxRef;
// the c++ object, for our internal stuff
InterfaceType* mpImpl;
};
/** Helper class for weak object references plus implementation
This class combines a weak reference (to facilitate automatic
object disposal if user drops last reference) and hard
reference to the c++ class (for fast access and bypassing of
the UNO interface)
*/
template < class UnoType, class CppType > class WeakCppRef
{
public:
typedef UnoType UnoInterfaceType;
typedef CppType InterfaceType;
typedef HardCppRef< UnoInterfaceType, InterfaceType > HardRefType;
WeakCppRef() : maWeakRef(), maUnsafeRef( NULL ) {}
WeakCppRef( InterfaceType& rImpl ) :
maWeakRef( ::com::sun::star::uno::Reference< UnoInterfaceType >( rImpl, uno::UNO_QUERY ) ),
maUnsafeRef( &rImpl )
{
}
WeakCppRef( HardRefType& rImpl ) :
maWeakRef( rImpl.getRef() ),
maUnsafeRef( rImpl.operator->() )
{
}
// get object with c++ object and hard reference (which
// prevents the c++ object from destruction during use)
HardRefType get() const { return HardRefType( maWeakRef, maUnsafeRef ); }
// default copy constructor and assignment will do
// WeakCppRef( const WeakCppRef& );
// WeakCppRef& operator= ( const WeakCppRef& );
private:
// the interface, hold weakly
::com::sun::star::uno::WeakReference< UnoInterfaceType > maWeakRef;
// hard ref to c++ class, _only_ valid if maWeakRef.is() is true
InterfaceType* maUnsafeRef;
};
/** This class manages the paragraphs of an AccessibleTextHelper
To facilitate automatic deletion of paragraphs no longer used,
this class uses the WeakCppRef helper to hold the objects weakly.
*/
class AccessibleParaManager
{
public:
typedef WeakCppRef < ::drafts::com::sun::star::accessibility::XAccessible, AccessibleEditableTextPara > WeakPara;
typedef ::std::pair< WeakPara, ::com::sun::star::awt::Rectangle > WeakChild;
typedef ::std::pair< ::com::sun::star::uno::Reference<
::drafts::com::sun::star::accessibility::XAccessible > , ::com::sun::star::awt::Rectangle > Child;
typedef ::std::vector< WeakChild > VectorOfChildren;
AccessibleParaManager();
~AccessibleParaManager();
// changing the state of the AccessibleParaManager itself
void SetNum( sal_Int32 nNumParas );
// iterators
VectorOfChildren::iterator begin();
VectorOfChildren::iterator end();
VectorOfChildren::const_iterator begin() const;
VectorOfChildren::const_iterator end() const;
// dealing with single paragraphs (release reference, return reference etc)
void Release( sal_Int32 nPara );
void FireEvent( sal_Int32 nPara,
const sal_Int16 nEventId,
const ::com::sun::star::uno::Any& rNewValue = ::com::sun::star::uno::Any(),
const ::com::sun::star::uno::Any& rOldValue = ::com::sun::star::uno::Any() ) const;
static sal_Bool IsReferencable( WeakPara::HardRefType aChild );
sal_Bool IsReferencable( sal_Int32 nChild ) const;
static void ShutdownPara( const WeakChild& rChild );
Child GetChild( sal_Int32 nChild,
const ::com::sun::star::uno::Reference< ::drafts::com::sun::star::accessibility::XAccessible >& xFrontEnd,
SvxEditSourceAdapter& rEditSource,
sal_Int32 nParagraphIndex );
// forwarder to all paragraphs
void SetEEOffset ( const Point& rOffset );
void SetEditSource ( SvxEditSourceAdapter* pEditSource );
// forwarder to given paragraphs
void Release( sal_Int32 nStartPara, sal_Int32 nEndPara );
void FireEvent( sal_Int32 nStartPara,
sal_Int32 nEndPara,
const sal_Int16 nEventId,
const ::com::sun::star::uno::Any& rNewValue = ::com::sun::star::uno::Any(),
const ::com::sun::star::uno::Any& rOldValue = ::com::sun::star::uno::Any() ) const;
// functor adapter for ForEach template, accessing only the
// paragraph object and hiding the fact that our children are
// held weakly
template < typename Functor > class WeakChildAdapter : public ::std::unary_function< const WeakChild&, void >
{
public:
WeakChildAdapter( Functor& rFunctor ) : mrFunctor(rFunctor) {}
void operator()( const WeakChild& rPara )
{
// retrieve hard reference from weak one
WeakPara::HardRefType aHardRef( rPara.first.get() );
if( aHardRef.is() )
mrFunctor( *aHardRef );
}
private:
Functor& mrFunctor;
};
// generic algorithm on given paragraphs (non-mutating, i.e. the
// original vector is unchanged). convenience.
template < typename Functor > void ForEach( Functor& rFunctor )
{
::std::for_each( begin(), end(), WeakChildAdapter< Functor >(rFunctor) );
}
private:
// vector the size of the paragraph number of the underlying EditEngine
VectorOfChildren maChildren;
};
} // end of namespace accessibility
#endif

File diff suppressed because it is too large Load Diff

196
svx/source/inc/unoedprx.hxx Normal file
View File

@@ -0,0 +1,196 @@
/*************************************************************************
*
* $RCSfile: unoedprx.hxx,v $
*
* $Revision: 1.1 $
*
* last change: $Author: thb $ $Date: 2002-05-16 16:11:24 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 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
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (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.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
#ifndef _SVX_UNOEDPRX_HXX
#define _SVX_UNOEDPRX_HXX
#include <memory>
#ifndef _SFXBRDCST_HXX
#include <svtools/brdcst.hxx>
#endif
#ifndef _SVX_UNOEDSRC_HXX
#include "unoedsrc.hxx"
#endif
#include "editdata.hxx"
class SvxAccessibleTextAdapter : public SvxTextForwarder
{
public:
SvxAccessibleTextAdapter();
virtual ~SvxAccessibleTextAdapter();
virtual USHORT GetParagraphCount() const;
virtual USHORT GetTextLen( USHORT nParagraph ) const;
virtual String GetText( const ESelection& rSel ) const;
virtual SfxItemSet GetAttribs( const ESelection& rSel, BOOL bOnlyHardAttrib = 0 ) const;
virtual SfxItemSet GetParaAttribs( USHORT nPara ) const;
virtual void SetParaAttribs( USHORT nPara, const SfxItemSet& rSet );
virtual void GetPortions( USHORT nPara, SvUShorts& rList ) const;
virtual USHORT GetItemState( const ESelection& rSel, USHORT nWhich ) const;
virtual USHORT GetItemState( USHORT nPara, USHORT nWhich ) const;
virtual void QuickInsertText( const String& rText, const ESelection& rSel );
virtual void QuickInsertField( const SvxFieldItem& rFld, const ESelection& rSel );
virtual void QuickSetAttribs( const SfxItemSet& rSet, const ESelection& rSel );
virtual void QuickInsertLineBreak( const ESelection& rSel );
virtual SfxItemPool* GetPool() const;
virtual XubString CalcFieldValue( const SvxFieldItem& rField, USHORT nPara, USHORT nPos, Color*& rpTxtColor, Color*& rpFldColor );
virtual BOOL IsValid() const;
virtual LanguageType GetLanguage( USHORT, USHORT ) const;
virtual USHORT GetFieldCount( USHORT nPara ) const;
virtual EFieldInfo GetFieldInfo( USHORT nPara, USHORT nField ) const;
virtual EBulletInfo GetBulletInfo( USHORT nPara ) const;
virtual Rectangle GetCharBounds( USHORT nPara, USHORT nIndex ) const;
virtual Rectangle GetParaBounds( USHORT nPara ) const;
virtual MapMode GetMapMode() const;
virtual OutputDevice* GetRefDevice() const;
virtual sal_Bool GetIndexAtPoint( const Point&, USHORT& nPara, USHORT& nIndex ) const;
virtual sal_Bool GetWordIndices( USHORT nPara, USHORT nIndex, USHORT& nStart, USHORT& nEnd ) const;
virtual USHORT GetLineCount( USHORT nPara ) const;
virtual USHORT GetLineLen( USHORT nPara, USHORT nLine ) const;
virtual sal_Bool Delete( const ESelection& );
virtual sal_Bool InsertText( const String&, const ESelection& );
virtual sal_Bool QuickFormatDoc( BOOL bFull=FALSE );
void SetForwarder( SvxTextForwarder& );
sal_Bool HaveImageBullet( USHORT nPara ) const;
sal_Bool HaveTextBullet( USHORT nPara ) const;
/** Query whether all text in given selection is editable
@return sal_True if every character in the given selection can
be changed, and sal_False if e.g. a field or a bullet is
contained therein.
*/
sal_Bool IsEditable( const ESelection& rSelection );
private:
SvxTextForwarder* mrTextForwarder;
};
class SvxAccessibleTextEditViewAdapter : public SvxEditViewForwarder
{
public:
SvxAccessibleTextEditViewAdapter();
virtual ~SvxAccessibleTextEditViewAdapter();
virtual BOOL IsValid() const;
virtual Rectangle GetVisArea() const;
virtual Point LogicToPixel( const Point& rPoint, const MapMode& rMapMode ) const;
virtual Point PixelToLogic( const Point& rPoint, const MapMode& rMapMode ) const;
virtual sal_Bool GetSelection( ESelection& rSelection ) const;
virtual sal_Bool SetSelection( const ESelection& rSelection );
virtual sal_Bool Copy();
virtual sal_Bool Cut();
virtual sal_Bool Paste();
void SetForwarder( SvxEditViewForwarder&, SvxAccessibleTextAdapter& );
private:
SvxEditViewForwarder* mrViewForwarder;
SvxAccessibleTextAdapter* mrTextForwarder;
};
class SvxEditSourceAdapter : public SvxEditSource
{
public:
SvxEditSourceAdapter();
~SvxEditSourceAdapter();
virtual SvxEditSource* Clone() const;
virtual SvxTextForwarder* GetTextForwarder();
SvxAccessibleTextAdapter* GetTextForwarderAdapter(); // covariant return types don't work on MSVC
virtual SvxViewForwarder* GetViewForwarder();
virtual SvxEditViewForwarder* GetEditViewForwarder( sal_Bool bCreate = sal_False );
SvxAccessibleTextEditViewAdapter* GetEditViewForwarderAdapter( sal_Bool bCreate = sal_False ); // covariant return types don't work on MSVC
virtual void UpdateData();
virtual SfxBroadcaster& GetBroadcaster() const;
void SetEditSource( ::std::auto_ptr< SvxEditSource > pAdaptee );
sal_Bool IsValid() const;
private:
// declared, but not defined
SvxEditSourceAdapter( const SvxEditSourceAdapter& );
SvxEditSourceAdapter& operator= ( const SvxEditSourceAdapter& );
::std::auto_ptr< SvxEditSource > mpAdaptee;
SvxAccessibleTextAdapter maTextAdapter;
SvxAccessibleTextEditViewAdapter maEditViewAdapter;
mutable SfxBroadcaster maDummyBroadcaster;
sal_Bool mbEditSourceValid;
};
#endif

113
svx/source/inc/unopracc.hxx Normal file
View File

@@ -0,0 +1,113 @@
/*************************************************************************
*
* $RCSfile: unopracc.hxx,v $
*
* $Revision: 1.1 $
*
* last change: $Author: thb $ $Date: 2002-05-16 16:11:41 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 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
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (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.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
#ifndef _SVX_UNOPRACC_HXX
#define _SVX_UNOPRACC_HXX
#ifndef _SVX_UNOSHAPE_HXX
#include "unoshape.hxx"
#endif
#ifndef _SVX_UNOTEXT_HXX
#include "unotext.hxx"
#endif
class SvxEditSource;
/** Wraps SvxUnoTextRangeBase and provides us with the text properties
Inherits from SvxUnoTextRangeBase and provides XPropertySet and
XMultiPropertySet interfaces. Just set the selection to the
required text range and return a reference to a XPropertySet.
*/
class SvxAccessibleTextPropertySet : public SvxUnoTextRangeBase,
public ::com::sun::star::lang::XTypeProvider,
public ::cppu::OWeakObject
{
public:
SvxAccessibleTextPropertySet( const SvxEditSource*, const SfxItemPropertyMap* );
virtual ~SvxAccessibleTextPropertySet() throw();
// XTextRange
virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XText > SAL_CALL getText() throw (::com::sun::star::uno::RuntimeException);
// uno::XInterface
virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL acquire() throw();
virtual void SAL_CALL release() throw();
// lang::XServiceInfo
virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException);
virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw (::com::sun::star::uno::RuntimeException);
// lang::XTypeProvider
virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
// XServiceName
::rtl::OUString SAL_CALL SvxAccessibleTextPropertySet::getServiceName() throw (::com::sun::star::uno::RuntimeException);
};
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,227 @@
/*************************************************************************
*
* $RCSfile: unopracc.cxx,v $
*
* $Revision: 1.1 $
*
* last change: $Author: thb $ $Date: 2002-05-16 16:12:04 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 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
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (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.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
#pragma hdrstop
//------------------------------------------------------------------------
//
// Global header
//
//------------------------------------------------------------------------
#ifndef _VOS_MUTEX_HXX_
#include <vos/mutex.hxx>
#endif
#ifndef _COM_SUN_STAR_UNO_ANY_HXX_
#include <com/sun/star/uno/Any.hxx>
#endif
#ifndef _COM_SUN_STAR_UNO_REFERENCE_HXX_
#include <com/sun/star/uno/Reference.hxx>
#endif
#ifndef _CPPUHELPER_WEAKREF_HXX_
#include <cppuhelper/weakref.hxx>
#endif
#ifndef _COM_SUN_STAR_LANG_XCOMPONENT_HPP_
#include <com/sun/star/lang/XComponent.hpp>
#endif
#ifndef _CPPUHELPER_TYPEPROVIDER_HXX_
#include <cppuhelper/typeprovider.hxx>
#endif
//------------------------------------------------------------------------
//
// Project-local header
//
//------------------------------------------------------------------------
#ifndef _SVX_UNOPRACC_HXX_
#include "unopracc.hxx"
#endif
#ifndef _SVX_UNOEDSRC_HXX
#include "unoedsrc.hxx"
#endif
using namespace ::com::sun::star;
//------------------------------------------------------------------------
//
// SvxAccessibleTextPropertySet implementation
//
//------------------------------------------------------------------------
SvxAccessibleTextPropertySet::SvxAccessibleTextPropertySet( const SvxEditSource* pEditSrc, const SfxItemPropertyMap* pPropMap )
: SvxUnoTextRangeBase( pEditSrc, pPropMap )
{
}
SvxAccessibleTextPropertySet::~SvxAccessibleTextPropertySet() throw()
{
}
uno::Reference< text::XText > SAL_CALL SvxAccessibleTextPropertySet::getText() throw (uno::RuntimeException)
{
// TODO (empty?)
return uno::Reference< text::XText > ();
}
uno::Any SAL_CALL SvxAccessibleTextPropertySet::queryAggregation( const uno::Type & rType ) throw(uno::RuntimeException)
{
// TODO (empty?)
return uno::Any();
}
uno::Any SAL_CALL SvxAccessibleTextPropertySet::queryInterface( const uno::Type & rType )
throw(uno::RuntimeException)
{
return OWeakObject::queryInterface(rType);
}
void SAL_CALL SvxAccessibleTextPropertySet::acquire()
throw()
{
OWeakObject::acquire();
}
void SAL_CALL SvxAccessibleTextPropertySet::release()
throw()
{
OWeakObject::release();
}
// XTypeProvider
uno::Sequence< uno::Type > SAL_CALL SvxAccessibleTextPropertySet::getTypes() throw ( uno::RuntimeException )
{
static ::cppu::OTypeCollection* pTypeCollection = NULL ;
// double-checked locking pattern.
if ( pTypeCollection == NULL )
{
osl::MutexGuard aGuard( osl::Mutex::getGlobalMutex() ) ;
// Control these pointer again ... it can be, that another instance will be faster then these!
if ( pTypeCollection == NULL )
{
// Create a static typecollection ...
static ::cppu::OTypeCollection aTypeCollection(
::getCppuType( static_cast< const uno::Reference< beans::XPropertySet >* > (0) ),
::getCppuType( static_cast< const uno::Reference< beans::XMultiPropertySet >* > (0) ),
::getCppuType( static_cast< const uno::Reference< beans::XPropertyState >* > (0) ),
::getCppuType( static_cast< const uno::Reference< lang::XServiceInfo >* > (0) ),
::getCppuType( static_cast< const uno::Reference< lang::XTypeProvider >* > (0) ) );
// ... and set his address to static pointer!
pTypeCollection = &aTypeCollection ;
}
}
return pTypeCollection->getTypes() ;
}
uno::Sequence< sal_Int8 > SAL_CALL SvxAccessibleTextPropertySet::getImplementationId()
throw (uno::RuntimeException)
{
static uno::Sequence< sal_Int8 > aId;
if( aId.getLength() == 0 )
{
aId.realloc( 16 );
rtl_createUuid( reinterpret_cast< sal_uInt8* > (aId.getArray()), 0, sal_True );
}
return aId;
}
// XServiceInfo
::rtl::OUString SAL_CALL SAL_CALL SvxAccessibleTextPropertySet::getImplementationName (void) throw (uno::RuntimeException)
{
return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM ("SvxAccessibleTextPropertySet"));
}
sal_Bool SAL_CALL SvxAccessibleTextPropertySet::supportsService (const ::rtl::OUString& sServiceName) throw (uno::RuntimeException)
{
// Iterate over all supported service names and return true if on of them
// matches the given name.
uno::Sequence< ::rtl::OUString> aSupportedServices (
getSupportedServiceNames ());
for (int i=0; i<aSupportedServices.getLength(); i++)
if (sServiceName == aSupportedServices[i])
return sal_True;
return sal_False;
}
uno::Sequence< ::rtl::OUString> SAL_CALL SvxAccessibleTextPropertySet::getSupportedServiceNames (void) throw (uno::RuntimeException)
{
// TODO
return SvxUnoTextRangeBase::getSupportedServiceNames();
}
// XServiceName
::rtl::OUString SAL_CALL SvxAccessibleTextPropertySet::getServiceName() throw (uno::RuntimeException)
{
return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.beans.PropertyValue"));
}