1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_editeng.hxx"
26*b1cdbd2cSJim Jagielski #include <tools/gen.hxx>
27*b1cdbd2cSJim Jagielski #include <vos/mutex.hxx>
28*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
29*b1cdbd2cSJim Jagielski #include <rtl/ustring.hxx>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/Point.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/Rectangle.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/DisposedException.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleRole.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleTextType.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleStateType.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/accessibility/AccessibleEventId.hpp>
37*b1cdbd2cSJim Jagielski #include <comphelper/accessibleeventnotifier.hxx>
38*b1cdbd2cSJim Jagielski #include <unotools/accessiblestatesethelper.hxx>
39*b1cdbd2cSJim Jagielski #include <editeng/unolingu.hxx>
40*b1cdbd2cSJim Jagielski #include "editeng/AccessibleEditableTextPara.hxx"
41*b1cdbd2cSJim Jagielski #include "editeng/AccessibleImageBullet.hxx"
42*b1cdbd2cSJim Jagielski #include <editeng/eerdll.hxx>
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski #include <editeng/editdata.hxx>
45*b1cdbd2cSJim Jagielski #include <editeng/editeng.hxx>
46*b1cdbd2cSJim Jagielski #include <editeng/outliner.hxx>
47*b1cdbd2cSJim Jagielski #include "editeng.hrc"
48*b1cdbd2cSJim Jagielski #include <svtools/colorcfg.hxx>
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
52*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::accessibility;
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski namespace accessibility
55*b1cdbd2cSJim Jagielski {
DBG_NAME(AccessibleImageBullet)56*b1cdbd2cSJim Jagielski     DBG_NAME( AccessibleImageBullet )
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski     AccessibleImageBullet::AccessibleImageBullet ( const uno::Reference< XAccessible >& rParent ) :
59*b1cdbd2cSJim Jagielski         mnParagraphIndex( 0 ),
60*b1cdbd2cSJim Jagielski         mnIndexInParent( 0 ),
61*b1cdbd2cSJim Jagielski         mpEditSource( NULL ),
62*b1cdbd2cSJim Jagielski         maEEOffset( 0, 0 ),
63*b1cdbd2cSJim Jagielski         mxParent( rParent ),
64*b1cdbd2cSJim Jagielski         // well, that's strictly (UNO) exception safe, though not
65*b1cdbd2cSJim Jagielski         // really robust. We rely on the fact that this member is
66*b1cdbd2cSJim Jagielski         // constructed last, and that the constructor body catches
67*b1cdbd2cSJim Jagielski         // exceptions, thus no chance for exceptions once the Id is
68*b1cdbd2cSJim Jagielski         // fetched. Nevertheless, normally should employ RAII here...
69*b1cdbd2cSJim Jagielski         mnNotifierClientId(::comphelper::AccessibleEventNotifier::registerClient())
70*b1cdbd2cSJim Jagielski     {
71*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
72*b1cdbd2cSJim Jagielski         DBG_CTOR( AccessibleImageBullet, NULL );
73*b1cdbd2cSJim Jagielski         OSL_TRACE( "Received ID: %d", mnNotifierClientId );
74*b1cdbd2cSJim Jagielski #endif
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski         try
77*b1cdbd2cSJim Jagielski         {
78*b1cdbd2cSJim Jagielski             // Create the state set.
79*b1cdbd2cSJim Jagielski             ::utl::AccessibleStateSetHelper* pStateSet  = new ::utl::AccessibleStateSetHelper ();
80*b1cdbd2cSJim Jagielski             mxStateSet = pStateSet;
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski             // these are always on
83*b1cdbd2cSJim Jagielski             pStateSet->AddState( AccessibleStateType::VISIBLE );
84*b1cdbd2cSJim Jagielski             pStateSet->AddState( AccessibleStateType::SHOWING );
85*b1cdbd2cSJim Jagielski             pStateSet->AddState( AccessibleStateType::ENABLED );
86*b1cdbd2cSJim Jagielski             pStateSet->AddState( AccessibleStateType::SENSITIVE );
87*b1cdbd2cSJim Jagielski         }
88*b1cdbd2cSJim Jagielski         catch( const uno::Exception& ) {}
89*b1cdbd2cSJim Jagielski     }
90*b1cdbd2cSJim Jagielski 
~AccessibleImageBullet()91*b1cdbd2cSJim Jagielski     AccessibleImageBullet::~AccessibleImageBullet()
92*b1cdbd2cSJim Jagielski     {
93*b1cdbd2cSJim Jagielski         DBG_DTOR( AccessibleImageBullet, NULL );
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski         // sign off from event notifier
96*b1cdbd2cSJim Jagielski         if( getNotifierClientId() != -1 )
97*b1cdbd2cSJim Jagielski         {
98*b1cdbd2cSJim Jagielski             try
99*b1cdbd2cSJim Jagielski             {
100*b1cdbd2cSJim Jagielski                 ::comphelper::AccessibleEventNotifier::revokeClient( getNotifierClientId() );
101*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
102*b1cdbd2cSJim Jagielski                 OSL_TRACE( "AccessibleImageBullet revoked ID: %d\n", mnNotifierClientId );
103*b1cdbd2cSJim Jagielski #endif
104*b1cdbd2cSJim Jagielski             }
105*b1cdbd2cSJim Jagielski             catch( const uno::Exception& ) {}
106*b1cdbd2cSJim Jagielski         }
107*b1cdbd2cSJim Jagielski     }
108*b1cdbd2cSJim Jagielski 
queryInterface(const uno::Type & rType)109*b1cdbd2cSJim Jagielski     uno::Any SAL_CALL AccessibleImageBullet::queryInterface (const uno::Type & rType) throw (uno::RuntimeException)
110*b1cdbd2cSJim Jagielski     {
111*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski         return AccessibleImageBulletInterfaceBase::queryInterface(rType);
114*b1cdbd2cSJim Jagielski     }
115*b1cdbd2cSJim Jagielski 
getAccessibleContext()116*b1cdbd2cSJim Jagielski     uno::Reference< XAccessibleContext > SAL_CALL AccessibleImageBullet::getAccessibleContext(  ) throw (uno::RuntimeException)
117*b1cdbd2cSJim Jagielski     {
118*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski         // We implement the XAccessibleContext interface in the same object
121*b1cdbd2cSJim Jagielski         return uno::Reference< XAccessibleContext > ( this );
122*b1cdbd2cSJim Jagielski     }
123*b1cdbd2cSJim Jagielski 
getAccessibleChildCount()124*b1cdbd2cSJim Jagielski     sal_Int32 SAL_CALL  AccessibleImageBullet::getAccessibleChildCount() throw (uno::RuntimeException)
125*b1cdbd2cSJim Jagielski     {
126*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski         return 0;
129*b1cdbd2cSJim Jagielski     }
130*b1cdbd2cSJim Jagielski 
getAccessibleChild(sal_Int32 i)131*b1cdbd2cSJim Jagielski     uno::Reference< XAccessible > SAL_CALL  AccessibleImageBullet::getAccessibleChild( sal_Int32 i ) throw (lang::IndexOutOfBoundsException, uno::RuntimeException)
132*b1cdbd2cSJim Jagielski     {
133*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
134*b1cdbd2cSJim Jagielski         (void)i;
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski         throw lang::IndexOutOfBoundsException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("No childs available")),
137*b1cdbd2cSJim Jagielski                                               uno::Reference< uno::XInterface >
138*b1cdbd2cSJim Jagielski                                               ( static_cast< ::cppu::OWeakObject* > (this) ) );	// static_cast: disambiguate hierarchy
139*b1cdbd2cSJim Jagielski     }
140*b1cdbd2cSJim Jagielski 
getAccessibleParent()141*b1cdbd2cSJim Jagielski     uno::Reference< XAccessible > SAL_CALL  AccessibleImageBullet::getAccessibleParent() throw (uno::RuntimeException)
142*b1cdbd2cSJim Jagielski     {
143*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski         return mxParent;
146*b1cdbd2cSJim Jagielski     }
147*b1cdbd2cSJim Jagielski 
getAccessibleIndexInParent()148*b1cdbd2cSJim Jagielski     sal_Int32 SAL_CALL  AccessibleImageBullet::getAccessibleIndexInParent() throw (uno::RuntimeException)
149*b1cdbd2cSJim Jagielski     {
150*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski         return mnIndexInParent;
153*b1cdbd2cSJim Jagielski     }
154*b1cdbd2cSJim Jagielski 
getAccessibleRole()155*b1cdbd2cSJim Jagielski     sal_Int16 SAL_CALL  AccessibleImageBullet::getAccessibleRole() throw (uno::RuntimeException)
156*b1cdbd2cSJim Jagielski     {
157*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski         return AccessibleRole::GRAPHIC;
160*b1cdbd2cSJim Jagielski     }
161*b1cdbd2cSJim Jagielski 
getAccessibleDescription()162*b1cdbd2cSJim Jagielski     ::rtl::OUString SAL_CALL  AccessibleImageBullet::getAccessibleDescription() throw (uno::RuntimeException)
163*b1cdbd2cSJim Jagielski     {
164*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski         ::vos::OGuard aGuard( Application::GetSolarMutex() );
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski         // Get the string from the resource for the specified id.
169*b1cdbd2cSJim Jagielski         return ::rtl::OUString( String( EditResId (RID_SVXSTR_A11Y_IMAGEBULLET_DESCRIPTION) ) );
170*b1cdbd2cSJim Jagielski     }
171*b1cdbd2cSJim Jagielski 
getAccessibleName()172*b1cdbd2cSJim Jagielski     ::rtl::OUString SAL_CALL  AccessibleImageBullet::getAccessibleName() throw (uno::RuntimeException)
173*b1cdbd2cSJim Jagielski     {
174*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski         ::vos::OGuard aGuard( Application::GetSolarMutex() );
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski         // Get the string from the resource for the specified id.
179*b1cdbd2cSJim Jagielski         return ::rtl::OUString( String ( EditResId (RID_SVXSTR_A11Y_IMAGEBULLET_NAME) ) );
180*b1cdbd2cSJim Jagielski     }
181*b1cdbd2cSJim Jagielski 
getAccessibleRelationSet()182*b1cdbd2cSJim Jagielski     uno::Reference< XAccessibleRelationSet > SAL_CALL AccessibleImageBullet::getAccessibleRelationSet() throw (uno::RuntimeException)
183*b1cdbd2cSJim Jagielski     {
184*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski         // no relations, therefore empty
187*b1cdbd2cSJim Jagielski         return uno::Reference< XAccessibleRelationSet >();
188*b1cdbd2cSJim Jagielski     }
189*b1cdbd2cSJim Jagielski 
getAccessibleStateSet()190*b1cdbd2cSJim Jagielski     uno::Reference< XAccessibleStateSet > SAL_CALL AccessibleImageBullet::getAccessibleStateSet() throw (uno::RuntimeException)
191*b1cdbd2cSJim Jagielski     {
192*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski         ::vos::OGuard aGuard( Application::GetSolarMutex() );
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski         // Create a copy of the state set and return it.
197*b1cdbd2cSJim Jagielski         ::utl::AccessibleStateSetHelper* pStateSet = static_cast< ::utl::AccessibleStateSetHelper*>(mxStateSet.get());
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski         if( !pStateSet )
200*b1cdbd2cSJim Jagielski             return uno::Reference<XAccessibleStateSet>();
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski         return uno::Reference<XAccessibleStateSet>( new ::utl::AccessibleStateSetHelper (*pStateSet) );
203*b1cdbd2cSJim Jagielski     }
204*b1cdbd2cSJim Jagielski 
getLocale()205*b1cdbd2cSJim Jagielski     lang::Locale SAL_CALL AccessibleImageBullet::getLocale() throw (IllegalAccessibleComponentStateException, uno::RuntimeException)
206*b1cdbd2cSJim Jagielski     {
207*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski         ::vos::OGuard aGuard( Application::GetSolarMutex() );
210*b1cdbd2cSJim Jagielski 
211*b1cdbd2cSJim Jagielski         lang::Locale		aLocale;
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski         DBG_ASSERT(GetParagraphIndex() >= 0 && GetParagraphIndex() <= USHRT_MAX,
214*b1cdbd2cSJim Jagielski                    "AccessibleImageBullet::getLocale: paragraph index value overflow");
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski         // return locale of first character in the paragraph
217*b1cdbd2cSJim Jagielski         return SvxLanguageToLocale(aLocale, GetTextForwarder().GetLanguage( static_cast< sal_uInt16 >( GetParagraphIndex() ), 0 ));
218*b1cdbd2cSJim Jagielski     }
219*b1cdbd2cSJim Jagielski 
addEventListener(const uno::Reference<XAccessibleEventListener> & xListener)220*b1cdbd2cSJim Jagielski     void SAL_CALL AccessibleImageBullet::addEventListener( const uno::Reference< XAccessibleEventListener >& xListener ) throw (uno::RuntimeException)
221*b1cdbd2cSJim Jagielski     {
222*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski         if( getNotifierClientId() != -1 )
225*b1cdbd2cSJim Jagielski             ::comphelper::AccessibleEventNotifier::addEventListener( getNotifierClientId(), xListener );
226*b1cdbd2cSJim Jagielski     }
227*b1cdbd2cSJim Jagielski 
removeEventListener(const uno::Reference<XAccessibleEventListener> & xListener)228*b1cdbd2cSJim Jagielski     void SAL_CALL AccessibleImageBullet::removeEventListener( const uno::Reference< XAccessibleEventListener >& xListener ) throw (uno::RuntimeException)
229*b1cdbd2cSJim Jagielski     {
230*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski         if( getNotifierClientId() != -1 )
233*b1cdbd2cSJim Jagielski             ::comphelper::AccessibleEventNotifier::removeEventListener( getNotifierClientId(), xListener );
234*b1cdbd2cSJim Jagielski     }
235*b1cdbd2cSJim Jagielski 
containsPoint(const awt::Point & rPoint)236*b1cdbd2cSJim Jagielski     sal_Bool SAL_CALL AccessibleImageBullet::containsPoint( const awt::Point& rPoint ) throw (uno::RuntimeException)
237*b1cdbd2cSJim Jagielski     {
238*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski         ::vos::OGuard aGuard( Application::GetSolarMutex() );
241*b1cdbd2cSJim Jagielski 
242*b1cdbd2cSJim Jagielski         DBG_ASSERT(GetParagraphIndex() >= 0 && GetParagraphIndex() <= USHRT_MAX,
243*b1cdbd2cSJim Jagielski                    "AccessibleEditableTextPara::contains: index value overflow");
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski         awt::Rectangle aTmpRect = getBounds();
246*b1cdbd2cSJim Jagielski         Rectangle aRect( Point(aTmpRect.X, aTmpRect.Y), Size(aTmpRect.Width, aTmpRect.Height) );
247*b1cdbd2cSJim Jagielski         Point aPoint( rPoint.X, rPoint.Y );
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski         return aRect.IsInside( aPoint );
250*b1cdbd2cSJim Jagielski     }
251*b1cdbd2cSJim Jagielski 
getAccessibleAtPoint(const awt::Point &)252*b1cdbd2cSJim Jagielski     uno::Reference< XAccessible > SAL_CALL AccessibleImageBullet::getAccessibleAtPoint( const awt::Point& /*aPoint*/ ) throw (uno::RuntimeException)
253*b1cdbd2cSJim Jagielski     {
254*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
255*b1cdbd2cSJim Jagielski 
256*b1cdbd2cSJim Jagielski         // as we have no children, empty reference
257*b1cdbd2cSJim Jagielski         return uno::Reference< XAccessible >();
258*b1cdbd2cSJim Jagielski     }
259*b1cdbd2cSJim Jagielski 
getBounds()260*b1cdbd2cSJim Jagielski     awt::Rectangle SAL_CALL AccessibleImageBullet::getBounds(  ) throw (uno::RuntimeException)
261*b1cdbd2cSJim Jagielski     {
262*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski         ::vos::OGuard aGuard( Application::GetSolarMutex() );
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski         DBG_ASSERT(GetParagraphIndex() >= 0 && GetParagraphIndex() <= USHRT_MAX,
267*b1cdbd2cSJim Jagielski                    "AccessibleEditableTextPara::getBounds: index value overflow");
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski         SvxTextForwarder& rCacheTF = GetTextForwarder();
270*b1cdbd2cSJim Jagielski         EBulletInfo aBulletInfo = rCacheTF.GetBulletInfo( static_cast< sal_uInt16 > (GetParagraphIndex()) );
271*b1cdbd2cSJim Jagielski         Rectangle aParentRect = rCacheTF.GetParaBounds( static_cast< sal_uInt16 >( GetParagraphIndex() ) );
272*b1cdbd2cSJim Jagielski 
273*b1cdbd2cSJim Jagielski         if( aBulletInfo.nParagraph != EE_PARA_NOT_FOUND &&
274*b1cdbd2cSJim Jagielski             aBulletInfo.bVisible &&
275*b1cdbd2cSJim Jagielski             aBulletInfo.nType == SVX_NUM_BITMAP )
276*b1cdbd2cSJim Jagielski         {
277*b1cdbd2cSJim Jagielski             Rectangle aRect = aBulletInfo.aBounds;
278*b1cdbd2cSJim Jagielski 
279*b1cdbd2cSJim Jagielski             // subtract paragraph position (bullet pos is absolute in EditEngine/Outliner)
280*b1cdbd2cSJim Jagielski             aRect.Move( -aParentRect.Left(), -aParentRect.Top() );
281*b1cdbd2cSJim Jagielski 
282*b1cdbd2cSJim Jagielski             // convert to screen coordinates
283*b1cdbd2cSJim Jagielski             Rectangle aScreenRect = AccessibleEditableTextPara::LogicToPixel( aRect,
284*b1cdbd2cSJim Jagielski                                                                               rCacheTF.GetMapMode(),
285*b1cdbd2cSJim Jagielski                                                                               GetViewForwarder() );
286*b1cdbd2cSJim Jagielski 
287*b1cdbd2cSJim Jagielski             // offset from shape/cell
288*b1cdbd2cSJim Jagielski             Point aOffset = GetEEOffset();
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski             return awt::Rectangle( aScreenRect.Left() + aOffset.X(),
291*b1cdbd2cSJim Jagielski                                    aScreenRect.Top() + aOffset.Y(),
292*b1cdbd2cSJim Jagielski                                    aScreenRect.GetSize().Width(),
293*b1cdbd2cSJim Jagielski                                    aScreenRect.GetSize().Height() );
294*b1cdbd2cSJim Jagielski         }
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski         return awt::Rectangle();
297*b1cdbd2cSJim Jagielski     }
298*b1cdbd2cSJim Jagielski 
getLocation()299*b1cdbd2cSJim Jagielski     awt::Point SAL_CALL AccessibleImageBullet::getLocation(  ) throw (uno::RuntimeException)
300*b1cdbd2cSJim Jagielski     {
301*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
302*b1cdbd2cSJim Jagielski 
303*b1cdbd2cSJim Jagielski         ::vos::OGuard aGuard( Application::GetSolarMutex() );
304*b1cdbd2cSJim Jagielski 
305*b1cdbd2cSJim Jagielski         awt::Rectangle aRect = getBounds();
306*b1cdbd2cSJim Jagielski 
307*b1cdbd2cSJim Jagielski         return awt::Point( aRect.X, aRect.Y );
308*b1cdbd2cSJim Jagielski     }
309*b1cdbd2cSJim Jagielski 
getLocationOnScreen()310*b1cdbd2cSJim Jagielski     awt::Point SAL_CALL AccessibleImageBullet::getLocationOnScreen(  ) throw (uno::RuntimeException)
311*b1cdbd2cSJim Jagielski     {
312*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski         ::vos::OGuard aGuard( Application::GetSolarMutex() );
315*b1cdbd2cSJim Jagielski 
316*b1cdbd2cSJim Jagielski         // relate us to parent
317*b1cdbd2cSJim Jagielski         uno::Reference< XAccessible > xParent = getAccessibleParent();
318*b1cdbd2cSJim Jagielski         if( xParent.is() )
319*b1cdbd2cSJim Jagielski         {
320*b1cdbd2cSJim Jagielski             uno::Reference< XAccessibleComponent > xParentComponent( xParent, uno::UNO_QUERY );
321*b1cdbd2cSJim Jagielski             if( xParentComponent.is() )
322*b1cdbd2cSJim Jagielski             {
323*b1cdbd2cSJim Jagielski                 awt::Point aRefPoint = xParentComponent->getLocationOnScreen();
324*b1cdbd2cSJim Jagielski                 awt::Point aPoint = getLocation();
325*b1cdbd2cSJim Jagielski                 aPoint.X += aRefPoint.X;
326*b1cdbd2cSJim Jagielski                 aPoint.Y += aRefPoint.Y;
327*b1cdbd2cSJim Jagielski 
328*b1cdbd2cSJim Jagielski                 return aPoint;
329*b1cdbd2cSJim Jagielski             }
330*b1cdbd2cSJim Jagielski         }
331*b1cdbd2cSJim Jagielski 
332*b1cdbd2cSJim Jagielski         throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Cannot access parent")),
333*b1cdbd2cSJim Jagielski                                     uno::Reference< uno::XInterface >
334*b1cdbd2cSJim Jagielski                                     ( static_cast< XAccessible* > (this) ) );	// disambiguate hierarchy
335*b1cdbd2cSJim Jagielski     }
336*b1cdbd2cSJim Jagielski 
getSize()337*b1cdbd2cSJim Jagielski     awt::Size SAL_CALL AccessibleImageBullet::getSize(  ) throw (uno::RuntimeException)
338*b1cdbd2cSJim Jagielski     {
339*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
340*b1cdbd2cSJim Jagielski 
341*b1cdbd2cSJim Jagielski         ::vos::OGuard aGuard( Application::GetSolarMutex() );
342*b1cdbd2cSJim Jagielski 
343*b1cdbd2cSJim Jagielski         awt::Rectangle aRect = getBounds();
344*b1cdbd2cSJim Jagielski 
345*b1cdbd2cSJim Jagielski         return awt::Size( aRect.Width, aRect.Height );
346*b1cdbd2cSJim Jagielski     }
347*b1cdbd2cSJim Jagielski 
grabFocus()348*b1cdbd2cSJim Jagielski     void SAL_CALL AccessibleImageBullet::grabFocus(  ) throw (uno::RuntimeException)
349*b1cdbd2cSJim Jagielski     {
350*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
351*b1cdbd2cSJim Jagielski 
352*b1cdbd2cSJim Jagielski         throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Not focusable")),
353*b1cdbd2cSJim Jagielski                                     uno::Reference< uno::XInterface >
354*b1cdbd2cSJim Jagielski                                     ( static_cast< XAccessible* > (this) ) );	// disambiguate hierarchy
355*b1cdbd2cSJim Jagielski     }
356*b1cdbd2cSJim Jagielski 
getForeground()357*b1cdbd2cSJim Jagielski     sal_Int32 SAL_CALL AccessibleImageBullet::getForeground(  ) throw (::com::sun::star::uno::RuntimeException)
358*b1cdbd2cSJim Jagielski     {
359*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski         // #104444# Added to XAccessibleComponent interface
362*b1cdbd2cSJim Jagielski 		svtools::ColorConfig aColorConfig;
363*b1cdbd2cSJim Jagielski 		sal_uInt32 nColor = aColorConfig.GetColorValue( svtools::FONTCOLOR ).nColor;
364*b1cdbd2cSJim Jagielski         return static_cast<sal_Int32>(nColor);
365*b1cdbd2cSJim Jagielski     }
366*b1cdbd2cSJim Jagielski 
getBackground()367*b1cdbd2cSJim Jagielski     sal_Int32 SAL_CALL AccessibleImageBullet::getBackground(  ) throw (::com::sun::star::uno::RuntimeException)
368*b1cdbd2cSJim Jagielski     {
369*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
370*b1cdbd2cSJim Jagielski 
371*b1cdbd2cSJim Jagielski         // #104444# Added to XAccessibleComponent interface
372*b1cdbd2cSJim Jagielski         Color aColor( Application::GetSettings().GetStyleSettings().GetWindowColor().GetColor() );
373*b1cdbd2cSJim Jagielski 
374*b1cdbd2cSJim Jagielski         // the background is transparent
375*b1cdbd2cSJim Jagielski         aColor.SetTransparency( 0xFF);
376*b1cdbd2cSJim Jagielski 
377*b1cdbd2cSJim Jagielski         return static_cast<sal_Int32>( aColor.GetColor() );
378*b1cdbd2cSJim Jagielski     }
379*b1cdbd2cSJim Jagielski 
getImplementationName(void)380*b1cdbd2cSJim Jagielski     ::rtl::OUString SAL_CALL AccessibleImageBullet::getImplementationName (void) throw (uno::RuntimeException)
381*b1cdbd2cSJim Jagielski     {
382*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
383*b1cdbd2cSJim Jagielski 
384*b1cdbd2cSJim Jagielski         return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM ("AccessibleImageBullet"));
385*b1cdbd2cSJim Jagielski     }
386*b1cdbd2cSJim Jagielski 
supportsService(const::rtl::OUString & sServiceName)387*b1cdbd2cSJim Jagielski     sal_Bool SAL_CALL AccessibleImageBullet::supportsService (const ::rtl::OUString& sServiceName) throw (uno::RuntimeException)
388*b1cdbd2cSJim Jagielski     {
389*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
390*b1cdbd2cSJim Jagielski 
391*b1cdbd2cSJim Jagielski         //  Iterate over all supported service names and return true if on of them
392*b1cdbd2cSJim Jagielski         //  matches the given name.
393*b1cdbd2cSJim Jagielski         uno::Sequence< ::rtl::OUString> aSupportedServices (
394*b1cdbd2cSJim Jagielski             getSupportedServiceNames ());
395*b1cdbd2cSJim Jagielski         for (int i=0; i<aSupportedServices.getLength(); i++)
396*b1cdbd2cSJim Jagielski             if (sServiceName == aSupportedServices[i])
397*b1cdbd2cSJim Jagielski                 return sal_True;
398*b1cdbd2cSJim Jagielski         return sal_False;
399*b1cdbd2cSJim Jagielski     }
400*b1cdbd2cSJim Jagielski 
getSupportedServiceNames(void)401*b1cdbd2cSJim Jagielski     uno::Sequence< ::rtl::OUString> SAL_CALL AccessibleImageBullet::getSupportedServiceNames (void) throw (uno::RuntimeException)
402*b1cdbd2cSJim Jagielski     {
403*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
404*b1cdbd2cSJim Jagielski 
405*b1cdbd2cSJim Jagielski         const ::rtl::OUString sServiceName (RTL_CONSTASCII_USTRINGPARAM ("com.sun.star.accessibility.AccessibleContext"));
406*b1cdbd2cSJim Jagielski         return uno::Sequence< ::rtl::OUString > (&sServiceName, 1);
407*b1cdbd2cSJim Jagielski     }
408*b1cdbd2cSJim Jagielski 
getServiceName(void)409*b1cdbd2cSJim Jagielski     ::rtl::OUString SAL_CALL AccessibleImageBullet::getServiceName (void) throw (uno::RuntimeException)
410*b1cdbd2cSJim Jagielski     {
411*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
412*b1cdbd2cSJim Jagielski 
413*b1cdbd2cSJim Jagielski         return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.accessibility.AccessibleContext"));
414*b1cdbd2cSJim Jagielski     }
415*b1cdbd2cSJim Jagielski 
SetIndexInParent(sal_Int32 nIndex)416*b1cdbd2cSJim Jagielski     void AccessibleImageBullet::SetIndexInParent( sal_Int32 nIndex )
417*b1cdbd2cSJim Jagielski     {
418*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
419*b1cdbd2cSJim Jagielski 
420*b1cdbd2cSJim Jagielski         mnIndexInParent = nIndex;
421*b1cdbd2cSJim Jagielski     }
422*b1cdbd2cSJim Jagielski 
GetIndexInParent() const423*b1cdbd2cSJim Jagielski     sal_Int32 AccessibleImageBullet::GetIndexInParent() const
424*b1cdbd2cSJim Jagielski     {
425*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
426*b1cdbd2cSJim Jagielski 
427*b1cdbd2cSJim Jagielski         return mnIndexInParent;
428*b1cdbd2cSJim Jagielski     }
429*b1cdbd2cSJim Jagielski 
SetEEOffset(const Point & rOffset)430*b1cdbd2cSJim Jagielski     void AccessibleImageBullet::SetEEOffset( const Point& rOffset )
431*b1cdbd2cSJim Jagielski     {
432*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
433*b1cdbd2cSJim Jagielski 
434*b1cdbd2cSJim Jagielski         maEEOffset = rOffset;
435*b1cdbd2cSJim Jagielski     }
436*b1cdbd2cSJim Jagielski 
Dispose()437*b1cdbd2cSJim Jagielski     void AccessibleImageBullet::Dispose()
438*b1cdbd2cSJim Jagielski     {
439*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
440*b1cdbd2cSJim Jagielski 
441*b1cdbd2cSJim Jagielski         int nClientId( getNotifierClientId() );
442*b1cdbd2cSJim Jagielski 
443*b1cdbd2cSJim Jagielski         // #108212# drop all references before notifying dispose
444*b1cdbd2cSJim Jagielski         mxParent = NULL;
445*b1cdbd2cSJim Jagielski         mnNotifierClientId = -1;
446*b1cdbd2cSJim Jagielski         mpEditSource = NULL;
447*b1cdbd2cSJim Jagielski 
448*b1cdbd2cSJim Jagielski         // notify listeners
449*b1cdbd2cSJim Jagielski         if( nClientId != -1 )
450*b1cdbd2cSJim Jagielski         {
451*b1cdbd2cSJim Jagielski             try
452*b1cdbd2cSJim Jagielski             {
453*b1cdbd2cSJim Jagielski                 uno::Reference < XAccessibleContext > xThis = getAccessibleContext();
454*b1cdbd2cSJim Jagielski 
455*b1cdbd2cSJim Jagielski                 // #106234# Delegate to EventNotifier
456*b1cdbd2cSJim Jagielski                 ::comphelper::AccessibleEventNotifier::revokeClientNotifyDisposing( nClientId, xThis );
457*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
458*b1cdbd2cSJim Jagielski                 OSL_TRACE( "AccessibleImageBullet disposed ID: %d", nClientId );
459*b1cdbd2cSJim Jagielski #endif
460*b1cdbd2cSJim Jagielski             }
461*b1cdbd2cSJim Jagielski             catch( const uno::Exception& ) {}
462*b1cdbd2cSJim Jagielski         }
463*b1cdbd2cSJim Jagielski     }
464*b1cdbd2cSJim Jagielski 
SetEditSource(SvxEditSource * pEditSource)465*b1cdbd2cSJim Jagielski     void AccessibleImageBullet::SetEditSource( SvxEditSource* pEditSource )
466*b1cdbd2cSJim Jagielski     {
467*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
468*b1cdbd2cSJim Jagielski 
469*b1cdbd2cSJim Jagielski         mpEditSource = pEditSource;
470*b1cdbd2cSJim Jagielski 
471*b1cdbd2cSJim Jagielski         if( !mpEditSource )
472*b1cdbd2cSJim Jagielski         {
473*b1cdbd2cSJim Jagielski             // going defunc
474*b1cdbd2cSJim Jagielski             UnSetState( AccessibleStateType::SHOWING );
475*b1cdbd2cSJim Jagielski             UnSetState( AccessibleStateType::VISIBLE );
476*b1cdbd2cSJim Jagielski             SetState( AccessibleStateType::INVALID );
477*b1cdbd2cSJim Jagielski             SetState( AccessibleStateType::DEFUNC );
478*b1cdbd2cSJim Jagielski 
479*b1cdbd2cSJim Jagielski             Dispose();
480*b1cdbd2cSJim Jagielski         }
481*b1cdbd2cSJim Jagielski     }
482*b1cdbd2cSJim Jagielski 
FireEvent(const sal_Int16 nEventId,const uno::Any & rNewValue,const uno::Any & rOldValue) const483*b1cdbd2cSJim Jagielski     void AccessibleImageBullet::FireEvent(const sal_Int16 nEventId, const uno::Any& rNewValue, const uno::Any& rOldValue ) const
484*b1cdbd2cSJim Jagielski     {
485*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
486*b1cdbd2cSJim Jagielski 
487*b1cdbd2cSJim Jagielski         uno::Reference < XAccessibleContext > xThis( const_cast< AccessibleImageBullet* > (this)->getAccessibleContext() );
488*b1cdbd2cSJim Jagielski 
489*b1cdbd2cSJim Jagielski         AccessibleEventObject aEvent(xThis, nEventId, rNewValue, rOldValue);
490*b1cdbd2cSJim Jagielski 
491*b1cdbd2cSJim Jagielski         // #106234# Delegate to EventNotifier
492*b1cdbd2cSJim Jagielski         ::comphelper::AccessibleEventNotifier::addEvent( getNotifierClientId(),
493*b1cdbd2cSJim Jagielski                                                          aEvent );
494*b1cdbd2cSJim Jagielski     }
495*b1cdbd2cSJim Jagielski 
GotPropertyEvent(const uno::Any & rNewValue,const sal_Int16 nEventId) const496*b1cdbd2cSJim Jagielski     void AccessibleImageBullet::GotPropertyEvent( const uno::Any& rNewValue, const sal_Int16 nEventId ) const
497*b1cdbd2cSJim Jagielski     {
498*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
499*b1cdbd2cSJim Jagielski 
500*b1cdbd2cSJim Jagielski         FireEvent( nEventId, rNewValue );
501*b1cdbd2cSJim Jagielski     }
502*b1cdbd2cSJim Jagielski 
LostPropertyEvent(const uno::Any & rOldValue,const sal_Int16 nEventId) const503*b1cdbd2cSJim Jagielski     void AccessibleImageBullet::LostPropertyEvent( const uno::Any& rOldValue, const sal_Int16 nEventId ) const
504*b1cdbd2cSJim Jagielski     {
505*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
506*b1cdbd2cSJim Jagielski 
507*b1cdbd2cSJim Jagielski         FireEvent( nEventId, uno::Any(), rOldValue );
508*b1cdbd2cSJim Jagielski     }
509*b1cdbd2cSJim Jagielski 
SetState(const sal_Int16 nStateId)510*b1cdbd2cSJim Jagielski     void AccessibleImageBullet::SetState( const sal_Int16 nStateId )
511*b1cdbd2cSJim Jagielski     {
512*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
513*b1cdbd2cSJim Jagielski 
514*b1cdbd2cSJim Jagielski         ::utl::AccessibleStateSetHelper* pStateSet = static_cast< ::utl::AccessibleStateSetHelper*>(mxStateSet.get());
515*b1cdbd2cSJim Jagielski         if( pStateSet != NULL &&
516*b1cdbd2cSJim Jagielski             !pStateSet->contains(nStateId) )
517*b1cdbd2cSJim Jagielski         {
518*b1cdbd2cSJim Jagielski             pStateSet->AddState( nStateId );
519*b1cdbd2cSJim Jagielski             GotPropertyEvent( uno::makeAny( nStateId ), AccessibleEventId::STATE_CHANGED );
520*b1cdbd2cSJim Jagielski         }
521*b1cdbd2cSJim Jagielski     }
522*b1cdbd2cSJim Jagielski 
UnSetState(const sal_Int16 nStateId)523*b1cdbd2cSJim Jagielski     void AccessibleImageBullet::UnSetState( const sal_Int16 nStateId )
524*b1cdbd2cSJim Jagielski     {
525*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
526*b1cdbd2cSJim Jagielski 
527*b1cdbd2cSJim Jagielski         ::utl::AccessibleStateSetHelper* pStateSet = static_cast< ::utl::AccessibleStateSetHelper*>(mxStateSet.get());
528*b1cdbd2cSJim Jagielski         if( pStateSet != NULL &&
529*b1cdbd2cSJim Jagielski             pStateSet->contains(nStateId) )
530*b1cdbd2cSJim Jagielski         {
531*b1cdbd2cSJim Jagielski             pStateSet->RemoveState( nStateId );
532*b1cdbd2cSJim Jagielski             LostPropertyEvent( uno::makeAny( nStateId ), AccessibleEventId::STATE_CHANGED );
533*b1cdbd2cSJim Jagielski         }
534*b1cdbd2cSJim Jagielski     }
535*b1cdbd2cSJim Jagielski 
getNotifierClientId() const536*b1cdbd2cSJim Jagielski     int AccessibleImageBullet::getNotifierClientId() const
537*b1cdbd2cSJim Jagielski     {
538*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
539*b1cdbd2cSJim Jagielski 
540*b1cdbd2cSJim Jagielski         return mnNotifierClientId;
541*b1cdbd2cSJim Jagielski     }
542*b1cdbd2cSJim Jagielski 
SetParagraphIndex(sal_Int32 nIndex)543*b1cdbd2cSJim Jagielski     void AccessibleImageBullet::SetParagraphIndex( sal_Int32 nIndex )
544*b1cdbd2cSJim Jagielski     {
545*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
546*b1cdbd2cSJim Jagielski 
547*b1cdbd2cSJim Jagielski         uno::Any aOldDesc;
548*b1cdbd2cSJim Jagielski         uno::Any aOldName;
549*b1cdbd2cSJim Jagielski 
550*b1cdbd2cSJim Jagielski         try
551*b1cdbd2cSJim Jagielski         {
552*b1cdbd2cSJim Jagielski             aOldDesc <<= getAccessibleDescription();
553*b1cdbd2cSJim Jagielski             aOldName <<= getAccessibleName();
554*b1cdbd2cSJim Jagielski         }
555*b1cdbd2cSJim Jagielski         catch( const uno::Exception& ) {} // optional behaviour
556*b1cdbd2cSJim Jagielski 
557*b1cdbd2cSJim Jagielski         sal_Int32 nOldIndex = mnParagraphIndex;
558*b1cdbd2cSJim Jagielski 
559*b1cdbd2cSJim Jagielski         mnParagraphIndex = nIndex;
560*b1cdbd2cSJim Jagielski 
561*b1cdbd2cSJim Jagielski         try
562*b1cdbd2cSJim Jagielski         {
563*b1cdbd2cSJim Jagielski             if( nOldIndex != nIndex )
564*b1cdbd2cSJim Jagielski             {
565*b1cdbd2cSJim Jagielski                 // index and therefore description changed
566*b1cdbd2cSJim Jagielski                 FireEvent( AccessibleEventId::DESCRIPTION_CHANGED, uno::makeAny( getAccessibleDescription() ), aOldDesc );
567*b1cdbd2cSJim Jagielski                 FireEvent( AccessibleEventId::NAME_CHANGED, uno::makeAny( getAccessibleName() ), aOldName );
568*b1cdbd2cSJim Jagielski             }
569*b1cdbd2cSJim Jagielski         }
570*b1cdbd2cSJim Jagielski         catch( const uno::Exception& ) {} // optional behaviour
571*b1cdbd2cSJim Jagielski     }
572*b1cdbd2cSJim Jagielski 
GetParagraphIndex() const573*b1cdbd2cSJim Jagielski     sal_Int32 AccessibleImageBullet::GetParagraphIndex() const SAL_THROW((uno::RuntimeException))
574*b1cdbd2cSJim Jagielski     {
575*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
576*b1cdbd2cSJim Jagielski 
577*b1cdbd2cSJim Jagielski         return mnParagraphIndex;
578*b1cdbd2cSJim Jagielski     }
579*b1cdbd2cSJim Jagielski 
GetEditSource() const580*b1cdbd2cSJim Jagielski     SvxEditSource& AccessibleImageBullet::GetEditSource() const SAL_THROW((uno::RuntimeException))
581*b1cdbd2cSJim Jagielski     {
582*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
583*b1cdbd2cSJim Jagielski 
584*b1cdbd2cSJim Jagielski         if( mpEditSource )
585*b1cdbd2cSJim Jagielski             return *mpEditSource;
586*b1cdbd2cSJim Jagielski         else
587*b1cdbd2cSJim Jagielski             throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("No edit source, object is defunct")),
588*b1cdbd2cSJim Jagielski                                         uno::Reference< uno::XInterface >
589*b1cdbd2cSJim Jagielski                                         ( static_cast< ::cppu::OWeakObject* >
590*b1cdbd2cSJim Jagielski                                           ( const_cast< AccessibleImageBullet* > (this) ) ) );	// disambiguate hierarchy
591*b1cdbd2cSJim Jagielski     }
592*b1cdbd2cSJim Jagielski 
GetTextForwarder() const593*b1cdbd2cSJim Jagielski     SvxTextForwarder& AccessibleImageBullet::GetTextForwarder() const SAL_THROW((uno::RuntimeException))
594*b1cdbd2cSJim Jagielski     {
595*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
596*b1cdbd2cSJim Jagielski 
597*b1cdbd2cSJim Jagielski         SvxEditSource& rEditSource = GetEditSource();
598*b1cdbd2cSJim Jagielski         SvxTextForwarder* pTextForwarder = rEditSource.GetTextForwarder();
599*b1cdbd2cSJim Jagielski 
600*b1cdbd2cSJim Jagielski         if( !pTextForwarder )
601*b1cdbd2cSJim Jagielski             throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Unable to fetch text forwarder, object is defunct")),
602*b1cdbd2cSJim Jagielski                                         uno::Reference< uno::XInterface >
603*b1cdbd2cSJim Jagielski                                         ( static_cast< ::cppu::OWeakObject* >
604*b1cdbd2cSJim Jagielski                                           ( const_cast< AccessibleImageBullet* > (this) ) ) );	// disambiguate hierarchy
605*b1cdbd2cSJim Jagielski 
606*b1cdbd2cSJim Jagielski         if( pTextForwarder->IsValid() )
607*b1cdbd2cSJim Jagielski             return *pTextForwarder;
608*b1cdbd2cSJim Jagielski         else
609*b1cdbd2cSJim Jagielski             throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Text forwarder is invalid, object is defunct")),
610*b1cdbd2cSJim Jagielski                                         uno::Reference< uno::XInterface >
611*b1cdbd2cSJim Jagielski                                         ( static_cast< ::cppu::OWeakObject* >
612*b1cdbd2cSJim Jagielski                                           ( const_cast< AccessibleImageBullet* > (this) ) ) );	// disambiguate hierarchy
613*b1cdbd2cSJim Jagielski     }
614*b1cdbd2cSJim Jagielski 
GetViewForwarder() const615*b1cdbd2cSJim Jagielski     SvxViewForwarder& AccessibleImageBullet::GetViewForwarder() const SAL_THROW((uno::RuntimeException))
616*b1cdbd2cSJim Jagielski     {
617*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
618*b1cdbd2cSJim Jagielski 
619*b1cdbd2cSJim Jagielski         SvxEditSource& rEditSource = GetEditSource();
620*b1cdbd2cSJim Jagielski         SvxViewForwarder* pViewForwarder = rEditSource.GetViewForwarder();
621*b1cdbd2cSJim Jagielski 
622*b1cdbd2cSJim Jagielski         if( !pViewForwarder )
623*b1cdbd2cSJim Jagielski         {
624*b1cdbd2cSJim Jagielski             throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Unable to fetch view forwarder, object is defunct")),
625*b1cdbd2cSJim Jagielski                                         uno::Reference< uno::XInterface >
626*b1cdbd2cSJim Jagielski                                         ( static_cast< ::cppu::OWeakObject* >
627*b1cdbd2cSJim Jagielski                                           ( const_cast< AccessibleImageBullet* > (this) ) ) );	// disambiguate hierarchy
628*b1cdbd2cSJim Jagielski         }
629*b1cdbd2cSJim Jagielski 
630*b1cdbd2cSJim Jagielski         if( pViewForwarder->IsValid() )
631*b1cdbd2cSJim Jagielski             return *pViewForwarder;
632*b1cdbd2cSJim Jagielski         else
633*b1cdbd2cSJim Jagielski             throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("View forwarder is invalid, object is defunct")),
634*b1cdbd2cSJim Jagielski                                         uno::Reference< uno::XInterface >
635*b1cdbd2cSJim Jagielski                                         ( static_cast< ::cppu::OWeakObject* >
636*b1cdbd2cSJim Jagielski                                           ( const_cast< AccessibleImageBullet* > (this) )  ) );	// disambiguate hierarchy
637*b1cdbd2cSJim Jagielski     }
638*b1cdbd2cSJim Jagielski 
GetEEOffset() const639*b1cdbd2cSJim Jagielski     const Point& AccessibleImageBullet::GetEEOffset() const
640*b1cdbd2cSJim Jagielski     {
641*b1cdbd2cSJim Jagielski         DBG_CHKTHIS( AccessibleImageBullet, NULL );
642*b1cdbd2cSJim Jagielski 
643*b1cdbd2cSJim Jagielski         return maEEOffset;
644*b1cdbd2cSJim Jagielski     }
645*b1cdbd2cSJim Jagielski 
646*b1cdbd2cSJim Jagielski } // end of namespace accessibility
647*b1cdbd2cSJim Jagielski 
648