2002-02-04 13:10:18 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
|
|
|
* $RCSfile: acccontext.cxx,v $
|
|
|
|
*
|
2002-05-03 11:34:00 +00:00
|
|
|
* $Revision: 1.22 $
|
2002-02-04 13:10:18 +00:00
|
|
|
*
|
2002-05-03 11:34:00 +00:00
|
|
|
* last change: $Author: mib $ $Date: 2002-05-03 12:34:00 $
|
2002-02-04 13:10:18 +00:00
|
|
|
*
|
|
|
|
* 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): _______________________________________
|
|
|
|
*
|
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
|
|
|
|
#ifdef PRECOMPILED
|
|
|
|
#include "core_pch.hxx"
|
|
|
|
#endif
|
2002-02-11 11:51:16 +00:00
|
|
|
#if defined DEBUG && defined TEST_MIB
|
2002-02-04 13:10:18 +00:00
|
|
|
#ifndef _STRING_HXX
|
|
|
|
#include <tools/string.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _STREAM_HXX
|
|
|
|
#include <tools/stream.hxx>
|
|
|
|
#endif
|
|
|
|
#endif
|
2002-03-19 11:49:27 +00:00
|
|
|
#ifndef _TOOLS_DEBUG_HXX
|
|
|
|
#include <tools/debug.hxx>
|
|
|
|
#endif
|
2002-02-04 13:10:18 +00:00
|
|
|
#ifndef _SV_WINDOW_HXX
|
|
|
|
#include <vcl/window.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _ERRHDL_HXX
|
|
|
|
#include "errhdl.hxx"
|
|
|
|
#endif
|
|
|
|
#ifndef _SWTYPES_HXX
|
|
|
|
#include "swtypes.hxx"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#pragma hdrstop
|
|
|
|
|
2002-02-05 14:52:06 +00:00
|
|
|
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLESTATESET_HPP_
|
|
|
|
#include <drafts/com/sun/star/accessibility/XAccessibleStateSet.hpp>
|
|
|
|
#endif
|
|
|
|
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLESTATETYPE_HPP_
|
2002-02-18 15:27:35 +00:00
|
|
|
#include <drafts/com/sun/star/accessibility/AccessibleStateType.hpp>
|
2002-02-05 14:52:06 +00:00
|
|
|
#endif
|
2002-02-15 07:30:25 +00:00
|
|
|
#ifndef _DRAFTS_COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEEVENTID_HPP_
|
|
|
|
#include <drafts/com/sun/star/accessibility/AccessibleEventId.hpp>
|
|
|
|
#endif
|
2002-02-04 13:10:18 +00:00
|
|
|
#ifndef _VOS_MUTEX_HXX_ //autogen
|
|
|
|
#include <vos/mutex.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _SV_SVAPP_HXX //autogen
|
|
|
|
#include <vcl/svapp.hxx>
|
|
|
|
#endif
|
2002-02-05 14:52:06 +00:00
|
|
|
#ifndef _UTL_ACCESSIBLESTATESETHELPER_HXX_
|
|
|
|
#include <unotools/accessiblestatesethelper.hxx>
|
2002-02-04 13:10:18 +00:00
|
|
|
#endif
|
2002-02-20 16:55:57 +00:00
|
|
|
#ifndef _VIEWSH_HXX
|
|
|
|
#include <viewsh.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _VIEWIMP_HXX
|
|
|
|
#include <viewimp.hxx>
|
|
|
|
#endif
|
2002-02-04 13:10:18 +00:00
|
|
|
#ifndef _ACCMAP_HXX
|
|
|
|
#include <accmap.hxx>
|
|
|
|
#endif
|
2002-04-11 13:04:40 +00:00
|
|
|
#ifndef _ACCFRMOBJSLIST_HXX
|
|
|
|
#include <accfrmobjslist.hxx>
|
|
|
|
#endif
|
2002-02-04 13:10:18 +00:00
|
|
|
#ifndef _ACCCONTEXT_HXX
|
|
|
|
#include <acccontext.hxx>
|
|
|
|
#endif
|
|
|
|
|
2002-02-11 11:51:16 +00:00
|
|
|
#if defined DEBUG && defined TEST_MIB
|
|
|
|
#define DBG_MSG( _msg ) \
|
|
|
|
lcl_SwAccessibleContext_DbgMsg( this, _msg, 0, sal_False );
|
|
|
|
#define DBG_MSG_CD( _msg ) \
|
|
|
|
lcl_SwAccessibleContext_DbgMsg( this, _msg, 0, sal_True );
|
|
|
|
#define DBG_MSG_PARAM( _msg, _param ) \
|
|
|
|
lcl_SwAccessibleContext_DbgMsg( this, _msg, _param, sal_False );
|
|
|
|
#define DBG_MSG_THIS_PARAM( _msg, _this, _param ) \
|
|
|
|
lcl_SwAccessibleContext_DbgMsg( _this, _msg, _param, sal_False );
|
|
|
|
|
|
|
|
void lcl_SwAccessibleContext_DbgMsg( SwAccessibleContext *pThisAcc,
|
|
|
|
const char *pMsg,
|
|
|
|
SwAccessibleContext *pChildAcc,
|
|
|
|
sal_Bool bConstrDestr );
|
|
|
|
#else
|
|
|
|
#define DBG_MSG( _msg )
|
|
|
|
#define DBG_MSG_PARAM( _msg, _param )
|
|
|
|
#define DBG_MSG_THIS_PARAM( _msg, _this, _param )
|
2002-02-14 09:54:11 +00:00
|
|
|
#define DBG_MSG_CD( _msg )
|
2002-02-11 11:51:16 +00:00
|
|
|
#endif
|
|
|
|
|
2002-02-04 13:10:18 +00:00
|
|
|
using namespace ::com::sun::star;
|
|
|
|
using namespace ::com::sun::star::beans;
|
|
|
|
using namespace ::com::sun::star::lang;
|
|
|
|
using namespace ::com::sun::star::uno;
|
|
|
|
using namespace ::drafts::com::sun::star::accessibility;
|
|
|
|
using namespace ::rtl;
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
void SwAccessibleContext::InitStates()
|
2002-03-18 11:49:59 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
bIsShowingState = IsShowing();
|
2002-03-18 11:49:59 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
ViewShell *pVSh = GetMap()->GetShell();
|
|
|
|
bIsEditableState = pVSh && IsEditable( pVSh );
|
|
|
|
bIsOpaqueState = pVSh && IsOpaque( pVSh );
|
|
|
|
bIsDefuncState = sal_False;
|
2002-03-18 11:49:59 +00:00
|
|
|
}
|
|
|
|
|
2002-03-11 10:54:46 +00:00
|
|
|
void SwAccessibleContext::SetParent( SwAccessibleContext *pParent )
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard( aMutex );
|
|
|
|
|
|
|
|
::com::sun::star::uno::Reference < ::drafts::com::sun::star::accessibility::XAccessible > xParent( pParent );
|
|
|
|
xWeakParent = xParent;
|
|
|
|
}
|
|
|
|
|
2002-04-05 11:18:25 +00:00
|
|
|
Reference< XAccessible > SwAccessibleContext::GetWeakParent() const
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard( aMutex );
|
|
|
|
|
|
|
|
Reference< XAccessible > xParent( xWeakParent );
|
|
|
|
return xParent;
|
|
|
|
}
|
2002-03-11 10:54:46 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
Window *SwAccessibleContext::GetWindow()
|
2002-02-11 11:51:16 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
Window *pWin = 0;
|
2002-02-11 11:51:16 +00:00
|
|
|
|
2002-02-20 16:55:57 +00:00
|
|
|
if( GetMap() )
|
2002-02-11 11:51:16 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
const ViewShell *pVSh = GetMap()->GetShell();
|
|
|
|
ASSERT( pVSh, "no view shell" );
|
|
|
|
if( pVSh )
|
|
|
|
pWin = pVSh->GetWin();
|
2002-02-11 11:51:16 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
ASSERT( pWin, "no window" );
|
2002-02-11 11:51:16 +00:00
|
|
|
}
|
2002-02-04 13:10:18 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
return pWin;
|
2002-02-04 13:10:18 +00:00
|
|
|
}
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
enum Action { NONE, SCROLLED, SCROLLED_WITHIN,
|
|
|
|
SCROLLED_IN, SCROLLED_OUT };
|
2002-03-18 11:49:59 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
void SwAccessibleContext::ChildrenScrolled( const SwFrm *pFrm,
|
|
|
|
const SwRect& rOldVisArea )
|
2002-02-04 13:10:18 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
const SwRect& rNewVisArea = GetVisArea();
|
|
|
|
SwFrmOrObj aFrm( pFrm );
|
|
|
|
sal_Bool bVisibleOnly = aFrm.IsVisibleChildrenOnly();
|
2002-02-11 11:51:16 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
Reference < XAccessible > xAcc;
|
2002-02-05 14:52:06 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
const SwFrmOrObjSList aList( pFrm );
|
|
|
|
SwFrmOrObjSList::const_iterator aIter( aList.begin() );
|
|
|
|
while( aIter != aList.end() )
|
|
|
|
{
|
|
|
|
const SwFrmOrObj& rLower = *aIter;
|
|
|
|
const SwFrm *pLower = rLower.GetSwFrm();
|
|
|
|
SwRect aBox( rLower.GetBox() );
|
|
|
|
if( rLower.IsAccessible() )
|
2002-02-20 16:55:57 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
Action eAction = NONE;
|
|
|
|
if( pLower )
|
|
|
|
{
|
|
|
|
if( aBox.IsOver( rNewVisArea ) )
|
|
|
|
{
|
|
|
|
if( aBox.IsOver( rOldVisArea ) )
|
|
|
|
{
|
|
|
|
eAction = SCROLLED_WITHIN;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if( bVisibleOnly )
|
|
|
|
eAction = SCROLLED_IN;
|
|
|
|
else
|
|
|
|
eAction = SCROLLED;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if( aBox.IsOver( rOldVisArea ) )
|
|
|
|
{
|
|
|
|
if( bVisibleOnly )
|
|
|
|
eAction = SCROLLED_OUT;
|
|
|
|
else
|
|
|
|
eAction = SCROLLED;
|
|
|
|
}
|
|
|
|
else if( !bVisibleOnly )
|
|
|
|
{
|
|
|
|
// This wouldn't be required if the SwAccessibleFrame,
|
|
|
|
// wouldn't know about the vis area.
|
|
|
|
eAction = SCROLLED;
|
|
|
|
}
|
|
|
|
if( NONE != eAction )
|
|
|
|
{
|
|
|
|
::vos::ORef< SwAccessibleContext > xAccImpl =
|
|
|
|
GetMap()->GetContextImpl( pLower, SCROLLED_OUT == eAction ||
|
|
|
|
SCROLLED_IN == eAction );
|
|
|
|
if( xAccImpl.isValid() )
|
|
|
|
{
|
|
|
|
switch( eAction )
|
|
|
|
{
|
|
|
|
case SCROLLED:
|
|
|
|
xAccImpl->Scrolled( rOldVisArea );
|
|
|
|
break;
|
|
|
|
case SCROLLED_WITHIN:
|
|
|
|
xAccImpl->ScrolledWithin( rOldVisArea );
|
|
|
|
break;
|
|
|
|
case SCROLLED_IN:
|
|
|
|
xAccImpl->ScrolledIn();
|
|
|
|
break;
|
|
|
|
case SCROLLED_OUT:
|
|
|
|
xAccImpl->ScrolledOut( rOldVisArea );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
ChildrenScrolled( pLower, rOldVisArea );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// TODO: SdrObjects
|
|
|
|
}
|
2002-02-20 16:55:57 +00:00
|
|
|
}
|
2002-04-11 13:04:40 +00:00
|
|
|
else if( pLower && (!bVisibleOnly ||
|
|
|
|
aBox.IsOver( rOldVisArea ) ||
|
|
|
|
aBox.IsOver( rNewVisArea )) )
|
2002-03-18 11:49:59 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
// There are no unaccessible SdrObjects that need to be notified
|
|
|
|
ChildrenScrolled( pLower, rOldVisArea );
|
2002-03-18 11:49:59 +00:00
|
|
|
}
|
2002-04-11 13:04:40 +00:00
|
|
|
++aIter;
|
2002-03-18 11:49:59 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
void SwAccessibleContext::Scrolled( const SwRect& rOldVisArea )
|
2002-02-04 13:10:18 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
SetVisArea( GetMap()->GetVisArea() );
|
2002-02-20 16:55:57 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
ChildrenScrolled( GetFrm(), rOldVisArea );
|
2002-02-20 16:55:57 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
sal_Bool bIsOldShowingState;
|
|
|
|
sal_Bool bIsNewShowingState = IsShowing();
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard( aMutex );
|
|
|
|
bIsOldShowingState = bIsShowingState;
|
|
|
|
bIsShowingState = bIsNewShowingState;
|
2002-02-20 16:55:57 +00:00
|
|
|
}
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
if( bIsOldShowingState != bIsNewShowingState )
|
|
|
|
FireStateChangedEvent( AccessibleStateType::SHOWING,
|
|
|
|
bIsNewShowingState );
|
2002-02-20 16:55:57 +00:00
|
|
|
}
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
void SwAccessibleContext::ScrolledWithin( const SwRect& rOldVisArea )
|
2002-03-18 11:49:59 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
SetVisArea( GetMap()->GetVisArea() );
|
2002-03-19 11:49:27 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
ChildrenScrolled( GetFrm(), rOldVisArea );
|
2002-03-18 11:49:59 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
FireVisibleDataEvent();
|
2002-03-18 11:49:59 +00:00
|
|
|
}
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
void SwAccessibleContext::ScrolledIn()
|
2002-02-20 16:55:57 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
// This accessible should be freshly created, because it
|
|
|
|
// was not visisble before. Therefor, its vis area must already
|
|
|
|
// reflect the scrolling.
|
|
|
|
ASSERT( GetVisArea() == GetMap()->GetVisArea(),
|
|
|
|
"Vis area of child is wrong. Did it exist already?" );
|
2002-02-20 16:55:57 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
// Send child event at parent. That's all we have to do here.
|
|
|
|
const SwFrm *pParent = GetParent();
|
|
|
|
::vos::ORef< SwAccessibleContext > xParentImpl(
|
|
|
|
GetMap()->GetContextImpl( pParent, sal_False ) );
|
2002-02-20 16:55:57 +00:00
|
|
|
Reference < XAccessibleContext > xThis( this );
|
2002-04-11 13:04:40 +00:00
|
|
|
if( xParentImpl.isValid() )
|
2002-02-11 11:51:16 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
SetParent( xParentImpl.getBodyPtr() );
|
2002-02-11 11:51:16 +00:00
|
|
|
|
2002-02-15 07:30:25 +00:00
|
|
|
AccessibleEventObject aEvent;
|
|
|
|
aEvent.EventId = AccessibleEventId::ACCESSIBLE_CHILD_EVENT;
|
2002-04-11 13:04:40 +00:00
|
|
|
aEvent.NewValue <<= xThis;
|
2002-03-18 11:49:59 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
xParentImpl->FireAccessibleEvent( aEvent );
|
|
|
|
DBG_MSG_PARAM( "AccessibleChild (added)", xChildImpl.getBodyPtr() )
|
2002-02-20 16:55:57 +00:00
|
|
|
}
|
2002-02-11 11:51:16 +00:00
|
|
|
}
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
void SwAccessibleContext::ScrolledOut( const SwRect& rOldVisArea )
|
2002-02-11 11:51:16 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
SetVisArea( GetMap()->GetVisArea() );
|
|
|
|
|
|
|
|
// First of all, update the children. That's required to dispose
|
|
|
|
// all children that are existing only if they are visible. They
|
|
|
|
// are not disposed by the recusive Dispose call that follows later on,
|
|
|
|
// because this call will only dispose children that are in the
|
|
|
|
// new vis area. The children we want to dispode however are in the
|
|
|
|
// old vis area all.
|
|
|
|
ChildrenScrolled( GetFrm(), rOldVisArea );
|
|
|
|
|
|
|
|
// Broadcast a state changed event for the showing state.
|
|
|
|
// It might be that the child is freshly created just to send
|
|
|
|
// the child event. In this case no listener will exist.
|
|
|
|
FireStateChangedEvent( AccessibleStateType::SHOWING, sal_False );
|
|
|
|
|
|
|
|
// We now dispose the frame
|
|
|
|
Dispose( sal_True );
|
|
|
|
}
|
2002-03-11 10:54:46 +00:00
|
|
|
|
2002-03-08 12:26:29 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
void SwAccessibleContext::InvalidateChildrenStates( const SwFrm *pFrm,
|
|
|
|
sal_uInt8 nStates )
|
|
|
|
{
|
|
|
|
const SwFrmOrObjSList aVisList( GetVisArea(), pFrm );
|
|
|
|
|
|
|
|
SwFrmOrObjSList::const_iterator aIter( aVisList.begin() );
|
|
|
|
while( aIter != aVisList.end() )
|
2002-02-11 11:51:16 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
const SwFrmOrObj& rLower = *aIter;
|
|
|
|
const SwFrm *pLower = rLower.GetSwFrm();
|
|
|
|
if( pLower )
|
2002-03-18 11:49:59 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
::vos::ORef< SwAccessibleContext > xAccImpl;
|
|
|
|
if( rLower.IsAccessible() )
|
|
|
|
xAccImpl = GetMap()->GetContextImpl( pLower, sal_False );
|
|
|
|
if( xAccImpl.isValid() )
|
|
|
|
xAccImpl->InvalidateStates( nStates );
|
|
|
|
else
|
|
|
|
InvalidateChildrenStates( pLower, nStates );
|
2002-03-18 11:49:59 +00:00
|
|
|
}
|
2002-04-11 13:04:40 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
// TODO: SdrObjects
|
|
|
|
}
|
|
|
|
++aIter;
|
2002-02-11 11:51:16 +00:00
|
|
|
}
|
2002-02-04 13:10:18 +00:00
|
|
|
}
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
void SwAccessibleContext::DisposeChildren( const SwFrm *pFrm,
|
|
|
|
sal_Bool bRecursive )
|
2002-02-11 11:51:16 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
const SwFrmOrObjSList aVisList( GetVisArea(), pFrm );
|
|
|
|
SwFrmOrObjSList::const_iterator aIter( aVisList.begin() );
|
|
|
|
while( aIter != aVisList.end() )
|
2002-02-11 11:51:16 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
const SwFrmOrObj& rLower = *aIter;
|
|
|
|
const SwFrm *pLower = rLower.GetSwFrm();
|
|
|
|
if( pLower )
|
2002-02-11 11:51:16 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
::vos::ORef< SwAccessibleContext > xAccImpl;
|
|
|
|
if( rLower.IsAccessible() )
|
|
|
|
xAccImpl = GetMap()->GetContextImpl( pLower, sal_False );
|
|
|
|
if( xAccImpl.isValid() )
|
|
|
|
xAccImpl->Dispose( bRecursive );
|
|
|
|
else if( bRecursive )
|
|
|
|
DisposeChildren( pLower, bRecursive );
|
2002-02-11 11:51:16 +00:00
|
|
|
}
|
2002-04-11 13:04:40 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
// TODO: SdrObjects
|
|
|
|
}
|
|
|
|
++aIter;
|
2002-02-11 11:51:16 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
void SwAccessibleContext::_InvalidateContent( sal_Bool )
|
2002-03-18 11:49:59 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
void SwAccessibleContext::_InvalidateCursorPos()
|
2002-03-11 10:54:46 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2002-03-08 12:26:29 +00:00
|
|
|
void SwAccessibleContext::FireAccessibleEvent( AccessibleEventObject& rEvent )
|
2002-02-04 13:10:18 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
ASSERT( GetFrm(), "fire event for diposed frame?" );
|
|
|
|
if( !GetFrm() )
|
|
|
|
return;
|
|
|
|
|
2002-02-04 13:10:18 +00:00
|
|
|
Reference < XAccessibleContext > xThis( this );
|
|
|
|
rEvent.Source = xThis;
|
|
|
|
|
2002-02-15 07:30:25 +00:00
|
|
|
::cppu::OInterfaceIteratorHelper aIter( aAccessibleEventListeners );
|
2002-02-04 13:10:18 +00:00
|
|
|
while( aIter.hasMoreElements() )
|
|
|
|
{
|
2002-02-15 07:30:25 +00:00
|
|
|
Reference < XAccessibleEventListener > xListener( aIter.next(),
|
2002-02-04 13:10:18 +00:00
|
|
|
UNO_QUERY );
|
2002-02-15 07:30:25 +00:00
|
|
|
if( xListener.is() ) // TODO: test is unneccessary soon
|
2002-03-08 14:13:03 +00:00
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
xListener->notifyEvent( rEvent );
|
|
|
|
}
|
2002-03-19 11:49:27 +00:00
|
|
|
catch( ::com::sun::star::uno::RuntimeException& r )
|
2002-03-08 14:13:03 +00:00
|
|
|
{
|
2002-03-19 11:49:27 +00:00
|
|
|
#ifdef DEBUG
|
|
|
|
ByteString aError( "Runtime exception caught for event" );
|
|
|
|
aError += ByteString::CreateFromInt32( rEvent.EventId );
|
|
|
|
aError += ".:\n";
|
|
|
|
aError += ByteString( String( r.Message), RTL_TEXTENCODING_ASCII_US );
|
|
|
|
DBG_ERROR( aError.GetBuffer() );
|
2002-04-11 13:04:40 +00:00
|
|
|
#endif
|
|
|
|
// aIter.remove();
|
|
|
|
}
|
|
|
|
}
|
2002-02-20 16:55:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
void SwAccessibleContext::FireVisibleDataEvent()
|
2002-03-21 11:50:31 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
AccessibleEventObject aEvent;
|
|
|
|
aEvent.EventId = AccessibleEventId::ACCESSIBLE_VISIBLE_DATA_EVENT;
|
|
|
|
|
|
|
|
FireAccessibleEvent( aEvent );
|
|
|
|
DBG_MSG( "AccessibleVisibleData" )
|
2002-03-21 11:50:31 +00:00
|
|
|
}
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
void SwAccessibleContext::FireStateChangedEvent( sal_Int16 nState,
|
|
|
|
sal_Bool bNewState )
|
2002-03-18 11:49:59 +00:00
|
|
|
{
|
2002-04-11 13:04:40 +00:00
|
|
|
AccessibleEventObject aEvent;
|
2002-03-18 11:49:59 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
aEvent.EventId = AccessibleEventId::ACCESSIBLE_STATE_EVENT;
|
|
|
|
if( bNewState )
|
|
|
|
aEvent.NewValue <<= nState;
|
|
|
|
else
|
|
|
|
aEvent.OldValue <<= nState;
|
|
|
|
|
|
|
|
FireAccessibleEvent( aEvent );
|
|
|
|
DBG_MSG( "StateChanged" )
|
2002-03-18 11:49:59 +00:00
|
|
|
}
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
void SwAccessibleContext::GetStates(
|
|
|
|
::utl::AccessibleStateSetHelper& rStateSet )
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
// SHOWING
|
|
|
|
if( bIsShowingState )
|
|
|
|
rStateSet.AddState( AccessibleStateType::SHOWING );
|
|
|
|
|
|
|
|
// EDITABLE
|
|
|
|
if( bIsEditableState )
|
|
|
|
rStateSet.AddState( AccessibleStateType::EDITABLE );
|
|
|
|
|
|
|
|
// ENABLED
|
|
|
|
rStateSet.AddState( AccessibleStateType::ENABLED );
|
|
|
|
|
|
|
|
// OPAQUE
|
|
|
|
if( bIsOpaqueState )
|
|
|
|
rStateSet.AddState( AccessibleStateType::OPAQUE );
|
|
|
|
|
|
|
|
// VISIBLE
|
|
|
|
rStateSet.AddState( AccessibleStateType::VISIBLE );
|
|
|
|
|
|
|
|
if( bIsDefuncState )
|
|
|
|
rStateSet.AddState( AccessibleStateType::DEFUNC );
|
|
|
|
}
|
2002-02-20 16:55:57 +00:00
|
|
|
|
|
|
|
SwAccessibleContext::SwAccessibleContext( SwAccessibleMap *pM,
|
|
|
|
sal_Int16 nR,
|
2002-02-04 13:10:18 +00:00
|
|
|
const SwFrm *pF ) :
|
2002-02-20 16:55:57 +00:00
|
|
|
SwAccessibleFrame( pM->GetShell()->VisArea().SVRect(), pF ),
|
2002-03-11 10:54:46 +00:00
|
|
|
aAccessibleEventListeners( aListenerMutex ),
|
|
|
|
aFocusListeners( aListenerMutex ),
|
2002-02-20 16:55:57 +00:00
|
|
|
pMap( pM ),
|
2002-04-05 11:18:25 +00:00
|
|
|
nRole( nR ),
|
|
|
|
bDisposing( sal_False )
|
2002-02-04 13:10:18 +00:00
|
|
|
{
|
2002-03-18 11:49:59 +00:00
|
|
|
InitStates();
|
2002-02-11 11:51:16 +00:00
|
|
|
DBG_MSG_CD( "constructed" )
|
2002-02-04 13:10:18 +00:00
|
|
|
}
|
|
|
|
|
2002-02-20 16:55:57 +00:00
|
|
|
SwAccessibleContext::SwAccessibleContext( SwAccessibleMap *pM,
|
|
|
|
const OUString& rName,
|
2002-02-04 13:10:18 +00:00
|
|
|
sal_Int16 nR,
|
|
|
|
const SwFrm *pF ) :
|
2002-02-20 16:55:57 +00:00
|
|
|
SwAccessibleFrame( pM->GetShell()->VisArea().SVRect(), pF ),
|
2002-02-04 13:10:18 +00:00
|
|
|
sName( rName ),
|
2002-03-11 10:54:46 +00:00
|
|
|
aAccessibleEventListeners( aListenerMutex ),
|
|
|
|
aFocusListeners( aListenerMutex ),
|
2002-02-20 16:55:57 +00:00
|
|
|
pMap( pM ),
|
2002-04-05 11:18:25 +00:00
|
|
|
nRole( nR ),
|
|
|
|
bDisposing( sal_False )
|
2002-02-04 13:10:18 +00:00
|
|
|
{
|
2002-03-18 11:49:59 +00:00
|
|
|
InitStates();
|
2002-02-11 11:51:16 +00:00
|
|
|
DBG_MSG_CD( "constructed" )
|
2002-02-04 13:10:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
SwAccessibleContext::~SwAccessibleContext()
|
|
|
|
{
|
2002-03-11 10:54:46 +00:00
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
2002-02-11 11:51:16 +00:00
|
|
|
DBG_MSG_CD( "destructed" )
|
2002-02-20 16:55:57 +00:00
|
|
|
if( GetFrm() && GetMap() )
|
2002-03-11 10:54:46 +00:00
|
|
|
GetMap()->RemoveContext( GetFrm() );
|
2002-02-04 13:10:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Reference< XAccessibleContext > SAL_CALL
|
|
|
|
SwAccessibleContext::getAccessibleContext( void )
|
2002-02-18 16:09:50 +00:00
|
|
|
throw (::com::sun::star::uno::RuntimeException)
|
2002-02-04 13:10:18 +00:00
|
|
|
{
|
|
|
|
Reference < XAccessibleContext > xRet( this );
|
|
|
|
return xRet;
|
|
|
|
}
|
|
|
|
|
2002-04-05 11:18:25 +00:00
|
|
|
sal_Int32 SAL_CALL SwAccessibleContext::getAccessibleChildCount( void )
|
2002-02-04 13:10:18 +00:00
|
|
|
throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
CHECK_FOR_DEFUNC( XAccessibleContext )
|
2002-03-11 10:54:46 +00:00
|
|
|
|
2002-04-05 11:18:25 +00:00
|
|
|
return bDisposing ? 0 : GetChildCount();
|
2002-02-04 13:10:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Reference< XAccessible> SAL_CALL
|
|
|
|
SwAccessibleContext::getAccessibleChild( long nIndex )
|
|
|
|
throw (::com::sun::star::uno::RuntimeException,
|
|
|
|
::com::sun::star::lang::IndexOutOfBoundsException)
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
CHECK_FOR_DEFUNC( XAccessibleContext )
|
|
|
|
|
2002-04-05 11:18:25 +00:00
|
|
|
const SwFrmOrObj aChild( GetChild( nIndex ) );
|
|
|
|
if( !aChild.IsValid() )
|
2002-02-04 13:10:18 +00:00
|
|
|
{
|
|
|
|
Reference < XAccessibleContext > xThis( this );
|
2002-02-05 14:52:06 +00:00
|
|
|
IndexOutOfBoundsException aExcept(
|
|
|
|
OUString( RTL_CONSTASCII_USTRINGPARAM("index out of bounds") ),
|
|
|
|
xThis ); \
|
2002-02-04 13:10:18 +00:00
|
|
|
throw aExcept;
|
|
|
|
}
|
|
|
|
|
2002-04-05 11:18:25 +00:00
|
|
|
Reference< XAccessible > xChild;
|
|
|
|
if( aChild.GetSwFrm() )
|
|
|
|
{
|
|
|
|
::vos::ORef < SwAccessibleContext > xChildImpl(
|
|
|
|
GetMap()->GetContextImpl( aChild.GetSwFrm(), !bDisposing ) );
|
|
|
|
if( xChildImpl.isValid() )
|
|
|
|
{
|
|
|
|
xChildImpl->SetParent( this );
|
|
|
|
xChild = xChildImpl.getBodyPtr();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// TODO: SdrObjects
|
|
|
|
}
|
2002-02-04 13:10:18 +00:00
|
|
|
|
2002-02-11 11:51:16 +00:00
|
|
|
return xChild;
|
2002-02-04 13:10:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Reference< XAccessible> SAL_CALL SwAccessibleContext::getAccessibleParent (void)
|
|
|
|
throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
CHECK_FOR_DEFUNC( XAccessibleContext )
|
|
|
|
|
2002-02-11 11:51:16 +00:00
|
|
|
const SwFrm *pUpper = GetParent();
|
2002-04-05 11:18:25 +00:00
|
|
|
ASSERT( pUpper != 0 || bDisposing, "no upper found" );
|
2002-02-04 13:10:18 +00:00
|
|
|
|
2002-02-05 14:52:06 +00:00
|
|
|
Reference< XAccessible > xAcc;
|
2002-02-04 13:10:18 +00:00
|
|
|
if( pUpper )
|
2002-04-05 11:18:25 +00:00
|
|
|
xAcc = GetMap()->GetContext( pUpper, !bDisposing );
|
2002-02-04 13:10:18 +00:00
|
|
|
|
2002-04-05 11:18:25 +00:00
|
|
|
ASSERT( xAcc.is() || bDisposing, "no parent found" );
|
2002-02-04 13:10:18 +00:00
|
|
|
|
2002-02-11 11:51:16 +00:00
|
|
|
// Remember the parent as weak ref.
|
2002-03-11 10:54:46 +00:00
|
|
|
{
|
|
|
|
vos::OGuard aGuard( aMutex );
|
|
|
|
xWeakParent = xAcc;
|
|
|
|
}
|
2002-02-11 11:51:16 +00:00
|
|
|
|
2002-02-04 13:10:18 +00:00
|
|
|
return xAcc;
|
|
|
|
}
|
|
|
|
|
|
|
|
sal_Int32 SAL_CALL SwAccessibleContext::getAccessibleIndexInParent (void)
|
|
|
|
throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
CHECK_FOR_DEFUNC( XAccessibleContext )
|
|
|
|
|
2002-02-11 11:51:16 +00:00
|
|
|
const SwFrm *pUpper = GetParent();
|
2002-04-05 11:18:25 +00:00
|
|
|
ASSERT( pUpper != 0 || bDisposing, "no upper found" );
|
2002-02-04 13:10:18 +00:00
|
|
|
|
|
|
|
sal_Int32 nIndex = -1;
|
|
|
|
if( pUpper )
|
|
|
|
{
|
2002-02-05 14:52:06 +00:00
|
|
|
::vos::ORef < SwAccessibleContext > xAccImpl(
|
2002-04-05 11:18:25 +00:00
|
|
|
GetMap()->GetContextImpl( pUpper, !bDisposing ) );
|
|
|
|
ASSERT( xAccImpl.isValid() || bDisposing, "no parent found" );
|
2002-02-05 14:52:06 +00:00
|
|
|
if( xAccImpl.isValid() )
|
2002-02-11 11:51:16 +00:00
|
|
|
nIndex = xAccImpl->GetChildIndex( GetFrm() );
|
2002-02-04 13:10:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return nIndex;
|
|
|
|
}
|
|
|
|
|
|
|
|
sal_Int16 SAL_CALL SwAccessibleContext::getAccessibleRole (void)
|
|
|
|
throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
return nRole;
|
|
|
|
}
|
|
|
|
|
|
|
|
OUString SAL_CALL SwAccessibleContext::getAccessibleDescription (void)
|
|
|
|
throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
ASSERT( !this, "description needs to be overloaded" );
|
|
|
|
THROW_RUNTIME_EXCEPTION( XAccessibleContext, "internal error (method must be overloaded)" );
|
|
|
|
}
|
|
|
|
|
|
|
|
OUString SAL_CALL SwAccessibleContext::getAccessibleName (void)
|
|
|
|
throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
return sName;
|
|
|
|
}
|
|
|
|
|
|
|
|
Reference< XAccessibleRelationSet> SAL_CALL
|
|
|
|
SwAccessibleContext::getAccessibleRelationSet (void)
|
|
|
|
throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
// by default there are no relations
|
|
|
|
Reference< XAccessibleRelationSet> xRet;
|
|
|
|
return xRet;
|
|
|
|
}
|
|
|
|
|
|
|
|
Reference<XAccessibleStateSet> SAL_CALL
|
|
|
|
SwAccessibleContext::getAccessibleStateSet (void)
|
|
|
|
throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
2002-05-03 11:34:00 +00:00
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
CHECK_FOR_DEFUNC( XAccessibleContext )
|
|
|
|
|
2002-02-05 14:52:06 +00:00
|
|
|
::utl::AccessibleStateSetHelper *pStateSet =
|
|
|
|
new ::utl::AccessibleStateSetHelper;
|
|
|
|
|
2002-03-18 11:49:59 +00:00
|
|
|
Reference<XAccessibleStateSet> xStateSet( pStateSet );
|
|
|
|
GetStates( *pStateSet );
|
2002-02-05 14:52:06 +00:00
|
|
|
|
2002-03-18 11:49:59 +00:00
|
|
|
return xStateSet;
|
2002-02-04 13:10:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Locale SAL_CALL SwAccessibleContext::getLocale (void)
|
|
|
|
throw (::drafts::com::sun::star::accessibility::IllegalAccessibleComponentStateException, ::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
2002-02-05 14:52:06 +00:00
|
|
|
Locale aLoc( Application::GetSettings().GetUILocale() );
|
2002-02-04 13:10:18 +00:00
|
|
|
return aLoc;
|
|
|
|
}
|
|
|
|
|
2002-02-15 07:30:25 +00:00
|
|
|
void SAL_CALL SwAccessibleContext::addEventListener(
|
|
|
|
const Reference< XAccessibleEventListener >& xListener )
|
|
|
|
throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
DBG_MSG( "accessible event listener added" )
|
|
|
|
aAccessibleEventListeners.addInterface( xListener );
|
|
|
|
}
|
|
|
|
|
|
|
|
void SAL_CALL SwAccessibleContext::removeEventListener(
|
|
|
|
const Reference< XAccessibleEventListener >& xListener )
|
|
|
|
throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
DBG_MSG( "accessible event listener removed" )
|
|
|
|
aAccessibleEventListeners.removeInterface( xListener );
|
2002-02-04 13:10:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sal_Bool SAL_CALL SwAccessibleContext::contains(
|
|
|
|
const ::com::sun::star::awt::Point& aPoint )
|
|
|
|
throw (RuntimeException)
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
CHECK_FOR_DEFUNC( XAccessibleComponent )
|
|
|
|
|
|
|
|
Window *pWin = GetWindow();
|
|
|
|
CHECK_FOR_WINDOW( XAccessibleComponent, pWin )
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
SwRect aLogBounds( GetBounds( GetFrm() ) ); // twip rel to doc root
|
2002-02-04 13:10:18 +00:00
|
|
|
|
|
|
|
Point aPixPoint( aPoint.X, aPoint.Y ); // px rel to window
|
|
|
|
Point aLogPoint( pWin->PixelToLogic( aPixPoint ) ); // twip rel to doc root
|
|
|
|
|
|
|
|
return aLogBounds.IsInside( aLogPoint );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Reference< XAccessible > SAL_CALL SwAccessibleContext::getAccessibleAt(
|
|
|
|
const awt::Point& aPoint )
|
|
|
|
throw (RuntimeException)
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
CHECK_FOR_DEFUNC( XAccessibleComponent )
|
|
|
|
|
2002-02-05 14:52:06 +00:00
|
|
|
Reference< XAccessible > xAcc;
|
2002-02-04 13:10:18 +00:00
|
|
|
|
|
|
|
Window *pWin = GetWindow();
|
|
|
|
CHECK_FOR_WINDOW( XAccessibleComponent, pWin )
|
|
|
|
|
|
|
|
Point aPixPoint( aPoint.X, aPoint.Y ); // px rel to window
|
|
|
|
Point aLogPoint( pWin->PixelToLogic( aPixPoint ) ); // twip rel to doc root
|
|
|
|
|
2002-04-05 11:18:25 +00:00
|
|
|
const SwFrmOrObj aChild( GetChildAt( aLogPoint ) );
|
|
|
|
if( aChild.GetSwFrm() )
|
|
|
|
{
|
|
|
|
xAcc = GetMap()->GetContext( aChild.GetSwFrm() );
|
|
|
|
}
|
|
|
|
else if( aChild.GetSdrObject() )
|
|
|
|
{
|
|
|
|
// TODO: SdrObjects
|
|
|
|
}
|
2002-02-04 13:10:18 +00:00
|
|
|
|
|
|
|
return xAcc;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
awt::Rectangle SAL_CALL SwAccessibleContext::getBounds()
|
|
|
|
throw (RuntimeException)
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
CHECK_FOR_DEFUNC( XAccessibleComponent )
|
|
|
|
|
2002-02-27 08:32:33 +00:00
|
|
|
const SwFrm *pParent = GetParent();
|
|
|
|
ASSERT( pParent, "no Parent found" );
|
2002-02-04 13:10:18 +00:00
|
|
|
Window *pWin = GetWindow();
|
|
|
|
|
2002-02-27 08:32:33 +00:00
|
|
|
CHECK_FOR_WINDOW( XAccessibleComponent, pWin && pParent )
|
2002-02-04 13:10:18 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
SwRect aLogBounds( GetBounds( GetFrm() ) ); // twip rel to doc root
|
|
|
|
Rectangle aPixBounds( 0, 0, 0, 0 );
|
|
|
|
if( !aLogBounds.IsEmpty() )
|
2002-02-27 08:32:33 +00:00
|
|
|
{
|
2002-04-17 13:07:39 +00:00
|
|
|
aPixBounds = pWin->LogicToPixel( aLogBounds.SVRect() );
|
|
|
|
if( !pParent->IsRootFrm() )
|
2002-04-11 13:04:40 +00:00
|
|
|
{
|
|
|
|
Point aParentLogPos( GetBounds( pParent ).Pos() ); // twip rel to doc root
|
2002-04-17 13:07:39 +00:00
|
|
|
Point aParentPixPos( pWin->LogicToPixel( aParentLogPos ) );
|
|
|
|
aPixBounds.Left() -= aParentPixPos.X();
|
|
|
|
aPixBounds.Top() -= aParentPixPos.Y();
|
2002-04-11 13:04:40 +00:00
|
|
|
}
|
2002-02-27 08:32:33 +00:00
|
|
|
}
|
2002-02-04 13:10:18 +00:00
|
|
|
|
|
|
|
awt::Rectangle aBox( aPixBounds.Left(), aPixBounds.Top(),
|
|
|
|
aPixBounds.GetWidth(), aPixBounds.GetHeight() );
|
|
|
|
|
|
|
|
return aBox;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
awt::Point SAL_CALL SwAccessibleContext::getLocation()
|
|
|
|
throw (RuntimeException)
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
CHECK_FOR_DEFUNC( XAccessibleComponent )
|
|
|
|
|
2002-02-27 08:32:33 +00:00
|
|
|
const SwFrm *pParent = GetParent();
|
|
|
|
ASSERT( pParent, "no parent found" );
|
2002-02-04 13:10:18 +00:00
|
|
|
Window *pWin = GetWindow();
|
|
|
|
|
2002-02-27 08:32:33 +00:00
|
|
|
CHECK_FOR_WINDOW( XAccessibleComponent, pWin && pParent )
|
2002-02-04 13:10:18 +00:00
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
SwRect aLogBounds( GetBounds( GetFrm() ) ); // twip rel to doc root
|
|
|
|
Point aPixPos( 0, 0 );
|
|
|
|
if( !aLogBounds.IsEmpty() )
|
2002-02-27 08:32:33 +00:00
|
|
|
{
|
2002-04-17 13:07:39 +00:00
|
|
|
aPixPos = pWin->LogicToPixel( aLogBounds.Pos() );
|
2002-04-11 13:04:40 +00:00
|
|
|
if( pParent->IsRootFrm() )
|
|
|
|
{
|
|
|
|
Point aParentLogPos( GetBounds( pParent ).Pos() ); // twip rel to doc root
|
2002-04-17 13:07:39 +00:00
|
|
|
Point aParentPixPos( pWin->LogicToPixel( aParentLogPos ) );
|
|
|
|
aPixPos.X() -= aParentPixPos.X();
|
|
|
|
aPixPos.Y() -= aParentPixPos.Y();
|
2002-04-11 13:04:40 +00:00
|
|
|
}
|
2002-02-27 08:32:33 +00:00
|
|
|
}
|
2002-02-04 13:10:18 +00:00
|
|
|
awt::Point aLoc( aPixPos.X(), aPixPos.Y() );
|
|
|
|
|
|
|
|
return aLoc;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
::com::sun::star::awt::Point SAL_CALL SwAccessibleContext::getLocationOnScreen()
|
|
|
|
throw (RuntimeException)
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
CHECK_FOR_DEFUNC( XAccessibleComponent )
|
|
|
|
|
|
|
|
Window *pWin = GetWindow();
|
|
|
|
CHECK_FOR_WINDOW( XAccessibleComponent, pWin )
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
SwRect aLogBounds( GetBounds( GetFrm() ) ); // twip rel to doc root
|
|
|
|
Point aPixPos( 0, 0 );
|
|
|
|
if( !aLogBounds.IsEmpty() )
|
|
|
|
{
|
|
|
|
aPixPos = pWin->LogicToPixel( aLogBounds.Pos() );
|
|
|
|
aPixPos = pWin->OutputToAbsoluteScreenPixel( aPixPos );
|
|
|
|
}
|
2002-02-04 13:10:18 +00:00
|
|
|
awt::Point aLoc( aPixPos.X(), aPixPos.Y() );
|
|
|
|
|
|
|
|
return aLoc;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
::com::sun::star::awt::Size SAL_CALL SwAccessibleContext::getSize()
|
|
|
|
throw (RuntimeException)
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
CHECK_FOR_DEFUNC( XAccessibleComponent )
|
|
|
|
|
|
|
|
Window *pWin = GetWindow();
|
|
|
|
CHECK_FOR_WINDOW( XAccessibleComponent, pWin )
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
SwRect aLogBounds( GetBounds( GetFrm() ) ); // twip rel to doc root
|
|
|
|
Size aPixSize( 0, 0 );
|
2002-04-17 13:07:39 +00:00
|
|
|
// The size may differ by one pixel, dependent on the position of
|
|
|
|
// the rectangle. For that reason we first have to do the conversion
|
|
|
|
// into pixel and then have to get the size.
|
2002-04-11 13:04:40 +00:00
|
|
|
if( !aLogBounds.IsEmpty() )
|
2002-04-17 13:07:39 +00:00
|
|
|
aPixSize = pWin->LogicToPixel( aLogBounds.SVRect() ).GetSize();
|
2002-02-04 13:10:18 +00:00
|
|
|
awt::Size aSize( aPixSize.Width(), aPixSize.Height() );
|
|
|
|
|
|
|
|
return aSize;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
sal_Bool SAL_CALL SwAccessibleContext::isShowing()
|
|
|
|
throw (RuntimeException)
|
|
|
|
{
|
2002-03-18 11:49:59 +00:00
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
2002-02-11 11:51:16 +00:00
|
|
|
return IsShowing();
|
2002-02-04 13:10:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
sal_Bool SAL_CALL SwAccessibleContext::isVisible()
|
|
|
|
throw (RuntimeException)
|
|
|
|
{
|
|
|
|
return sal_True;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
sal_Bool SAL_CALL SwAccessibleContext::isFocusTraversable()
|
|
|
|
throw (RuntimeException)
|
|
|
|
{
|
|
|
|
return sal_False;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SAL_CALL SwAccessibleContext::addFocusListener(
|
|
|
|
const Reference<
|
|
|
|
::com::sun::star::awt::XFocusListener >& xListener )
|
|
|
|
throw (RuntimeException)
|
|
|
|
{
|
2002-02-11 11:51:16 +00:00
|
|
|
DBG_MSG( "focus listener added" )
|
2002-02-04 13:10:18 +00:00
|
|
|
aFocusListeners.addInterface( xListener );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SAL_CALL SwAccessibleContext::removeFocusListener(
|
|
|
|
const Reference<
|
|
|
|
::com::sun::star::awt::XFocusListener >& xListener )
|
|
|
|
throw (RuntimeException)
|
|
|
|
{
|
2002-02-11 11:51:16 +00:00
|
|
|
DBG_MSG( "focus listener removed" )
|
2002-02-04 13:10:18 +00:00
|
|
|
aFocusListeners.removeInterface( xListener );
|
|
|
|
}
|
|
|
|
|
|
|
|
void SAL_CALL SwAccessibleContext::grabFocus()
|
|
|
|
throw (RuntimeException)
|
|
|
|
{
|
|
|
|
// impossible
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Any SAL_CALL SwAccessibleContext::getAccessibleKeyBinding()
|
|
|
|
throw (RuntimeException)
|
|
|
|
{
|
2002-02-05 14:52:06 +00:00
|
|
|
// There are no key bindings
|
2002-02-04 13:10:18 +00:00
|
|
|
Any aAny;
|
|
|
|
return aAny;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
OUString SAL_CALL SwAccessibleContext::getImplementationName()
|
|
|
|
throw( RuntimeException )
|
|
|
|
{
|
|
|
|
ASSERT( !this, "implementation name needs to be overloaded" );
|
|
|
|
|
|
|
|
THROW_RUNTIME_EXCEPTION( XServiceInfo, "implementation name needs to be overloaded" )
|
|
|
|
}
|
|
|
|
|
|
|
|
sal_Bool SAL_CALL
|
|
|
|
SwAccessibleContext::supportsService (const ::rtl::OUString& sServiceName)
|
|
|
|
throw (::com::sun::star::uno::RuntimeException)
|
|
|
|
{
|
|
|
|
ASSERT( !this, "supports service needs to be overloaded" );
|
|
|
|
THROW_RUNTIME_EXCEPTION( XServiceInfo, "supports service needs to be overloaded" )
|
|
|
|
}
|
|
|
|
|
|
|
|
Sequence< OUString > SAL_CALL SwAccessibleContext::getSupportedServiceNames()
|
|
|
|
throw( ::com::sun::star::uno::RuntimeException )
|
|
|
|
{
|
|
|
|
ASSERT( !this, "supported services names needs to be overloaded" );
|
|
|
|
THROW_RUNTIME_EXCEPTION( XServiceInfo, "supported services needs to be overloaded" )
|
|
|
|
}
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
void SwAccessibleContext::Dispose( sal_Bool bRecursive )
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
ASSERT( GetFrm() && GetMap(), "already disposed" );
|
|
|
|
ASSERT( GetMap()->GetVisArea() == GetVisArea(),
|
|
|
|
"invalid vis area for dispose" );
|
|
|
|
|
|
|
|
bDisposing = sal_True;
|
|
|
|
|
|
|
|
// dispose children
|
|
|
|
if( bRecursive )
|
|
|
|
DisposeChildren( GetFrm(), bRecursive );
|
|
|
|
|
|
|
|
// get parent
|
|
|
|
Reference< XAccessible > xParent( GetWeakParent() );
|
|
|
|
Reference < XAccessibleContext > xThis( this );
|
|
|
|
|
|
|
|
// send child event at parent
|
|
|
|
if( xParent.is() )
|
|
|
|
{
|
|
|
|
SwAccessibleContext *pAcc = (SwAccessibleContext *)xParent.get();
|
|
|
|
|
|
|
|
AccessibleEventObject aEvent;
|
|
|
|
aEvent.EventId = AccessibleEventId::ACCESSIBLE_CHILD_EVENT;
|
|
|
|
aEvent.OldValue <<= xThis;
|
|
|
|
pAcc->FireAccessibleEvent( aEvent );
|
|
|
|
DBG_MSG_THIS_PARAM( "AccessibleChild (removed)", pAcc, this )
|
|
|
|
}
|
|
|
|
|
|
|
|
// set defunc state
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard( aMutex );
|
|
|
|
bIsDefuncState = sal_True;
|
|
|
|
}
|
|
|
|
|
|
|
|
// broadcast state change
|
|
|
|
FireStateChangedEvent( AccessibleStateType::DEFUNC, sal_True );
|
|
|
|
|
|
|
|
// broadcast dispose event
|
|
|
|
{
|
|
|
|
EventObject aEvent;
|
|
|
|
aEvent.Source = xThis;
|
|
|
|
aAccessibleEventListeners.disposeAndClear( aEvent );
|
|
|
|
aFocusListeners.disposeAndClear( aEvent );
|
|
|
|
DBG_MSG_CD( "dispose" )
|
|
|
|
}
|
|
|
|
|
|
|
|
if( GetMap() && GetFrm() )
|
|
|
|
GetMap()->RemoveContext( GetFrm() );
|
|
|
|
ClearFrm();
|
|
|
|
pMap = 0;
|
|
|
|
|
|
|
|
bDisposing = sal_False;
|
|
|
|
}
|
|
|
|
|
2002-04-17 13:07:39 +00:00
|
|
|
void SwAccessibleContext::DisposeChild( const SwFrm *pFrm, sal_Bool bRecursive )
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
SwFrmOrObj aFrm( GetFrm() );
|
|
|
|
if( IsShowing( pFrm ) || !aFrm.IsVisibleChildrenOnly() )
|
|
|
|
{
|
|
|
|
// If the object could have existed before, than there is nothing to do,
|
|
|
|
// because no wrapper exists now and therefor no one is interested to
|
|
|
|
// get notified of the movement.
|
|
|
|
::vos::ORef< SwAccessibleContext > xAccImpl =
|
|
|
|
GetMap()->GetContextImpl( pFrm, sal_True );
|
|
|
|
xAccImpl->Dispose( bRecursive );
|
|
|
|
}
|
|
|
|
else if( bRecursive )
|
|
|
|
DisposeChildren( GetFrm(), bRecursive );
|
|
|
|
}
|
|
|
|
|
|
|
|
void SwAccessibleContext::InvalidatePosOrSize( const SwRect& rOldPos )
|
2002-04-11 13:04:40 +00:00
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
sal_Bool bIsOldShowingState;
|
|
|
|
sal_Bool bIsNewShowingState = IsShowing();
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard( aMutex );
|
|
|
|
bIsOldShowingState = bIsShowingState;
|
|
|
|
bIsShowingState = bIsNewShowingState;
|
|
|
|
}
|
|
|
|
|
|
|
|
if( bIsOldShowingState != bIsNewShowingState )
|
|
|
|
{
|
|
|
|
FireStateChangedEvent( AccessibleStateType::SHOWING,
|
|
|
|
bIsNewShowingState );
|
|
|
|
}
|
|
|
|
else if( bIsNewShowingState )
|
|
|
|
{
|
|
|
|
// The frame stays visible -> broadcast event
|
|
|
|
FireVisibleDataEvent();
|
|
|
|
}
|
|
|
|
|
|
|
|
SwFrmOrObj aParent( GetParent() );
|
|
|
|
if( !bIsNewShowingState && aParent.IsVisibleChildrenOnly() )
|
|
|
|
{
|
|
|
|
// The frame is now invisible -> dispose it
|
|
|
|
Dispose( sal_True );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_InvalidateContent( sal_True );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void SwAccessibleContext::InvalidateChildPosOrSize( const SwFrm *pFrm,
|
|
|
|
const SwRect& rOldFrm )
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
SwFrmOrObj aFrm( GetFrm() );
|
|
|
|
sal_Bool bNew = rOldFrm.IsEmpty() || (rOldFrm.Left() == 0 && rOldFrm.Top());
|
|
|
|
if( IsShowing( pFrm ) )
|
|
|
|
{
|
|
|
|
// If the object could have existed before, than there is nothing to do,
|
|
|
|
// because no wrapper exists now and therefor no one is interested to
|
|
|
|
// get notified of the movement.
|
|
|
|
if( bNew || (aFrm.IsVisibleChildrenOnly() && !IsShowing( rOldFrm )) )
|
|
|
|
{
|
|
|
|
// The frame becomes visible. A child event must be send.
|
|
|
|
::vos::ORef< SwAccessibleContext > xAccImpl =
|
|
|
|
GetMap()->GetContextImpl( pFrm, sal_True );
|
|
|
|
xAccImpl->ScrolledIn();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// If the frame was visible before, than a child event for the parent
|
|
|
|
// needs to be send. However, there is no wrapper existing, and so
|
|
|
|
// no notifications for grandchildren are required. If the are
|
|
|
|
// grandgrandchildren, they would be notified by the layout.
|
|
|
|
if( aFrm.IsVisibleChildrenOnly() &&
|
|
|
|
!bNew && IsShowing( rOldFrm ) )
|
|
|
|
{
|
|
|
|
::vos::ORef< SwAccessibleContext > xAccImpl =
|
|
|
|
GetMap()->GetContextImpl( pFrm, sal_True );
|
|
|
|
xAccImpl->SetParent( this );
|
|
|
|
xAccImpl->Dispose( sal_True );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void SwAccessibleContext::InvalidateContent()
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
_InvalidateContent( sal_False );
|
|
|
|
}
|
|
|
|
|
|
|
|
void SwAccessibleContext::InvalidateCursorPos()
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
_InvalidateCursorPos();
|
|
|
|
}
|
|
|
|
|
|
|
|
void SwAccessibleContext::InvalidateStates( sal_uInt8 nStates )
|
|
|
|
{
|
|
|
|
if( GetMap() )
|
|
|
|
{
|
|
|
|
ViewShell *pVSh = GetMap()->GetShell();
|
|
|
|
if( pVSh )
|
|
|
|
{
|
|
|
|
if( (nStates & ACC_STATE_EDITABLE) != 0 )
|
|
|
|
{
|
|
|
|
sal_Bool bIsOldEditableState;
|
|
|
|
sal_Bool bIsNewEditableState = IsEditable( pVSh );
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard( aMutex );
|
|
|
|
bIsOldEditableState = bIsEditableState;
|
|
|
|
bIsEditableState = bIsNewEditableState;
|
|
|
|
}
|
|
|
|
|
|
|
|
if( bIsOldEditableState != bIsNewEditableState )
|
|
|
|
FireStateChangedEvent( AccessibleStateType::EDITABLE,
|
|
|
|
bIsNewEditableState );
|
|
|
|
}
|
|
|
|
if( (nStates & ACC_STATE_OPAQUE) != 0 )
|
|
|
|
{
|
|
|
|
sal_Bool bIsOldOpaqueState;
|
|
|
|
sal_Bool bIsNewOpaqueState = IsOpaque( pVSh );
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard( aMutex );
|
|
|
|
bIsOldOpaqueState = bIsOpaqueState;
|
|
|
|
bIsOpaqueState = bIsNewOpaqueState;
|
|
|
|
}
|
|
|
|
|
|
|
|
if( bIsOldOpaqueState != bIsNewOpaqueState )
|
|
|
|
FireStateChangedEvent( AccessibleStateType::OPAQUE,
|
|
|
|
bIsNewOpaqueState );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
InvalidateChildrenStates( GetFrm(), nStates );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-04-24 14:27:21 +00:00
|
|
|
void SwAccessibleContext::InvalidateRelation( sal_uInt16 nType )
|
|
|
|
{
|
|
|
|
AccessibleEventObject aEvent;
|
|
|
|
aEvent.EventId = nType;
|
|
|
|
|
|
|
|
FireAccessibleEvent( aEvent );
|
|
|
|
}
|
|
|
|
|
2002-04-11 13:04:40 +00:00
|
|
|
sal_Bool SwAccessibleContext::HasCursor()
|
|
|
|
{
|
|
|
|
return sal_False;
|
|
|
|
}
|
|
|
|
|
|
|
|
OUString SwAccessibleContext::GetResource( sal_uInt16 nResId,
|
|
|
|
const OUString *pArg1,
|
|
|
|
const OUString *pArg2 )
|
|
|
|
{
|
|
|
|
String sStr;
|
|
|
|
{
|
|
|
|
vos::OGuard aGuard(Application::GetSolarMutex());
|
|
|
|
|
|
|
|
sStr = SW_RES( nResId );
|
|
|
|
}
|
|
|
|
|
|
|
|
if( pArg1 )
|
|
|
|
{
|
|
|
|
sStr.SearchAndReplace( String::CreateFromAscii(
|
|
|
|
RTL_CONSTASCII_STRINGPARAM( "$(ARG1)" )),
|
|
|
|
String( *pArg1 ) );
|
|
|
|
}
|
|
|
|
if( pArg2 )
|
|
|
|
{
|
|
|
|
sStr.SearchAndReplace( String::CreateFromAscii(
|
|
|
|
RTL_CONSTASCII_STRINGPARAM( "$(ARG2)" )),
|
|
|
|
String( *pArg2 ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
return OUString( sStr );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2002-02-11 11:51:16 +00:00
|
|
|
#if defined DEBUG && defined TEST_MIB
|
|
|
|
void lcl_SwAccessibleContext_DbgMsg( SwAccessibleContext *pThisAcc,
|
|
|
|
const char *pMsg,
|
|
|
|
SwAccessibleContext *pChildAcc,
|
|
|
|
sal_Bool bConstrDestr )
|
2002-02-04 13:10:18 +00:00
|
|
|
{
|
|
|
|
static SvFileStream aStrm( String::CreateFromAscii("j:\\acc.log"),
|
|
|
|
STREAM_WRITE|STREAM_TRUNC|STREAM_SHARE_DENYNONE );
|
2002-02-11 11:51:16 +00:00
|
|
|
ByteString aName( String(pThisAcc->GetName()),
|
|
|
|
RTL_TEXTENCODING_ISO_8859_1 );
|
|
|
|
if( aName.Len() )
|
|
|
|
{
|
|
|
|
aStrm << aName.GetBuffer()
|
|
|
|
<< ": ";
|
|
|
|
}
|
2002-02-04 13:10:18 +00:00
|
|
|
aStrm << pMsg;
|
2002-02-11 11:51:16 +00:00
|
|
|
if( pChildAcc )
|
2002-02-04 13:10:18 +00:00
|
|
|
{
|
2002-02-11 11:51:16 +00:00
|
|
|
ByteString aChild( String(pChildAcc->GetName()),
|
|
|
|
RTL_TEXTENCODING_ISO_8859_1 );
|
|
|
|
aStrm << ": "
|
|
|
|
<< aChild.GetBuffer();
|
2002-02-04 13:10:18 +00:00
|
|
|
}
|
2002-02-11 11:51:16 +00:00
|
|
|
aStrm << "\r\n (";
|
|
|
|
|
|
|
|
if( !bConstrDestr )
|
|
|
|
{
|
|
|
|
ByteString aDesc( String(pThisAcc->getAccessibleDescription()),
|
|
|
|
RTL_TEXTENCODING_ISO_8859_1 );
|
|
|
|
aStrm << aDesc.GetBuffer()
|
|
|
|
<< ", ";
|
|
|
|
}
|
|
|
|
|
|
|
|
Rectangle aVisArea( pThisAcc->GetVisArea() );
|
|
|
|
aStrm << "VA: "
|
|
|
|
<< ByteString::CreateFromInt32( aVisArea.Left() ).GetBuffer()
|
|
|
|
<< ","
|
|
|
|
<< ByteString::CreateFromInt32( aVisArea.Top() ).GetBuffer()
|
|
|
|
<< ","
|
|
|
|
<< ByteString::CreateFromInt32( aVisArea.GetWidth() ).GetBuffer()
|
|
|
|
<< ","
|
|
|
|
<< ByteString::CreateFromInt32( aVisArea.GetHeight() ).GetBuffer();
|
|
|
|
|
2002-02-15 07:30:25 +00:00
|
|
|
if( pThisAcc->GetFrm() )
|
|
|
|
{
|
|
|
|
Rectangle aBounds( pThisAcc->GetBounds( pThisAcc->GetFrm() ) );
|
|
|
|
aStrm << ", BB: "
|
|
|
|
<< ByteString::CreateFromInt32( aBounds.Left() ).GetBuffer()
|
|
|
|
<< ","
|
|
|
|
<< ByteString::CreateFromInt32( aBounds.Top() ).GetBuffer()
|
|
|
|
<< ","
|
|
|
|
<< ByteString::CreateFromInt32( aBounds.GetWidth() ).GetBuffer()
|
|
|
|
<< ","
|
|
|
|
<< ByteString::CreateFromInt32( aBounds.GetHeight() ).GetBuffer()
|
|
|
|
<< ")\r\n";
|
|
|
|
}
|
2002-02-11 11:51:16 +00:00
|
|
|
|
2002-02-04 13:10:18 +00:00
|
|
|
aStrm.Flush();
|
|
|
|
}
|
|
|
|
#endif
|