1*c142477cSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*c142477cSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*c142477cSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*c142477cSAndrew Rist * distributed with this work for additional information 6*c142477cSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*c142477cSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*c142477cSAndrew Rist * "License"); you may not use this file except in compliance 9*c142477cSAndrew Rist * with the License. You may obtain a copy of the License at 10*c142477cSAndrew Rist * 11*c142477cSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*c142477cSAndrew Rist * 13*c142477cSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*c142477cSAndrew Rist * software distributed under the License is distributed on an 15*c142477cSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*c142477cSAndrew Rist * KIND, either express or implied. See the License for the 17*c142477cSAndrew Rist * specific language governing permissions and limitations 18*c142477cSAndrew Rist * under the License. 19*c142477cSAndrew Rist * 20*c142477cSAndrew Rist *************************************************************/ 21*c142477cSAndrew Rist 22*c142477cSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #include "precompiled_sdext.hxx" 25cdf0e10cSrcweir 26cdf0e10cSrcweir #include "PresenterAccessibility.hxx" 27cdf0e10cSrcweir #include "PresenterTextView.hxx" 28cdf0e10cSrcweir #include "PresenterConfigurationAccess.hxx" 29cdf0e10cSrcweir #include "PresenterNotesView.hxx" 30cdf0e10cSrcweir #include "PresenterPaneBase.hxx" 31cdf0e10cSrcweir #include "PresenterPaneContainer.hxx" 32cdf0e10cSrcweir #include "PresenterPaneFactory.hxx" 33cdf0e10cSrcweir #include "PresenterViewFactory.hxx" 34cdf0e10cSrcweir 35cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleEventId.hpp> 36cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleRelationType.hpp> 37cdf0e10cSrcweir #include <com/sun/star/accessibility/AccessibleRole.hpp> 38cdf0e10cSrcweir #include <com/sun/star/accessibility/XAccessibleComponent.hpp> 39cdf0e10cSrcweir #include <com/sun/star/accessibility/XAccessibleContext.hpp> 40cdf0e10cSrcweir #include <com/sun/star/accessibility/XAccessibleEditableText.hpp> 41cdf0e10cSrcweir #include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp> 42cdf0e10cSrcweir #include <com/sun/star/accessibility/XAccessibleText.hpp> 43cdf0e10cSrcweir #include <com/sun/star/drawing/framework/ResourceId.hpp> 44cdf0e10cSrcweir #include <com/sun/star/drawing/framework/XPane.hpp> 45cdf0e10cSrcweir #include <com/sun/star/drawing/framework/XView.hpp> 46cdf0e10cSrcweir #include <cppuhelper/compbase1.hxx> 47cdf0e10cSrcweir #include <cppuhelper/compbase5.hxx> 48cdf0e10cSrcweir #include <cppuhelper/implbase1.hxx> 49cdf0e10cSrcweir #include <boost/bind.hpp> 50cdf0e10cSrcweir 51cdf0e10cSrcweir using namespace ::com::sun::star; 52cdf0e10cSrcweir using namespace ::com::sun::star::accessibility; 53cdf0e10cSrcweir using namespace ::com::sun::star::uno; 54cdf0e10cSrcweir using namespace ::com::sun::star::drawing::framework; 55cdf0e10cSrcweir using ::rtl::OUString; 56cdf0e10cSrcweir 57cdf0e10cSrcweir #define A2S(s) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))) 58cdf0e10cSrcweir 59cdf0e10cSrcweir #define VERBOSE 60cdf0e10cSrcweir 61cdf0e10cSrcweir //===== PresenterAccessibleObject ============================================= 62cdf0e10cSrcweir 63cdf0e10cSrcweir namespace sdext { namespace presenter { 64cdf0e10cSrcweir 65cdf0e10cSrcweir namespace { 66cdf0e10cSrcweir typedef ::cppu::WeakComponentImplHelper5 < 67cdf0e10cSrcweir cssa::XAccessible, 68cdf0e10cSrcweir cssa::XAccessibleContext, 69cdf0e10cSrcweir cssa::XAccessibleComponent, 70cdf0e10cSrcweir cssa::XAccessibleEventBroadcaster, 71cdf0e10cSrcweir css::awt::XWindowListener 72cdf0e10cSrcweir > PresenterAccessibleObjectInterfaceBase; 73cdf0e10cSrcweir } 74cdf0e10cSrcweir 75cdf0e10cSrcweir class PresenterAccessible::AccessibleObject 76cdf0e10cSrcweir : public ::cppu::BaseMutex, 77cdf0e10cSrcweir public PresenterAccessibleObjectInterfaceBase 78cdf0e10cSrcweir { 79cdf0e10cSrcweir public: 80cdf0e10cSrcweir AccessibleObject ( 81cdf0e10cSrcweir const css::lang::Locale aLocale, 82cdf0e10cSrcweir const sal_Int16 nRole, 83cdf0e10cSrcweir const ::rtl::OUString& rsName); 84cdf0e10cSrcweir void LateInitialization (void); 85cdf0e10cSrcweir 86cdf0e10cSrcweir virtual ~AccessibleObject (void); 87cdf0e10cSrcweir 88cdf0e10cSrcweir virtual void SetWindow ( 89cdf0e10cSrcweir const cssu::Reference<css::awt::XWindow>& rxContentWindow, 90cdf0e10cSrcweir const cssu::Reference<css::awt::XWindow>& rxBorderWindow); 91cdf0e10cSrcweir void SetAccessibleParent (const cssu::Reference<cssa::XAccessible>& rxAccessibleParent); 92cdf0e10cSrcweir 93cdf0e10cSrcweir virtual void SAL_CALL disposing (void); 94cdf0e10cSrcweir 95cdf0e10cSrcweir void NotifyCurrentSlideChange (const sal_Int32 nCurrentSlideIndex); 96cdf0e10cSrcweir 97cdf0e10cSrcweir void AddChild (const ::rtl::Reference<AccessibleObject>& rpChild); 98cdf0e10cSrcweir void RemoveChild (const ::rtl::Reference<AccessibleObject>& rpChild); 99cdf0e10cSrcweir 100cdf0e10cSrcweir void SetIsFocused (const bool bIsFocused); 101cdf0e10cSrcweir void SetAccessibleName (const ::rtl::OUString& rsName); 102cdf0e10cSrcweir 103cdf0e10cSrcweir void FireAccessibleEvent ( 104cdf0e10cSrcweir const sal_Int16 nEventId, 105cdf0e10cSrcweir const cssu::Any& rOldValue, 106cdf0e10cSrcweir const cssu::Any& rNewValue); 107cdf0e10cSrcweir 108cdf0e10cSrcweir void UpdateStateSet (void); 109cdf0e10cSrcweir 110cdf0e10cSrcweir 111cdf0e10cSrcweir //----- XAccessible ------------------------------------------------------- 112cdf0e10cSrcweir 113cdf0e10cSrcweir virtual cssu::Reference<cssa::XAccessibleContext> SAL_CALL 114cdf0e10cSrcweir getAccessibleContext (void) 115cdf0e10cSrcweir throw (cssu::RuntimeException); 116cdf0e10cSrcweir 117cdf0e10cSrcweir 118cdf0e10cSrcweir //----- XAccessibleContext ---------------------------------------------- 119cdf0e10cSrcweir 120cdf0e10cSrcweir virtual sal_Int32 SAL_CALL getAccessibleChildCount (void) 121cdf0e10cSrcweir throw (cssu::RuntimeException); 122cdf0e10cSrcweir 123cdf0e10cSrcweir virtual cssu::Reference< cssa::XAccessible> SAL_CALL 124cdf0e10cSrcweir getAccessibleChild (sal_Int32 nIndex) 125cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, cssu::RuntimeException); 126cdf0e10cSrcweir 127cdf0e10cSrcweir virtual cssu::Reference< cssa::XAccessible> SAL_CALL getAccessibleParent (void) 128cdf0e10cSrcweir throw (cssu::RuntimeException); 129cdf0e10cSrcweir 130cdf0e10cSrcweir virtual sal_Int32 SAL_CALL getAccessibleIndexInParent (void) 131cdf0e10cSrcweir throw (cssu::RuntimeException); 132cdf0e10cSrcweir 133cdf0e10cSrcweir virtual sal_Int16 SAL_CALL getAccessibleRole (void) 134cdf0e10cSrcweir throw (cssu::RuntimeException); 135cdf0e10cSrcweir 136cdf0e10cSrcweir virtual ::rtl::OUString SAL_CALL getAccessibleDescription (void) 137cdf0e10cSrcweir throw (cssu::RuntimeException); 138cdf0e10cSrcweir 139cdf0e10cSrcweir virtual ::rtl::OUString SAL_CALL getAccessibleName (void) 140cdf0e10cSrcweir throw (cssu::RuntimeException); 141cdf0e10cSrcweir 142cdf0e10cSrcweir virtual cssu::Reference<cssa::XAccessibleRelationSet> SAL_CALL 143cdf0e10cSrcweir getAccessibleRelationSet (void) 144cdf0e10cSrcweir throw (cssu::RuntimeException); 145cdf0e10cSrcweir 146cdf0e10cSrcweir virtual cssu::Reference<cssa::XAccessibleStateSet> SAL_CALL 147cdf0e10cSrcweir getAccessibleStateSet (void) 148cdf0e10cSrcweir throw (cssu::RuntimeException); 149cdf0e10cSrcweir 150cdf0e10cSrcweir virtual css::lang::Locale SAL_CALL getLocale (void) 151cdf0e10cSrcweir throw (cssu::RuntimeException, 152cdf0e10cSrcweir cssa::IllegalAccessibleComponentStateException); 153cdf0e10cSrcweir 154cdf0e10cSrcweir 155cdf0e10cSrcweir //----- XAccessibleComponent -------------------------------------------- 156cdf0e10cSrcweir 157cdf0e10cSrcweir virtual sal_Bool SAL_CALL containsPoint ( 158cdf0e10cSrcweir const css::awt::Point& aPoint) 159cdf0e10cSrcweir throw (cssu::RuntimeException); 160cdf0e10cSrcweir 161cdf0e10cSrcweir virtual cssu::Reference<cssa::XAccessible> SAL_CALL 162cdf0e10cSrcweir getAccessibleAtPoint ( 163cdf0e10cSrcweir const css::awt::Point& aPoint) 164cdf0e10cSrcweir throw (cssu::RuntimeException); 165cdf0e10cSrcweir 166cdf0e10cSrcweir virtual css::awt::Rectangle SAL_CALL getBounds (void) 167cdf0e10cSrcweir throw (cssu::RuntimeException); 168cdf0e10cSrcweir 169cdf0e10cSrcweir virtual css::awt::Point SAL_CALL getLocation (void) 170cdf0e10cSrcweir throw (cssu::RuntimeException); 171cdf0e10cSrcweir 172cdf0e10cSrcweir virtual css::awt::Point SAL_CALL getLocationOnScreen (void) 173cdf0e10cSrcweir throw (cssu::RuntimeException); 174cdf0e10cSrcweir 175cdf0e10cSrcweir virtual css::awt::Size SAL_CALL getSize (void) 176cdf0e10cSrcweir throw (cssu::RuntimeException); 177cdf0e10cSrcweir 178cdf0e10cSrcweir virtual void SAL_CALL grabFocus (void) 179cdf0e10cSrcweir throw (cssu::RuntimeException); 180cdf0e10cSrcweir 181cdf0e10cSrcweir virtual sal_Int32 SAL_CALL getForeground (void) 182cdf0e10cSrcweir throw (cssu::RuntimeException); 183cdf0e10cSrcweir 184cdf0e10cSrcweir virtual sal_Int32 SAL_CALL getBackground (void) 185cdf0e10cSrcweir throw (cssu::RuntimeException); 186cdf0e10cSrcweir 187cdf0e10cSrcweir 188cdf0e10cSrcweir //----- XAccessibleEventBroadcaster -------------------------------------- 189cdf0e10cSrcweir 190cdf0e10cSrcweir virtual void SAL_CALL addEventListener ( 191cdf0e10cSrcweir const cssu::Reference<cssa::XAccessibleEventListener>& rxListener) 192cdf0e10cSrcweir throw (cssu::RuntimeException); 193cdf0e10cSrcweir 194cdf0e10cSrcweir virtual void SAL_CALL removeEventListener ( 195cdf0e10cSrcweir const cssu::Reference<cssa::XAccessibleEventListener>& rxListener) 196cdf0e10cSrcweir throw (cssu::RuntimeException); 197cdf0e10cSrcweir 198cdf0e10cSrcweir using PresenterAccessibleObjectInterfaceBase::addEventListener; 199cdf0e10cSrcweir using PresenterAccessibleObjectInterfaceBase::removeEventListener; 200cdf0e10cSrcweir 201cdf0e10cSrcweir //----- XWindowListener --------------------------------------------------- 202cdf0e10cSrcweir 203cdf0e10cSrcweir virtual void SAL_CALL windowResized (const css::awt::WindowEvent& rEvent) 204cdf0e10cSrcweir throw (cssu::RuntimeException); 205cdf0e10cSrcweir 206cdf0e10cSrcweir virtual void SAL_CALL windowMoved (const css::awt::WindowEvent& rEvent) 207cdf0e10cSrcweir throw (cssu::RuntimeException); 208cdf0e10cSrcweir 209cdf0e10cSrcweir virtual void SAL_CALL windowShown (const css::lang::EventObject& rEvent) 210cdf0e10cSrcweir throw (cssu::RuntimeException); 211cdf0e10cSrcweir 212cdf0e10cSrcweir virtual void SAL_CALL windowHidden (const css::lang::EventObject& rEvent) 213cdf0e10cSrcweir throw (cssu::RuntimeException); 214cdf0e10cSrcweir 215cdf0e10cSrcweir 216cdf0e10cSrcweir //----- XEventListener ---------------------------------------------------- 217cdf0e10cSrcweir 218cdf0e10cSrcweir virtual void SAL_CALL disposing (const css::lang::EventObject& rEvent) 219cdf0e10cSrcweir throw (cssu::RuntimeException); 220cdf0e10cSrcweir 221cdf0e10cSrcweir 222cdf0e10cSrcweir protected: 223cdf0e10cSrcweir ::rtl::OUString msName; 224cdf0e10cSrcweir cssu::Reference<css::awt::XWindow2> mxContentWindow; 225cdf0e10cSrcweir cssu::Reference<css::awt::XWindow2> mxBorderWindow; 226cdf0e10cSrcweir const css::lang::Locale maLocale; 227cdf0e10cSrcweir const sal_Int16 mnRole; 228cdf0e10cSrcweir sal_uInt32 mnStateSet; 229cdf0e10cSrcweir bool mbIsFocused; 230cdf0e10cSrcweir cssu::Reference<cssa::XAccessible> mxParentAccessible; 231cdf0e10cSrcweir ::std::vector<rtl::Reference<AccessibleObject> > maChildren; 232cdf0e10cSrcweir ::std::vector<Reference<XAccessibleEventListener> > maListeners; 233cdf0e10cSrcweir 234cdf0e10cSrcweir virtual awt::Point GetRelativeLocation (void); 235cdf0e10cSrcweir virtual awt::Size GetSize (void); 236cdf0e10cSrcweir virtual awt::Point GetAbsoluteParentLocation (void); 237cdf0e10cSrcweir 238cdf0e10cSrcweir virtual bool GetWindowState (const sal_Int16 nType) const; 239cdf0e10cSrcweir 240cdf0e10cSrcweir void UpdateState (const sal_Int16 aState, const bool bValue); 241cdf0e10cSrcweir 242cdf0e10cSrcweir sal_Bool IsDisposed (void) const; 243cdf0e10cSrcweir 244cdf0e10cSrcweir void ThrowIfDisposed (void) const 245cdf0e10cSrcweir throw (css::lang::DisposedException); 246cdf0e10cSrcweir 247cdf0e10cSrcweir enum ExceptionType { ET_Runtime, ET_Disposed, ET_IndexOutOfBounds }; 248cdf0e10cSrcweir void ThrowException (const sal_Char* pMessage, const ExceptionType eExceptionType) const; 249cdf0e10cSrcweir }; 250cdf0e10cSrcweir 251cdf0e10cSrcweir 252cdf0e10cSrcweir 253cdf0e10cSrcweir 254cdf0e10cSrcweir //===== AccessibleStateSet ==================================================== 255cdf0e10cSrcweir 256cdf0e10cSrcweir namespace { 257cdf0e10cSrcweir typedef ::cppu::WeakComponentImplHelper1 < 258cdf0e10cSrcweir cssa::XAccessibleStateSet 259cdf0e10cSrcweir > AccessibleStateSetInterfaceBase; 260cdf0e10cSrcweir } 261cdf0e10cSrcweir 262cdf0e10cSrcweir class AccessibleStateSet 263cdf0e10cSrcweir : public ::cppu::BaseMutex, 264cdf0e10cSrcweir public AccessibleStateSetInterfaceBase 265cdf0e10cSrcweir { 266cdf0e10cSrcweir public: 267cdf0e10cSrcweir AccessibleStateSet (const sal_Int32 nStateSet); 268cdf0e10cSrcweir virtual ~AccessibleStateSet (void); 269cdf0e10cSrcweir 270cdf0e10cSrcweir static sal_uInt32 GetStateMask (const sal_Int16 nType); 271cdf0e10cSrcweir 272cdf0e10cSrcweir //----- XAccessibleStateSet ----------------------------------------------- 273cdf0e10cSrcweir 274cdf0e10cSrcweir virtual sal_Bool SAL_CALL isEmpty (void) 275cdf0e10cSrcweir throw (cssu::RuntimeException); 276cdf0e10cSrcweir 277cdf0e10cSrcweir virtual sal_Bool SAL_CALL contains (sal_Int16 nState) 278cdf0e10cSrcweir throw (cssu::RuntimeException); 279cdf0e10cSrcweir 280cdf0e10cSrcweir virtual sal_Bool SAL_CALL containsAll (const cssu::Sequence<sal_Int16>& rStateSet) 281cdf0e10cSrcweir throw (cssu::RuntimeException); 282cdf0e10cSrcweir 283cdf0e10cSrcweir virtual cssu::Sequence<sal_Int16> SAL_CALL getStates (void) 284cdf0e10cSrcweir throw (cssu::RuntimeException); 285cdf0e10cSrcweir 286cdf0e10cSrcweir private: 287cdf0e10cSrcweir const sal_Int32 mnStateSet; 288cdf0e10cSrcweir }; 289cdf0e10cSrcweir 290cdf0e10cSrcweir 291cdf0e10cSrcweir 292cdf0e10cSrcweir 293cdf0e10cSrcweir //===== AccessibleRelationSet ================================================= 294cdf0e10cSrcweir 295cdf0e10cSrcweir namespace { 296cdf0e10cSrcweir typedef ::cppu::WeakComponentImplHelper1 < 297cdf0e10cSrcweir cssa::XAccessibleRelationSet 298cdf0e10cSrcweir > AccessibleRelationSetInterfaceBase; 299cdf0e10cSrcweir } 300cdf0e10cSrcweir 301cdf0e10cSrcweir class AccessibleRelationSet 302cdf0e10cSrcweir : public ::cppu::BaseMutex, 303cdf0e10cSrcweir public AccessibleRelationSetInterfaceBase 304cdf0e10cSrcweir { 305cdf0e10cSrcweir public: 306cdf0e10cSrcweir AccessibleRelationSet (void); 307cdf0e10cSrcweir virtual ~AccessibleRelationSet (void); 308cdf0e10cSrcweir 309cdf0e10cSrcweir void AddRelation ( 310cdf0e10cSrcweir const sal_Int16 nRelationType, 311cdf0e10cSrcweir const Reference<XInterface>& rxObject); 312cdf0e10cSrcweir 313cdf0e10cSrcweir 314cdf0e10cSrcweir //----- XAccessibleRelationSet -------------------------------------------- 315cdf0e10cSrcweir 316cdf0e10cSrcweir virtual sal_Int32 SAL_CALL getRelationCount (void) 317cdf0e10cSrcweir throw (cssu::RuntimeException); 318cdf0e10cSrcweir 319cdf0e10cSrcweir virtual AccessibleRelation SAL_CALL getRelation (sal_Int32 nIndex) 320cdf0e10cSrcweir throw (cssu::RuntimeException, css::lang::IndexOutOfBoundsException); 321cdf0e10cSrcweir 322cdf0e10cSrcweir virtual sal_Bool SAL_CALL containsRelation (sal_Int16 nRelationType) 323cdf0e10cSrcweir throw (cssu::RuntimeException); 324cdf0e10cSrcweir 325cdf0e10cSrcweir virtual AccessibleRelation SAL_CALL getRelationByType (sal_Int16 nRelationType) 326cdf0e10cSrcweir throw (cssu::RuntimeException); 327cdf0e10cSrcweir 328cdf0e10cSrcweir private: 329cdf0e10cSrcweir ::std::vector<AccessibleRelation> maRelations; 330cdf0e10cSrcweir }; 331cdf0e10cSrcweir 332cdf0e10cSrcweir 333cdf0e10cSrcweir 334cdf0e10cSrcweir 335cdf0e10cSrcweir //===== PresenterAccessibleParagraph ========================================== 336cdf0e10cSrcweir 337cdf0e10cSrcweir namespace { 338cdf0e10cSrcweir typedef ::cppu::ImplInheritanceHelper1 < 339cdf0e10cSrcweir PresenterAccessible::AccessibleObject, 340cdf0e10cSrcweir cssa::XAccessibleText 341cdf0e10cSrcweir > PresenterAccessibleParagraphInterfaceBase; 342cdf0e10cSrcweir } 343cdf0e10cSrcweir 344cdf0e10cSrcweir 345cdf0e10cSrcweir 346cdf0e10cSrcweir 347cdf0e10cSrcweir class PresenterAccessible::AccessibleParagraph 348cdf0e10cSrcweir : public PresenterAccessibleParagraphInterfaceBase 349cdf0e10cSrcweir { 350cdf0e10cSrcweir public: 351cdf0e10cSrcweir AccessibleParagraph ( 352cdf0e10cSrcweir const css::lang::Locale aLocale, 353cdf0e10cSrcweir const sal_Int16 nRole, 354cdf0e10cSrcweir const ::rtl::OUString& rsName, 355cdf0e10cSrcweir const SharedPresenterTextParagraph& rpParagraph, 356cdf0e10cSrcweir const sal_Int32 nParagraphIndex); 357cdf0e10cSrcweir 358cdf0e10cSrcweir virtual ~AccessibleParagraph (void); 359cdf0e10cSrcweir 360cdf0e10cSrcweir 361cdf0e10cSrcweir //----- XAccessibleContext ------------------------------------------------ 362cdf0e10cSrcweir 363cdf0e10cSrcweir virtual cssu::Reference<cssa::XAccessibleRelationSet> SAL_CALL 364cdf0e10cSrcweir getAccessibleRelationSet (void) 365cdf0e10cSrcweir throw (cssu::RuntimeException); 366cdf0e10cSrcweir 367cdf0e10cSrcweir 368cdf0e10cSrcweir //----- XAccessibleText --------------------------------------------------- 369cdf0e10cSrcweir 370cdf0e10cSrcweir virtual sal_Int32 SAL_CALL getCaretPosition (void) 371cdf0e10cSrcweir throw (cssu::RuntimeException); 372cdf0e10cSrcweir 373cdf0e10cSrcweir virtual sal_Bool SAL_CALL setCaretPosition (sal_Int32 nIndex) 374cdf0e10cSrcweir throw (::com::sun::star::lang::IndexOutOfBoundsException, cssu::RuntimeException); 375cdf0e10cSrcweir 376cdf0e10cSrcweir virtual sal_Unicode SAL_CALL getCharacter (sal_Int32 nIndex) 377cdf0e10cSrcweir throw (::com::sun::star::lang::IndexOutOfBoundsException, cssu::RuntimeException); 378cdf0e10cSrcweir 379cdf0e10cSrcweir virtual cssu::Sequence<css::beans::PropertyValue> SAL_CALL 380cdf0e10cSrcweir getCharacterAttributes ( 381cdf0e10cSrcweir ::sal_Int32 nIndex, 382cdf0e10cSrcweir const cssu::Sequence<rtl::OUString>& rRequestedAttributes) 383cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, cssu::RuntimeException); 384cdf0e10cSrcweir 385cdf0e10cSrcweir virtual css::awt::Rectangle SAL_CALL getCharacterBounds (sal_Int32 nIndex) 386cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, cssu::RuntimeException); 387cdf0e10cSrcweir 388cdf0e10cSrcweir virtual sal_Int32 SAL_CALL getCharacterCount (void) 389cdf0e10cSrcweir throw (cssu::RuntimeException); 390cdf0e10cSrcweir 391cdf0e10cSrcweir virtual sal_Int32 SAL_CALL getIndexAtPoint (const css::awt::Point& rPoint) 392cdf0e10cSrcweir throw (cssu::RuntimeException); 393cdf0e10cSrcweir 394cdf0e10cSrcweir virtual ::rtl::OUString SAL_CALL getSelectedText (void) 395cdf0e10cSrcweir throw (cssu::RuntimeException); 396cdf0e10cSrcweir 397cdf0e10cSrcweir virtual sal_Int32 SAL_CALL getSelectionStart (void) 398cdf0e10cSrcweir throw (cssu::RuntimeException); 399cdf0e10cSrcweir 400cdf0e10cSrcweir virtual sal_Int32 SAL_CALL getSelectionEnd (void) 401cdf0e10cSrcweir throw (cssu::RuntimeException); 402cdf0e10cSrcweir 403cdf0e10cSrcweir virtual sal_Bool SAL_CALL setSelection (sal_Int32 nStartIndex, sal_Int32 nEndIndex) 404cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, cssu::RuntimeException); 405cdf0e10cSrcweir 406cdf0e10cSrcweir virtual ::rtl::OUString SAL_CALL getText (void) 407cdf0e10cSrcweir throw (cssu::RuntimeException); 408cdf0e10cSrcweir 409cdf0e10cSrcweir virtual ::rtl::OUString SAL_CALL getTextRange ( 410cdf0e10cSrcweir sal_Int32 nStartIndex, 411cdf0e10cSrcweir sal_Int32 nEndIndex) 412cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, cssu::RuntimeException); 413cdf0e10cSrcweir 414cdf0e10cSrcweir virtual cssa::TextSegment SAL_CALL getTextAtIndex ( 415cdf0e10cSrcweir sal_Int32 nIndex, 416cdf0e10cSrcweir sal_Int16 nTextType) 417cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, 418cdf0e10cSrcweir css::lang::IllegalArgumentException, 419cdf0e10cSrcweir cssu::RuntimeException); 420cdf0e10cSrcweir 421cdf0e10cSrcweir virtual cssa::TextSegment SAL_CALL getTextBeforeIndex ( 422cdf0e10cSrcweir sal_Int32 nIndex, 423cdf0e10cSrcweir sal_Int16 nTextType) 424cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, 425cdf0e10cSrcweir css::lang::IllegalArgumentException, 426cdf0e10cSrcweir cssu::RuntimeException); 427cdf0e10cSrcweir 428cdf0e10cSrcweir virtual cssa::TextSegment SAL_CALL getTextBehindIndex ( 429cdf0e10cSrcweir sal_Int32 nIndex, 430cdf0e10cSrcweir sal_Int16 nTextType) 431cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, 432cdf0e10cSrcweir css::lang::IllegalArgumentException, 433cdf0e10cSrcweir cssu::RuntimeException); 434cdf0e10cSrcweir 435cdf0e10cSrcweir virtual ::sal_Bool SAL_CALL copyText (sal_Int32 nStartIndex, sal_Int32 nEndIndex) 436cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, cssu::RuntimeException); 437cdf0e10cSrcweir 438cdf0e10cSrcweir 439cdf0e10cSrcweir protected: 440cdf0e10cSrcweir virtual awt::Point GetRelativeLocation (void); 441cdf0e10cSrcweir virtual awt::Size GetSize (void); 442cdf0e10cSrcweir virtual awt::Point GetAbsoluteParentLocation (void); 443cdf0e10cSrcweir virtual bool GetWindowState (const sal_Int16 nType) const; 444cdf0e10cSrcweir 445cdf0e10cSrcweir private: 446cdf0e10cSrcweir SharedPresenterTextParagraph mpParagraph; 447cdf0e10cSrcweir const sal_Int32 mnParagraphIndex; 448cdf0e10cSrcweir }; 449cdf0e10cSrcweir 450cdf0e10cSrcweir 451cdf0e10cSrcweir 452cdf0e10cSrcweir 453cdf0e10cSrcweir //===== AccessibleConsole ===================================================== 454cdf0e10cSrcweir 455cdf0e10cSrcweir class AccessibleConsole 456cdf0e10cSrcweir { 457cdf0e10cSrcweir public: 458cdf0e10cSrcweir static rtl::Reference<PresenterAccessible::AccessibleObject> Create ( 459cdf0e10cSrcweir const css::uno::Reference<css::uno::XComponentContext>& rxContext, 460cdf0e10cSrcweir const lang::Locale aLocale) 461cdf0e10cSrcweir { 462cdf0e10cSrcweir OUString sName (A2S("Presenter Console")); 463cdf0e10cSrcweir PresenterConfigurationAccess aConfiguration ( 464cdf0e10cSrcweir rxContext, 465cdf0e10cSrcweir OUString::createFromAscii("/org.openoffice.Office.extension.PresenterScreen/"), 466cdf0e10cSrcweir PresenterConfigurationAccess::READ_ONLY); 467cdf0e10cSrcweir aConfiguration.GetConfigurationNode(A2S("Presenter/Accessibility/Console/String")) 468cdf0e10cSrcweir >>= sName; 469cdf0e10cSrcweir 470cdf0e10cSrcweir rtl::Reference<PresenterAccessible::AccessibleObject> pObject ( 471cdf0e10cSrcweir new PresenterAccessible::AccessibleObject( 472cdf0e10cSrcweir aLocale, AccessibleRole::PANEL, sName)); 473cdf0e10cSrcweir pObject->LateInitialization(); 474cdf0e10cSrcweir pObject->UpdateStateSet(); 475cdf0e10cSrcweir 476cdf0e10cSrcweir return pObject; 477cdf0e10cSrcweir } 478cdf0e10cSrcweir }; 479cdf0e10cSrcweir 480cdf0e10cSrcweir 481cdf0e10cSrcweir 482cdf0e10cSrcweir 483cdf0e10cSrcweir //===== AccessiblePreview ===================================================== 484cdf0e10cSrcweir 485cdf0e10cSrcweir class AccessiblePreview 486cdf0e10cSrcweir { 487cdf0e10cSrcweir public: 488cdf0e10cSrcweir static rtl::Reference<PresenterAccessible::AccessibleObject> Create ( 489cdf0e10cSrcweir const Reference<css::uno::XComponentContext>& rxContext, 490cdf0e10cSrcweir const lang::Locale aLocale, 491cdf0e10cSrcweir const Reference<awt::XWindow>& rxContentWindow, 492cdf0e10cSrcweir const Reference<awt::XWindow>& rxBorderWindow) 493cdf0e10cSrcweir { 494cdf0e10cSrcweir OUString sName (A2S("Presenter Notes Window")); 495cdf0e10cSrcweir { 496cdf0e10cSrcweir PresenterConfigurationAccess aConfiguration ( 497cdf0e10cSrcweir rxContext, 498cdf0e10cSrcweir OUString::createFromAscii("/org.openoffice.Office.extension.PresenterScreen/"), 499cdf0e10cSrcweir PresenterConfigurationAccess::READ_ONLY); 500cdf0e10cSrcweir aConfiguration.GetConfigurationNode(A2S("Presenter/Accessibility/Preview/String")) 501cdf0e10cSrcweir >>= sName; 502cdf0e10cSrcweir } 503cdf0e10cSrcweir 504cdf0e10cSrcweir rtl::Reference<PresenterAccessible::AccessibleObject> pObject ( 505cdf0e10cSrcweir new PresenterAccessible::AccessibleObject( 506cdf0e10cSrcweir aLocale, 507cdf0e10cSrcweir AccessibleRole::LABEL, 508cdf0e10cSrcweir sName)); 509cdf0e10cSrcweir pObject->LateInitialization(); 510cdf0e10cSrcweir pObject->UpdateStateSet(); 511cdf0e10cSrcweir pObject->SetWindow(rxContentWindow, rxBorderWindow); 512cdf0e10cSrcweir 513cdf0e10cSrcweir return pObject; 514cdf0e10cSrcweir } 515cdf0e10cSrcweir }; 516cdf0e10cSrcweir 517cdf0e10cSrcweir 518cdf0e10cSrcweir 519cdf0e10cSrcweir 520cdf0e10cSrcweir //===== AccessibleNotes ======================================================= 521cdf0e10cSrcweir 522cdf0e10cSrcweir class AccessibleNotes : public PresenterAccessible::AccessibleObject 523cdf0e10cSrcweir { 524cdf0e10cSrcweir public: 525cdf0e10cSrcweir AccessibleNotes ( 526cdf0e10cSrcweir const css::lang::Locale aLocale, 527cdf0e10cSrcweir const sal_Int16 nRole, 528cdf0e10cSrcweir const ::rtl::OUString& rsName); 529cdf0e10cSrcweir 530cdf0e10cSrcweir 531cdf0e10cSrcweir static rtl::Reference<PresenterAccessible::AccessibleObject> Create ( 532cdf0e10cSrcweir const css::uno::Reference<css::uno::XComponentContext>& rxContext, 533cdf0e10cSrcweir const lang::Locale aLocale, 534cdf0e10cSrcweir const Reference<awt::XWindow>& rxContentWindow, 535cdf0e10cSrcweir const Reference<awt::XWindow>& rxBorderWindow, 536cdf0e10cSrcweir const ::boost::shared_ptr<PresenterTextView>& rpTextView); 537cdf0e10cSrcweir 538cdf0e10cSrcweir void SetTextView (const ::boost::shared_ptr<PresenterTextView>& rpTextView); 539cdf0e10cSrcweir 540cdf0e10cSrcweir virtual void SetWindow ( 541cdf0e10cSrcweir const cssu::Reference<css::awt::XWindow>& rxContentWindow, 542cdf0e10cSrcweir const cssu::Reference<css::awt::XWindow>& rxBorderWindow); 543cdf0e10cSrcweir 544cdf0e10cSrcweir private: 545cdf0e10cSrcweir ::boost::shared_ptr<PresenterTextView> mpTextView; 546cdf0e10cSrcweir 547cdf0e10cSrcweir void NotifyCaretChange ( 548cdf0e10cSrcweir const sal_Int32 nOldParagraphIndex, 549cdf0e10cSrcweir const sal_Int32 nOldCharacterIndex, 550cdf0e10cSrcweir const sal_Int32 nNewParagraphIndex, 551cdf0e10cSrcweir const sal_Int32 nNewCharacterIndex); 552cdf0e10cSrcweir void HandleTextChange (void); 553cdf0e10cSrcweir }; 554cdf0e10cSrcweir 555cdf0e10cSrcweir 556cdf0e10cSrcweir 557cdf0e10cSrcweir 558cdf0e10cSrcweir //===== AccessibleFocusManager ================================================ 559cdf0e10cSrcweir 560cdf0e10cSrcweir /** A singleton class that makes sure that only one accessibility object in 561cdf0e10cSrcweir the PresenterConsole hierarchy has the focus. 562cdf0e10cSrcweir */ 563cdf0e10cSrcweir class AccessibleFocusManager 564cdf0e10cSrcweir { 565cdf0e10cSrcweir public: 566cdf0e10cSrcweir static ::boost::shared_ptr<AccessibleFocusManager> Instance (void); 567cdf0e10cSrcweir 568cdf0e10cSrcweir void AddFocusableObject (const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject); 569cdf0e10cSrcweir void RemoveFocusableObject (const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject); 570cdf0e10cSrcweir 571cdf0e10cSrcweir void FocusObject (const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject); 572cdf0e10cSrcweir 573cdf0e10cSrcweir private: 574cdf0e10cSrcweir static ::boost::shared_ptr<AccessibleFocusManager> mpInstance; 575cdf0e10cSrcweir ::std::vector<rtl::Reference<PresenterAccessible::AccessibleObject> > maFocusableObjects; 576cdf0e10cSrcweir 577cdf0e10cSrcweir AccessibleFocusManager (void); 578cdf0e10cSrcweir }; 579cdf0e10cSrcweir 580cdf0e10cSrcweir 581cdf0e10cSrcweir 582cdf0e10cSrcweir 583cdf0e10cSrcweir //===== PresenterAccessible =================================================== 584cdf0e10cSrcweir 585cdf0e10cSrcweir PresenterAccessible::PresenterAccessible ( 586cdf0e10cSrcweir const css::uno::Reference<css::uno::XComponentContext>& rxContext, 587cdf0e10cSrcweir const ::rtl::Reference<PresenterController>& rpPresenterController, 588cdf0e10cSrcweir const Reference<drawing::framework::XPane>& rxMainPane) 589cdf0e10cSrcweir : PresenterAccessibleInterfaceBase(m_aMutex), 590cdf0e10cSrcweir mxComponentContext(rxContext), 591cdf0e10cSrcweir mpPresenterController(rpPresenterController), 592cdf0e10cSrcweir mxMainPaneId(rxMainPane.is() ? rxMainPane->getResourceId() : Reference<XResourceId>()), 593cdf0e10cSrcweir mxMainPane(rxMainPane, UNO_QUERY), 594cdf0e10cSrcweir mxMainWindow(), 595cdf0e10cSrcweir mxPreviewContentWindow(), 596cdf0e10cSrcweir mxPreviewBorderWindow(), 597cdf0e10cSrcweir mxNotesContentWindow(), 598cdf0e10cSrcweir mxNotesBorderWindow(), 599cdf0e10cSrcweir mpAccessibleConsole(), 600cdf0e10cSrcweir mpAccessiblePreview(), 601cdf0e10cSrcweir mpAccessibleNotes(), 602cdf0e10cSrcweir mxAccessibleParent() 603cdf0e10cSrcweir { 604cdf0e10cSrcweir if (mxMainPane.is()) 605cdf0e10cSrcweir mxMainPane->setAccessible(this); 606cdf0e10cSrcweir } 607cdf0e10cSrcweir 608cdf0e10cSrcweir 609cdf0e10cSrcweir 610cdf0e10cSrcweir 611cdf0e10cSrcweir PresenterAccessible::~PresenterAccessible (void) 612cdf0e10cSrcweir { 613cdf0e10cSrcweir } 614cdf0e10cSrcweir 615cdf0e10cSrcweir 616cdf0e10cSrcweir 617cdf0e10cSrcweir 618cdf0e10cSrcweir PresenterPaneContainer::SharedPaneDescriptor PresenterAccessible::GetPreviewPane (void) const 619cdf0e10cSrcweir { 620cdf0e10cSrcweir PresenterPaneContainer::SharedPaneDescriptor pPreviewPane; 621cdf0e10cSrcweir 622cdf0e10cSrcweir if ( ! mpPresenterController.is()) 623cdf0e10cSrcweir return pPreviewPane; 624cdf0e10cSrcweir 625cdf0e10cSrcweir rtl::Reference<PresenterPaneContainer> pContainer (mpPresenterController->GetPaneContainer()); 626cdf0e10cSrcweir if ( ! pContainer.is()) 627cdf0e10cSrcweir return pPreviewPane; 628cdf0e10cSrcweir 629cdf0e10cSrcweir pPreviewPane = pContainer->FindPaneURL(PresenterPaneFactory::msCurrentSlidePreviewPaneURL); 630cdf0e10cSrcweir Reference<drawing::framework::XPane> xPreviewPane; 631cdf0e10cSrcweir if (pPreviewPane) 632cdf0e10cSrcweir xPreviewPane = pPreviewPane->mxPane.get(); 633cdf0e10cSrcweir if ( ! xPreviewPane.is()) 634cdf0e10cSrcweir { 635cdf0e10cSrcweir pPreviewPane = pContainer->FindPaneURL(PresenterPaneFactory::msSlideSorterPaneURL); 636cdf0e10cSrcweir } 637cdf0e10cSrcweir return pPreviewPane; 638cdf0e10cSrcweir } 639cdf0e10cSrcweir 640cdf0e10cSrcweir 641cdf0e10cSrcweir 642cdf0e10cSrcweir 643cdf0e10cSrcweir void PresenterAccessible::UpdateAccessibilityHierarchy (void) 644cdf0e10cSrcweir { 645cdf0e10cSrcweir if ( ! mpPresenterController.is()) 646cdf0e10cSrcweir return; 647cdf0e10cSrcweir 648cdf0e10cSrcweir Reference<drawing::framework::XConfigurationController> xConfigurationController( 649cdf0e10cSrcweir mpPresenterController->GetConfigurationController()); 650cdf0e10cSrcweir if ( ! xConfigurationController.is()) 651cdf0e10cSrcweir return; 652cdf0e10cSrcweir 653cdf0e10cSrcweir rtl::Reference<PresenterPaneContainer> pPaneContainer ( 654cdf0e10cSrcweir mpPresenterController->GetPaneContainer()); 655cdf0e10cSrcweir if ( ! pPaneContainer.is()) 656cdf0e10cSrcweir return; 657cdf0e10cSrcweir 658cdf0e10cSrcweir if ( ! mpAccessibleConsole.is()) 659cdf0e10cSrcweir return; 660cdf0e10cSrcweir 661cdf0e10cSrcweir // Get the preview pane (standard or notes view) or the slide overview 662cdf0e10cSrcweir // pane. 663cdf0e10cSrcweir PresenterPaneContainer::SharedPaneDescriptor pPreviewPane(GetPreviewPane()); 664cdf0e10cSrcweir Reference<drawing::framework::XPane> xPreviewPane; 665cdf0e10cSrcweir if (pPreviewPane) 666cdf0e10cSrcweir xPreviewPane = pPreviewPane->mxPane.get(); 667cdf0e10cSrcweir 668cdf0e10cSrcweir // Get the notes pane. 669cdf0e10cSrcweir PresenterPaneContainer::SharedPaneDescriptor pNotesPane( 670cdf0e10cSrcweir pPaneContainer->FindPaneURL(PresenterPaneFactory::msNotesPaneURL)); 671cdf0e10cSrcweir Reference<drawing::framework::XPane> xNotesPane; 672cdf0e10cSrcweir if (pNotesPane) 673cdf0e10cSrcweir xNotesPane = pNotesPane->mxPane.get(); 674cdf0e10cSrcweir 675cdf0e10cSrcweir // Get the notes view. 676cdf0e10cSrcweir Reference<drawing::framework::XView> xNotesView; 677cdf0e10cSrcweir if (pNotesPane) 678cdf0e10cSrcweir xNotesView = pNotesPane->mxView; 679cdf0e10cSrcweir rtl::Reference<PresenterNotesView> pNotesView ( 680cdf0e10cSrcweir dynamic_cast<PresenterNotesView*>(xNotesView.get())); 681cdf0e10cSrcweir 682cdf0e10cSrcweir UpdateAccessibilityHierarchy( 683cdf0e10cSrcweir pPreviewPane ? pPreviewPane->mxContentWindow : Reference<awt::XWindow>(), 684cdf0e10cSrcweir pPreviewPane ? pPreviewPane->mxBorderWindow : Reference<awt::XWindow>(), 685cdf0e10cSrcweir (pPreviewPane&&pPreviewPane->mxPane.is()) ? pPreviewPane->mxPane->GetTitle() : OUString(), 686cdf0e10cSrcweir pNotesPane ? pNotesPane->mxContentWindow : Reference<awt::XWindow>(), 687cdf0e10cSrcweir pNotesPane ? pNotesPane->mxBorderWindow : Reference<awt::XWindow>(), 688cdf0e10cSrcweir pNotesView.is() 689cdf0e10cSrcweir ? pNotesView->GetTextView() 690cdf0e10cSrcweir : ::boost::shared_ptr<PresenterTextView>()); 691cdf0e10cSrcweir } 692cdf0e10cSrcweir 693cdf0e10cSrcweir 694cdf0e10cSrcweir 695cdf0e10cSrcweir 696cdf0e10cSrcweir 697cdf0e10cSrcweir void PresenterAccessible::UpdateAccessibilityHierarchy ( 698cdf0e10cSrcweir const Reference<awt::XWindow>& rxPreviewContentWindow, 699cdf0e10cSrcweir const Reference<awt::XWindow>& rxPreviewBorderWindow, 700cdf0e10cSrcweir const ::rtl::OUString& rsTitle, 701cdf0e10cSrcweir const Reference<awt::XWindow>& rxNotesContentWindow, 702cdf0e10cSrcweir const Reference<awt::XWindow>& rxNotesBorderWindow, 703cdf0e10cSrcweir const ::boost::shared_ptr<PresenterTextView>& rpNotesTextView) 704cdf0e10cSrcweir { 705cdf0e10cSrcweir if ( ! mpAccessibleConsole.is()) 706cdf0e10cSrcweir return; 707cdf0e10cSrcweir 708cdf0e10cSrcweir if (mxPreviewContentWindow != rxPreviewContentWindow) 709cdf0e10cSrcweir { 710cdf0e10cSrcweir if (mpAccessiblePreview.is()) 711cdf0e10cSrcweir { 712cdf0e10cSrcweir mpAccessibleConsole->RemoveChild(mpAccessiblePreview); 713cdf0e10cSrcweir mpAccessiblePreview = NULL; 714cdf0e10cSrcweir } 715cdf0e10cSrcweir 716cdf0e10cSrcweir mxPreviewContentWindow = rxPreviewContentWindow; 717cdf0e10cSrcweir mxPreviewBorderWindow = rxPreviewBorderWindow; 718cdf0e10cSrcweir 719cdf0e10cSrcweir if (mxPreviewContentWindow.is()) 720cdf0e10cSrcweir { 721cdf0e10cSrcweir mpAccessiblePreview = AccessiblePreview::Create( 722cdf0e10cSrcweir mxComponentContext, 723cdf0e10cSrcweir lang::Locale(), 724cdf0e10cSrcweir mxPreviewContentWindow, 725cdf0e10cSrcweir mxPreviewBorderWindow); 726cdf0e10cSrcweir mpAccessibleConsole->AddChild(mpAccessiblePreview); 727cdf0e10cSrcweir mpAccessiblePreview->SetAccessibleName(rsTitle); 728cdf0e10cSrcweir } 729cdf0e10cSrcweir } 730cdf0e10cSrcweir 731cdf0e10cSrcweir if (mxNotesContentWindow != rxNotesContentWindow) 732cdf0e10cSrcweir { 733cdf0e10cSrcweir if (mpAccessibleNotes.is()) 734cdf0e10cSrcweir { 735cdf0e10cSrcweir mpAccessibleConsole->RemoveChild(mpAccessibleConsole.get()); 736cdf0e10cSrcweir mpAccessibleNotes = NULL; 737cdf0e10cSrcweir } 738cdf0e10cSrcweir 739cdf0e10cSrcweir mxNotesContentWindow = rxNotesContentWindow; 740cdf0e10cSrcweir mxNotesBorderWindow = rxNotesBorderWindow; 741cdf0e10cSrcweir 742cdf0e10cSrcweir if (mxNotesContentWindow.is()) 743cdf0e10cSrcweir { 744cdf0e10cSrcweir mpAccessibleNotes = AccessibleNotes::Create( 745cdf0e10cSrcweir mxComponentContext, 746cdf0e10cSrcweir lang::Locale(), 747cdf0e10cSrcweir mxNotesContentWindow, 748cdf0e10cSrcweir mxNotesBorderWindow, 749cdf0e10cSrcweir rpNotesTextView); 750cdf0e10cSrcweir mpAccessibleConsole->AddChild(mpAccessibleNotes.get()); 751cdf0e10cSrcweir } 752cdf0e10cSrcweir } 753cdf0e10cSrcweir } 754cdf0e10cSrcweir 755cdf0e10cSrcweir 756cdf0e10cSrcweir 757cdf0e10cSrcweir 758cdf0e10cSrcweir void PresenterAccessible::NotifyCurrentSlideChange ( 759cdf0e10cSrcweir const sal_Int32 nCurrentSlideIndex, 760cdf0e10cSrcweir const sal_Int32 nSlideCount) 761cdf0e10cSrcweir { 762cdf0e10cSrcweir (void)nCurrentSlideIndex; 763cdf0e10cSrcweir (void)nSlideCount; 764cdf0e10cSrcweir 765cdf0e10cSrcweir if (mpAccessiblePreview.is()) 766cdf0e10cSrcweir { 767cdf0e10cSrcweir PresenterPaneContainer::SharedPaneDescriptor pPreviewPane (GetPreviewPane()); 768cdf0e10cSrcweir mpAccessiblePreview->SetAccessibleName( 769cdf0e10cSrcweir (pPreviewPane&&pPreviewPane->mxPane.is() 770cdf0e10cSrcweir ? pPreviewPane->mxPane->GetTitle() 771cdf0e10cSrcweir : rtl::OUString())); 772cdf0e10cSrcweir } 773cdf0e10cSrcweir 774cdf0e10cSrcweir // Play some focus ping-pong to trigger AT tools. 775cdf0e10cSrcweir //AccessibleFocusManager::Instance()->FocusObject(mpAccessibleConsole); 776cdf0e10cSrcweir AccessibleFocusManager::Instance()->FocusObject(mpAccessiblePreview); 777cdf0e10cSrcweir } 778cdf0e10cSrcweir 779cdf0e10cSrcweir 780cdf0e10cSrcweir 781cdf0e10cSrcweir 782cdf0e10cSrcweir bool PresenterAccessible::IsAccessibilityActive (void) const 783cdf0e10cSrcweir { 784cdf0e10cSrcweir return mpAccessibleConsole.is(); 785cdf0e10cSrcweir } 786cdf0e10cSrcweir 787cdf0e10cSrcweir 788cdf0e10cSrcweir 789cdf0e10cSrcweir 790cdf0e10cSrcweir void SAL_CALL PresenterAccessible::disposing (void) 791cdf0e10cSrcweir { 792cdf0e10cSrcweir UpdateAccessibilityHierarchy( 793cdf0e10cSrcweir NULL, 794cdf0e10cSrcweir NULL, 795cdf0e10cSrcweir OUString(), 796cdf0e10cSrcweir NULL, 797cdf0e10cSrcweir NULL, 798cdf0e10cSrcweir ::boost::shared_ptr<PresenterTextView>()); 799cdf0e10cSrcweir 800cdf0e10cSrcweir if (mxMainWindow.is()) 801cdf0e10cSrcweir { 802cdf0e10cSrcweir mxMainWindow->removeFocusListener(this); 803cdf0e10cSrcweir 804cdf0e10cSrcweir if (mxMainPane.is()) 805cdf0e10cSrcweir mxMainPane->setAccessible(NULL); 806cdf0e10cSrcweir } 807cdf0e10cSrcweir 808cdf0e10cSrcweir mpAccessiblePreview = NULL; 809cdf0e10cSrcweir mpAccessibleNotes = NULL; 810cdf0e10cSrcweir mpAccessibleConsole = NULL; 811cdf0e10cSrcweir } 812cdf0e10cSrcweir 813cdf0e10cSrcweir 814cdf0e10cSrcweir 815cdf0e10cSrcweir 816cdf0e10cSrcweir //----- XAccessible ----------------------------------------------------------- 817cdf0e10cSrcweir 818cdf0e10cSrcweir Reference<XAccessibleContext> SAL_CALL PresenterAccessible::getAccessibleContext (void) 819cdf0e10cSrcweir throw (cssu::RuntimeException) 820cdf0e10cSrcweir { 821cdf0e10cSrcweir if ( ! mpAccessibleConsole.is()) 822cdf0e10cSrcweir { 823cdf0e10cSrcweir Reference<XPane> xMainPane (mxMainPane, UNO_QUERY); 824cdf0e10cSrcweir if (xMainPane.is()) 825cdf0e10cSrcweir { 826cdf0e10cSrcweir mxMainWindow = Reference<awt::XWindow>(xMainPane->getWindow(), UNO_QUERY); 827cdf0e10cSrcweir mxMainWindow->addFocusListener(this); 828cdf0e10cSrcweir } 829cdf0e10cSrcweir mpAccessibleConsole = AccessibleConsole::Create( 830cdf0e10cSrcweir mxComponentContext, css::lang::Locale()); 831cdf0e10cSrcweir mpAccessibleConsole->SetWindow(mxMainWindow, NULL); 832cdf0e10cSrcweir mpAccessibleConsole->SetAccessibleParent(mxAccessibleParent); 833cdf0e10cSrcweir UpdateAccessibilityHierarchy(); 834cdf0e10cSrcweir if (mpPresenterController.is()) 835cdf0e10cSrcweir mpPresenterController->SetAccessibilityActiveState(true); 836cdf0e10cSrcweir } 837cdf0e10cSrcweir return mpAccessibleConsole->getAccessibleContext(); 838cdf0e10cSrcweir } 839cdf0e10cSrcweir 840cdf0e10cSrcweir 841cdf0e10cSrcweir 842cdf0e10cSrcweir 843cdf0e10cSrcweir 844cdf0e10cSrcweir //----- XFocusListener ---------------------------------------------------- 845cdf0e10cSrcweir 846cdf0e10cSrcweir void SAL_CALL PresenterAccessible::focusGained (const css::awt::FocusEvent& rEvent) 847cdf0e10cSrcweir throw (cssu::RuntimeException) 848cdf0e10cSrcweir { 849cdf0e10cSrcweir (void)rEvent; 850cdf0e10cSrcweir 851cdf0e10cSrcweir #ifdef VERBOSE 852cdf0e10cSrcweir OSL_TRACE("PresenterAccessible::focusGained at %x and window %x\r", this, 853cdf0e10cSrcweir mxMainWindow.get()); 854cdf0e10cSrcweir #endif 855cdf0e10cSrcweir 856cdf0e10cSrcweir AccessibleFocusManager::Instance()->FocusObject(mpAccessibleConsole); 857cdf0e10cSrcweir } 858cdf0e10cSrcweir 859cdf0e10cSrcweir 860cdf0e10cSrcweir 861cdf0e10cSrcweir 862cdf0e10cSrcweir void SAL_CALL PresenterAccessible::focusLost (const css::awt::FocusEvent& rEvent) 863cdf0e10cSrcweir throw (cssu::RuntimeException) 864cdf0e10cSrcweir { 865cdf0e10cSrcweir (void)rEvent; 866cdf0e10cSrcweir 867cdf0e10cSrcweir #ifdef VERBOSE 868cdf0e10cSrcweir OSL_TRACE("PresenterAccessible::focusLost at %x\r", this); 869cdf0e10cSrcweir #endif 870cdf0e10cSrcweir 871cdf0e10cSrcweir AccessibleFocusManager::Instance()->FocusObject(NULL); 872cdf0e10cSrcweir } 873cdf0e10cSrcweir 874cdf0e10cSrcweir 875cdf0e10cSrcweir 876cdf0e10cSrcweir 877cdf0e10cSrcweir //----- XEventListener ---------------------------------------------------- 878cdf0e10cSrcweir 879cdf0e10cSrcweir void SAL_CALL PresenterAccessible::disposing (const css::lang::EventObject& rEvent) 880cdf0e10cSrcweir throw (cssu::RuntimeException) 881cdf0e10cSrcweir { 882cdf0e10cSrcweir if (rEvent.Source == mxMainWindow) 883cdf0e10cSrcweir mxMainWindow = NULL; 884cdf0e10cSrcweir } 885cdf0e10cSrcweir 886cdf0e10cSrcweir 887cdf0e10cSrcweir 888cdf0e10cSrcweir 889cdf0e10cSrcweir //----- XInitialize ----------------------------------------------------------- 890cdf0e10cSrcweir 891cdf0e10cSrcweir void SAL_CALL PresenterAccessible::initialize (const cssu::Sequence<cssu::Any>& rArguments) 892cdf0e10cSrcweir throw (cssu::RuntimeException) 893cdf0e10cSrcweir { 894cdf0e10cSrcweir if (rArguments.getLength() >= 1) 895cdf0e10cSrcweir { 896cdf0e10cSrcweir mxAccessibleParent = Reference<XAccessible>(rArguments[0], UNO_QUERY); 897cdf0e10cSrcweir if (mpAccessibleConsole.is()) 898cdf0e10cSrcweir mpAccessibleConsole->SetAccessibleParent(mxAccessibleParent); 899cdf0e10cSrcweir } 900cdf0e10cSrcweir } 901cdf0e10cSrcweir 902cdf0e10cSrcweir 903cdf0e10cSrcweir 904cdf0e10cSrcweir 905cdf0e10cSrcweir //===== PresenterAccessible::AccessibleObject ========================================= 906cdf0e10cSrcweir 907cdf0e10cSrcweir PresenterAccessible::AccessibleObject::AccessibleObject ( 908cdf0e10cSrcweir const lang::Locale aLocale, 909cdf0e10cSrcweir const sal_Int16 nRole, 910cdf0e10cSrcweir const OUString& rsName) 911cdf0e10cSrcweir : PresenterAccessibleObjectInterfaceBase(m_aMutex), 912cdf0e10cSrcweir msName(rsName), 913cdf0e10cSrcweir mxContentWindow(), 914cdf0e10cSrcweir mxBorderWindow(), 915cdf0e10cSrcweir maLocale(aLocale), 916cdf0e10cSrcweir mnRole(nRole), 917cdf0e10cSrcweir mnStateSet(0), 918cdf0e10cSrcweir mbIsFocused(false), 919cdf0e10cSrcweir mxParentAccessible(), 920cdf0e10cSrcweir maChildren(), 921cdf0e10cSrcweir maListeners() 922cdf0e10cSrcweir { 923cdf0e10cSrcweir } 924cdf0e10cSrcweir 925cdf0e10cSrcweir 926cdf0e10cSrcweir 927cdf0e10cSrcweir 928cdf0e10cSrcweir void PresenterAccessible::AccessibleObject::LateInitialization (void) 929cdf0e10cSrcweir { 930cdf0e10cSrcweir AccessibleFocusManager::Instance()->AddFocusableObject(this); 931cdf0e10cSrcweir } 932cdf0e10cSrcweir 933cdf0e10cSrcweir 934cdf0e10cSrcweir 935cdf0e10cSrcweir 936cdf0e10cSrcweir PresenterAccessible::AccessibleObject::~AccessibleObject (void) 937cdf0e10cSrcweir { 938cdf0e10cSrcweir } 939cdf0e10cSrcweir 940cdf0e10cSrcweir 941cdf0e10cSrcweir 942cdf0e10cSrcweir 943cdf0e10cSrcweir void PresenterAccessible::AccessibleObject::SetWindow ( 944cdf0e10cSrcweir const Reference<awt::XWindow>& rxContentWindow, 945cdf0e10cSrcweir const Reference<awt::XWindow>& rxBorderWindow) 946cdf0e10cSrcweir { 947cdf0e10cSrcweir Reference<awt::XWindow2> xContentWindow (rxContentWindow, UNO_QUERY); 948cdf0e10cSrcweir 949cdf0e10cSrcweir if (mxContentWindow.get() != xContentWindow.get()) 950cdf0e10cSrcweir { 951cdf0e10cSrcweir if (mxContentWindow.is()) 952cdf0e10cSrcweir { 953cdf0e10cSrcweir mxContentWindow->removeWindowListener(this); 954cdf0e10cSrcweir } 955cdf0e10cSrcweir 956cdf0e10cSrcweir mxContentWindow = xContentWindow; 957cdf0e10cSrcweir mxBorderWindow = Reference<awt::XWindow2>(rxBorderWindow, UNO_QUERY); 958cdf0e10cSrcweir 959cdf0e10cSrcweir if (mxContentWindow.is()) 960cdf0e10cSrcweir { 961cdf0e10cSrcweir mxContentWindow->addWindowListener(this); 962cdf0e10cSrcweir } 963cdf0e10cSrcweir 964cdf0e10cSrcweir UpdateStateSet(); 965cdf0e10cSrcweir } 966cdf0e10cSrcweir } 967cdf0e10cSrcweir 968cdf0e10cSrcweir 969cdf0e10cSrcweir 970cdf0e10cSrcweir 971cdf0e10cSrcweir void PresenterAccessible::AccessibleObject::SetAccessibleParent ( 972cdf0e10cSrcweir const Reference<XAccessible>& rxAccessibleParent) 973cdf0e10cSrcweir { 974cdf0e10cSrcweir mxParentAccessible = rxAccessibleParent; 975cdf0e10cSrcweir } 976cdf0e10cSrcweir 977cdf0e10cSrcweir 978cdf0e10cSrcweir 979cdf0e10cSrcweir 980cdf0e10cSrcweir void SAL_CALL PresenterAccessible::AccessibleObject::disposing (void) 981cdf0e10cSrcweir { 982cdf0e10cSrcweir AccessibleFocusManager::Instance()->RemoveFocusableObject(this); 983cdf0e10cSrcweir SetWindow(NULL, NULL); 984cdf0e10cSrcweir } 985cdf0e10cSrcweir 986cdf0e10cSrcweir 987cdf0e10cSrcweir 988cdf0e10cSrcweir 989cdf0e10cSrcweir //----- XAccessible ------------------------------------------------------- 990cdf0e10cSrcweir 991cdf0e10cSrcweir Reference<XAccessibleContext> SAL_CALL 992cdf0e10cSrcweir PresenterAccessible::AccessibleObject::getAccessibleContext (void) 993cdf0e10cSrcweir throw (RuntimeException) 994cdf0e10cSrcweir { 995cdf0e10cSrcweir ThrowIfDisposed(); 996cdf0e10cSrcweir 997cdf0e10cSrcweir return this; 998cdf0e10cSrcweir } 999cdf0e10cSrcweir 1000cdf0e10cSrcweir 1001cdf0e10cSrcweir 1002cdf0e10cSrcweir 1003cdf0e10cSrcweir //----- XAccessibleContext ---------------------------------------------- 1004cdf0e10cSrcweir 1005cdf0e10cSrcweir sal_Int32 SAL_CALL PresenterAccessible::AccessibleObject::getAccessibleChildCount (void) 1006cdf0e10cSrcweir throw (cssu::RuntimeException) 1007cdf0e10cSrcweir { 1008cdf0e10cSrcweir ThrowIfDisposed(); 1009cdf0e10cSrcweir 1010cdf0e10cSrcweir const sal_Int32 nChildCount (maChildren.size()); 1011cdf0e10cSrcweir 1012cdf0e10cSrcweir return nChildCount; 1013cdf0e10cSrcweir } 1014cdf0e10cSrcweir 1015cdf0e10cSrcweir 1016cdf0e10cSrcweir 1017cdf0e10cSrcweir 1018cdf0e10cSrcweir Reference<XAccessible> SAL_CALL 1019cdf0e10cSrcweir PresenterAccessible::AccessibleObject::getAccessibleChild (sal_Int32 nIndex) 1020cdf0e10cSrcweir throw (lang::IndexOutOfBoundsException, RuntimeException) 1021cdf0e10cSrcweir { 1022cdf0e10cSrcweir ThrowIfDisposed(); 1023cdf0e10cSrcweir 1024cdf0e10cSrcweir if (nIndex<0 || nIndex>=sal_Int32(maChildren.size())) 1025cdf0e10cSrcweir ThrowException("invalid child index", ET_IndexOutOfBounds); 1026cdf0e10cSrcweir 1027cdf0e10cSrcweir return Reference<XAccessible>(maChildren[nIndex].get()); 1028cdf0e10cSrcweir } 1029cdf0e10cSrcweir 1030cdf0e10cSrcweir 1031cdf0e10cSrcweir 1032cdf0e10cSrcweir 1033cdf0e10cSrcweir Reference<XAccessible> SAL_CALL 1034cdf0e10cSrcweir PresenterAccessible::AccessibleObject::getAccessibleParent (void) 1035cdf0e10cSrcweir throw (RuntimeException) 1036cdf0e10cSrcweir { 1037cdf0e10cSrcweir ThrowIfDisposed(); 1038cdf0e10cSrcweir 1039cdf0e10cSrcweir return mxParentAccessible; 1040cdf0e10cSrcweir } 1041cdf0e10cSrcweir 1042cdf0e10cSrcweir 1043cdf0e10cSrcweir 1044cdf0e10cSrcweir 1045cdf0e10cSrcweir sal_Int32 SAL_CALL 1046cdf0e10cSrcweir PresenterAccessible::AccessibleObject::getAccessibleIndexInParent (void) 1047cdf0e10cSrcweir throw (RuntimeException) 1048cdf0e10cSrcweir { 1049cdf0e10cSrcweir ThrowIfDisposed(); 1050cdf0e10cSrcweir 1051cdf0e10cSrcweir const Reference<XAccessible> xThis (this); 1052cdf0e10cSrcweir if (mxParentAccessible.is()) 1053cdf0e10cSrcweir { 1054cdf0e10cSrcweir const Reference<XAccessibleContext> xContext (mxParentAccessible->getAccessibleContext()); 1055cdf0e10cSrcweir for (sal_Int32 nIndex=0,nCount=xContext->getAccessibleChildCount(); 1056cdf0e10cSrcweir nIndex<nCount; 1057cdf0e10cSrcweir ++nIndex) 1058cdf0e10cSrcweir { 1059cdf0e10cSrcweir if (xContext->getAccessibleChild(nIndex) == xThis) 1060cdf0e10cSrcweir return nIndex; 1061cdf0e10cSrcweir } 1062cdf0e10cSrcweir } 1063cdf0e10cSrcweir 1064cdf0e10cSrcweir return 0; 1065cdf0e10cSrcweir } 1066cdf0e10cSrcweir 1067cdf0e10cSrcweir 1068cdf0e10cSrcweir 1069cdf0e10cSrcweir 1070cdf0e10cSrcweir sal_Int16 SAL_CALL 1071cdf0e10cSrcweir PresenterAccessible::AccessibleObject::getAccessibleRole (void) 1072cdf0e10cSrcweir throw (RuntimeException) 1073cdf0e10cSrcweir { 1074cdf0e10cSrcweir ThrowIfDisposed(); 1075cdf0e10cSrcweir 1076cdf0e10cSrcweir return mnRole; 1077cdf0e10cSrcweir } 1078cdf0e10cSrcweir 1079cdf0e10cSrcweir 1080cdf0e10cSrcweir 1081cdf0e10cSrcweir 1082cdf0e10cSrcweir OUString SAL_CALL 1083cdf0e10cSrcweir PresenterAccessible::AccessibleObject::getAccessibleDescription (void) 1084cdf0e10cSrcweir throw (RuntimeException) 1085cdf0e10cSrcweir { 1086cdf0e10cSrcweir ThrowIfDisposed(); 1087cdf0e10cSrcweir 1088cdf0e10cSrcweir return msName; 1089cdf0e10cSrcweir } 1090cdf0e10cSrcweir 1091cdf0e10cSrcweir 1092cdf0e10cSrcweir 1093cdf0e10cSrcweir 1094cdf0e10cSrcweir OUString SAL_CALL 1095cdf0e10cSrcweir PresenterAccessible::AccessibleObject::getAccessibleName (void) 1096cdf0e10cSrcweir throw (cssu::RuntimeException) 1097cdf0e10cSrcweir { 1098cdf0e10cSrcweir ThrowIfDisposed(); 1099cdf0e10cSrcweir 1100cdf0e10cSrcweir return msName; 1101cdf0e10cSrcweir } 1102cdf0e10cSrcweir 1103cdf0e10cSrcweir 1104cdf0e10cSrcweir 1105cdf0e10cSrcweir 1106cdf0e10cSrcweir Reference<XAccessibleRelationSet> SAL_CALL 1107cdf0e10cSrcweir PresenterAccessible::AccessibleObject::getAccessibleRelationSet (void) 1108cdf0e10cSrcweir throw (RuntimeException) 1109cdf0e10cSrcweir { 1110cdf0e10cSrcweir ThrowIfDisposed(); 1111cdf0e10cSrcweir 1112cdf0e10cSrcweir return NULL; 1113cdf0e10cSrcweir } 1114cdf0e10cSrcweir 1115cdf0e10cSrcweir 1116cdf0e10cSrcweir 1117cdf0e10cSrcweir 1118cdf0e10cSrcweir Reference<XAccessibleStateSet> SAL_CALL 1119cdf0e10cSrcweir PresenterAccessible::AccessibleObject::getAccessibleStateSet (void) 1120cdf0e10cSrcweir throw (RuntimeException) 1121cdf0e10cSrcweir { 1122cdf0e10cSrcweir ThrowIfDisposed(); 1123cdf0e10cSrcweir 1124cdf0e10cSrcweir return Reference<XAccessibleStateSet>(new AccessibleStateSet(mnStateSet)); 1125cdf0e10cSrcweir } 1126cdf0e10cSrcweir 1127cdf0e10cSrcweir 1128cdf0e10cSrcweir 1129cdf0e10cSrcweir 1130cdf0e10cSrcweir lang::Locale SAL_CALL 1131cdf0e10cSrcweir PresenterAccessible::AccessibleObject::getLocale (void) 1132cdf0e10cSrcweir throw (RuntimeException, 1133cdf0e10cSrcweir IllegalAccessibleComponentStateException) 1134cdf0e10cSrcweir { 1135cdf0e10cSrcweir ThrowIfDisposed(); 1136cdf0e10cSrcweir 1137cdf0e10cSrcweir if (mxParentAccessible.is()) 1138cdf0e10cSrcweir { 1139cdf0e10cSrcweir Reference<XAccessibleContext> xParentContext (mxParentAccessible->getAccessibleContext()); 1140cdf0e10cSrcweir if (xParentContext.is()) 1141cdf0e10cSrcweir return xParentContext->getLocale(); 1142cdf0e10cSrcweir } 1143cdf0e10cSrcweir return maLocale; 1144cdf0e10cSrcweir } 1145cdf0e10cSrcweir 1146cdf0e10cSrcweir 1147cdf0e10cSrcweir 1148cdf0e10cSrcweir 1149cdf0e10cSrcweir //----- XAccessibleComponent ------------------------------------------------ 1150cdf0e10cSrcweir 1151cdf0e10cSrcweir sal_Bool SAL_CALL PresenterAccessible::AccessibleObject::containsPoint ( 1152cdf0e10cSrcweir const awt::Point& rPoint) 1153cdf0e10cSrcweir throw (RuntimeException) 1154cdf0e10cSrcweir { 1155cdf0e10cSrcweir ThrowIfDisposed(); 1156cdf0e10cSrcweir 1157cdf0e10cSrcweir if (mxContentWindow.is()) 1158cdf0e10cSrcweir { 1159cdf0e10cSrcweir const awt::Rectangle aBox (getBounds()); 1160cdf0e10cSrcweir return rPoint.X>=aBox.X 1161cdf0e10cSrcweir && rPoint.Y>=aBox.Y 1162cdf0e10cSrcweir && rPoint.X<aBox.X+aBox.Width 1163cdf0e10cSrcweir && rPoint.Y<aBox.Y+aBox.Height; 1164cdf0e10cSrcweir } 1165cdf0e10cSrcweir else 1166cdf0e10cSrcweir return false; 1167cdf0e10cSrcweir } 1168cdf0e10cSrcweir 1169cdf0e10cSrcweir 1170cdf0e10cSrcweir 1171cdf0e10cSrcweir 1172cdf0e10cSrcweir Reference<XAccessible> SAL_CALL 1173cdf0e10cSrcweir PresenterAccessible::AccessibleObject::getAccessibleAtPoint (const awt::Point& rPoint) 1174cdf0e10cSrcweir throw (RuntimeException) 1175cdf0e10cSrcweir { 1176cdf0e10cSrcweir (void)rPoint; 1177cdf0e10cSrcweir ThrowIfDisposed(); 1178cdf0e10cSrcweir 1179cdf0e10cSrcweir return Reference<XAccessible>(); 1180cdf0e10cSrcweir } 1181cdf0e10cSrcweir 1182cdf0e10cSrcweir 1183cdf0e10cSrcweir 1184cdf0e10cSrcweir 1185cdf0e10cSrcweir awt::Rectangle SAL_CALL PresenterAccessible::AccessibleObject::getBounds (void) 1186cdf0e10cSrcweir throw (RuntimeException) 1187cdf0e10cSrcweir { 1188cdf0e10cSrcweir ThrowIfDisposed(); 1189cdf0e10cSrcweir 1190cdf0e10cSrcweir awt::Rectangle aBox; 1191cdf0e10cSrcweir 1192cdf0e10cSrcweir const awt::Point aLocation (GetRelativeLocation()); 1193cdf0e10cSrcweir const awt::Size aSize (GetSize()); 1194cdf0e10cSrcweir 1195cdf0e10cSrcweir return awt::Rectangle (aLocation.X, aLocation.Y, aSize.Width, aSize.Height); 1196cdf0e10cSrcweir } 1197cdf0e10cSrcweir 1198cdf0e10cSrcweir 1199cdf0e10cSrcweir 1200cdf0e10cSrcweir 1201cdf0e10cSrcweir awt::Point SAL_CALL PresenterAccessible::AccessibleObject::getLocation (void) 1202cdf0e10cSrcweir throw (RuntimeException) 1203cdf0e10cSrcweir { 1204cdf0e10cSrcweir ThrowIfDisposed(); 1205cdf0e10cSrcweir 1206cdf0e10cSrcweir const awt::Point aLocation (GetRelativeLocation()); 1207cdf0e10cSrcweir 1208cdf0e10cSrcweir return aLocation; 1209cdf0e10cSrcweir } 1210cdf0e10cSrcweir 1211cdf0e10cSrcweir 1212cdf0e10cSrcweir 1213cdf0e10cSrcweir 1214cdf0e10cSrcweir awt::Point SAL_CALL PresenterAccessible::AccessibleObject::getLocationOnScreen (void) 1215cdf0e10cSrcweir throw (RuntimeException) 1216cdf0e10cSrcweir { 1217cdf0e10cSrcweir ThrowIfDisposed(); 1218cdf0e10cSrcweir 1219cdf0e10cSrcweir awt::Point aRelativeLocation (GetRelativeLocation()); 1220cdf0e10cSrcweir awt::Point aParentLocationOnScreen (GetAbsoluteParentLocation()); 1221cdf0e10cSrcweir 1222cdf0e10cSrcweir return awt::Point( 1223cdf0e10cSrcweir aRelativeLocation.X + aParentLocationOnScreen.X, 1224cdf0e10cSrcweir aRelativeLocation.Y + aParentLocationOnScreen.Y); 1225cdf0e10cSrcweir } 1226cdf0e10cSrcweir 1227cdf0e10cSrcweir 1228cdf0e10cSrcweir 1229cdf0e10cSrcweir 1230cdf0e10cSrcweir awt::Size SAL_CALL PresenterAccessible::AccessibleObject::getSize (void) 1231cdf0e10cSrcweir throw (RuntimeException) 1232cdf0e10cSrcweir { 1233cdf0e10cSrcweir ThrowIfDisposed(); 1234cdf0e10cSrcweir 1235cdf0e10cSrcweir const awt::Size aSize (GetSize()); 1236cdf0e10cSrcweir 1237cdf0e10cSrcweir return aSize; 1238cdf0e10cSrcweir } 1239cdf0e10cSrcweir 1240cdf0e10cSrcweir 1241cdf0e10cSrcweir 1242cdf0e10cSrcweir 1243cdf0e10cSrcweir void SAL_CALL PresenterAccessible::AccessibleObject::grabFocus (void) 1244cdf0e10cSrcweir throw (RuntimeException) 1245cdf0e10cSrcweir { 1246cdf0e10cSrcweir ThrowIfDisposed(); 1247cdf0e10cSrcweir if (mxBorderWindow.is()) 1248cdf0e10cSrcweir mxBorderWindow->setFocus(); 1249cdf0e10cSrcweir else if (mxContentWindow.is()) 1250cdf0e10cSrcweir mxContentWindow->setFocus(); 1251cdf0e10cSrcweir } 1252cdf0e10cSrcweir 1253cdf0e10cSrcweir 1254cdf0e10cSrcweir 1255cdf0e10cSrcweir 1256cdf0e10cSrcweir sal_Int32 SAL_CALL PresenterAccessible::AccessibleObject::getForeground (void) 1257cdf0e10cSrcweir throw (RuntimeException) 1258cdf0e10cSrcweir { 1259cdf0e10cSrcweir ThrowIfDisposed(); 1260cdf0e10cSrcweir 1261cdf0e10cSrcweir return 0x00ffffff; 1262cdf0e10cSrcweir } 1263cdf0e10cSrcweir 1264cdf0e10cSrcweir 1265cdf0e10cSrcweir 1266cdf0e10cSrcweir 1267cdf0e10cSrcweir sal_Int32 SAL_CALL PresenterAccessible::AccessibleObject::getBackground (void) 1268cdf0e10cSrcweir throw (RuntimeException) 1269cdf0e10cSrcweir { 1270cdf0e10cSrcweir ThrowIfDisposed(); 1271cdf0e10cSrcweir 1272cdf0e10cSrcweir return 0x00000000; 1273cdf0e10cSrcweir } 1274cdf0e10cSrcweir 1275cdf0e10cSrcweir 1276cdf0e10cSrcweir 1277cdf0e10cSrcweir 1278cdf0e10cSrcweir //----- XAccessibleEventBroadcaster ------------------------------------------- 1279cdf0e10cSrcweir 1280cdf0e10cSrcweir void SAL_CALL PresenterAccessible::AccessibleObject::addEventListener ( 1281cdf0e10cSrcweir const Reference<XAccessibleEventListener>& rxListener) 1282cdf0e10cSrcweir throw (RuntimeException) 1283cdf0e10cSrcweir { 1284cdf0e10cSrcweir if (rxListener.is()) 1285cdf0e10cSrcweir { 1286cdf0e10cSrcweir const osl::MutexGuard aGuard(m_aMutex); 1287cdf0e10cSrcweir 1288cdf0e10cSrcweir if (IsDisposed()) 1289cdf0e10cSrcweir { 1290cdf0e10cSrcweir uno::Reference<uno::XInterface> xThis (static_cast<XWeak*>(this), UNO_QUERY); 1291cdf0e10cSrcweir rxListener->disposing (lang::EventObject(xThis)); 1292cdf0e10cSrcweir } 1293cdf0e10cSrcweir else 1294cdf0e10cSrcweir { 1295cdf0e10cSrcweir maListeners.push_back(rxListener); 1296cdf0e10cSrcweir } 1297cdf0e10cSrcweir } 1298cdf0e10cSrcweir } 1299cdf0e10cSrcweir 1300cdf0e10cSrcweir 1301cdf0e10cSrcweir 1302cdf0e10cSrcweir 1303cdf0e10cSrcweir void SAL_CALL PresenterAccessible::AccessibleObject::removeEventListener ( 1304cdf0e10cSrcweir const Reference<XAccessibleEventListener>& rxListener) 1305cdf0e10cSrcweir throw (RuntimeException) 1306cdf0e10cSrcweir { 1307cdf0e10cSrcweir ThrowIfDisposed(); 1308cdf0e10cSrcweir if (rxListener.is()) 1309cdf0e10cSrcweir { 1310cdf0e10cSrcweir const osl::MutexGuard aGuard(m_aMutex); 1311cdf0e10cSrcweir 1312cdf0e10cSrcweir maListeners.erase(std::remove(maListeners.begin(), maListeners.end(), rxListener)); 1313cdf0e10cSrcweir } 1314cdf0e10cSrcweir } 1315cdf0e10cSrcweir 1316cdf0e10cSrcweir 1317cdf0e10cSrcweir 1318cdf0e10cSrcweir 1319cdf0e10cSrcweir //----- XWindowListener --------------------------------------------------- 1320cdf0e10cSrcweir 1321cdf0e10cSrcweir void SAL_CALL PresenterAccessible::AccessibleObject::windowResized ( 1322cdf0e10cSrcweir const css::awt::WindowEvent& rEvent) 1323cdf0e10cSrcweir throw (cssu::RuntimeException) 1324cdf0e10cSrcweir { 1325cdf0e10cSrcweir (void)rEvent; 1326cdf0e10cSrcweir 1327cdf0e10cSrcweir FireAccessibleEvent(AccessibleEventId::BOUNDRECT_CHANGED, Any(), Any()); 1328cdf0e10cSrcweir } 1329cdf0e10cSrcweir 1330cdf0e10cSrcweir 1331cdf0e10cSrcweir 1332cdf0e10cSrcweir 1333cdf0e10cSrcweir void SAL_CALL PresenterAccessible::AccessibleObject::windowMoved ( 1334cdf0e10cSrcweir const css::awt::WindowEvent& rEvent) 1335cdf0e10cSrcweir throw (cssu::RuntimeException) 1336cdf0e10cSrcweir { 1337cdf0e10cSrcweir (void)rEvent; 1338cdf0e10cSrcweir 1339cdf0e10cSrcweir FireAccessibleEvent(AccessibleEventId::BOUNDRECT_CHANGED, Any(), Any()); 1340cdf0e10cSrcweir } 1341cdf0e10cSrcweir 1342cdf0e10cSrcweir 1343cdf0e10cSrcweir 1344cdf0e10cSrcweir 1345cdf0e10cSrcweir void SAL_CALL PresenterAccessible::AccessibleObject::windowShown ( 1346cdf0e10cSrcweir const css::lang::EventObject& rEvent) 1347cdf0e10cSrcweir throw (cssu::RuntimeException) 1348cdf0e10cSrcweir { 1349cdf0e10cSrcweir (void)rEvent; 1350cdf0e10cSrcweir UpdateStateSet(); 1351cdf0e10cSrcweir } 1352cdf0e10cSrcweir 1353cdf0e10cSrcweir 1354cdf0e10cSrcweir 1355cdf0e10cSrcweir 1356cdf0e10cSrcweir void SAL_CALL PresenterAccessible::AccessibleObject::windowHidden ( 1357cdf0e10cSrcweir const css::lang::EventObject& rEvent) 1358cdf0e10cSrcweir throw (cssu::RuntimeException) 1359cdf0e10cSrcweir { 1360cdf0e10cSrcweir (void)rEvent; 1361cdf0e10cSrcweir UpdateStateSet(); 1362cdf0e10cSrcweir } 1363cdf0e10cSrcweir 1364cdf0e10cSrcweir 1365cdf0e10cSrcweir 1366cdf0e10cSrcweir 1367cdf0e10cSrcweir //----- XEventListener -------------------------------------------------------- 1368cdf0e10cSrcweir 1369cdf0e10cSrcweir void SAL_CALL PresenterAccessible::AccessibleObject::disposing (const css::lang::EventObject& rEvent) 1370cdf0e10cSrcweir throw (cssu::RuntimeException) 1371cdf0e10cSrcweir { 1372cdf0e10cSrcweir if (rEvent.Source == mxContentWindow) 1373cdf0e10cSrcweir { 1374cdf0e10cSrcweir mxContentWindow = NULL; 1375cdf0e10cSrcweir mxBorderWindow = NULL; 1376cdf0e10cSrcweir } 1377cdf0e10cSrcweir else 1378cdf0e10cSrcweir { 1379cdf0e10cSrcweir SetWindow(NULL, NULL); 1380cdf0e10cSrcweir } 1381cdf0e10cSrcweir } 1382cdf0e10cSrcweir 1383cdf0e10cSrcweir 1384cdf0e10cSrcweir 1385cdf0e10cSrcweir 1386cdf0e10cSrcweir //----- private --------------------------------------------------------------- 1387cdf0e10cSrcweir 1388cdf0e10cSrcweir bool PresenterAccessible::AccessibleObject::GetWindowState (const sal_Int16 nType) const 1389cdf0e10cSrcweir { 1390cdf0e10cSrcweir switch (nType) 1391cdf0e10cSrcweir { 1392cdf0e10cSrcweir case AccessibleStateType::ENABLED: 1393cdf0e10cSrcweir return mxContentWindow.is() && mxContentWindow->isEnabled(); 1394cdf0e10cSrcweir 1395cdf0e10cSrcweir case AccessibleStateType::FOCUSABLE: 1396cdf0e10cSrcweir return true; 1397cdf0e10cSrcweir 1398cdf0e10cSrcweir case AccessibleStateType::FOCUSED: 1399cdf0e10cSrcweir return mbIsFocused; 1400cdf0e10cSrcweir 1401cdf0e10cSrcweir case AccessibleStateType::SHOWING: 1402cdf0e10cSrcweir return mxContentWindow.is() && mxContentWindow->isVisible(); 1403cdf0e10cSrcweir 1404cdf0e10cSrcweir default: 1405cdf0e10cSrcweir return false; 1406cdf0e10cSrcweir } 1407cdf0e10cSrcweir } 1408cdf0e10cSrcweir 1409cdf0e10cSrcweir 1410cdf0e10cSrcweir 1411cdf0e10cSrcweir 1412cdf0e10cSrcweir void PresenterAccessible::AccessibleObject::UpdateStateSet (void) 1413cdf0e10cSrcweir { 1414cdf0e10cSrcweir UpdateState(AccessibleStateType::FOCUSABLE, true); 1415cdf0e10cSrcweir UpdateState(AccessibleStateType::VISIBLE, true); 1416cdf0e10cSrcweir UpdateState(AccessibleStateType::ENABLED, true); 1417cdf0e10cSrcweir UpdateState(AccessibleStateType::MULTI_LINE, true); 1418cdf0e10cSrcweir UpdateState(AccessibleStateType::SENSITIVE, true); 1419cdf0e10cSrcweir 1420cdf0e10cSrcweir UpdateState(AccessibleStateType::ENABLED, GetWindowState(AccessibleStateType::ENABLED)); 1421cdf0e10cSrcweir UpdateState(AccessibleStateType::FOCUSED, GetWindowState(AccessibleStateType::FOCUSED)); 1422cdf0e10cSrcweir UpdateState(AccessibleStateType::SHOWING, GetWindowState(AccessibleStateType::SHOWING)); 1423cdf0e10cSrcweir // UpdateState(AccessibleStateType::ACTIVE, GetWindowState(AccessibleStateType::ACTIVE)); 1424cdf0e10cSrcweir } 1425cdf0e10cSrcweir 1426cdf0e10cSrcweir 1427cdf0e10cSrcweir 1428cdf0e10cSrcweir 1429cdf0e10cSrcweir void PresenterAccessible::AccessibleObject::UpdateState( 1430cdf0e10cSrcweir const sal_Int16 nState, 1431cdf0e10cSrcweir const bool bValue) 1432cdf0e10cSrcweir { 1433cdf0e10cSrcweir const sal_uInt32 nStateMask (AccessibleStateSet::GetStateMask(nState)); 1434cdf0e10cSrcweir if (((mnStateSet & nStateMask)!=0) != bValue) 1435cdf0e10cSrcweir { 1436cdf0e10cSrcweir if (bValue) 1437cdf0e10cSrcweir { 1438cdf0e10cSrcweir mnStateSet |= nStateMask; 1439cdf0e10cSrcweir FireAccessibleEvent(AccessibleEventId::STATE_CHANGED, Any(), Any(nState)); 1440cdf0e10cSrcweir } 1441cdf0e10cSrcweir else 1442cdf0e10cSrcweir { 1443cdf0e10cSrcweir mnStateSet &= ~nStateMask; 1444cdf0e10cSrcweir FireAccessibleEvent(AccessibleEventId::STATE_CHANGED, Any(nState), Any()); 1445cdf0e10cSrcweir } 1446cdf0e10cSrcweir } 1447cdf0e10cSrcweir } 1448cdf0e10cSrcweir 1449cdf0e10cSrcweir 1450cdf0e10cSrcweir 1451cdf0e10cSrcweir 1452cdf0e10cSrcweir void PresenterAccessible::AccessibleObject::AddChild ( 1453cdf0e10cSrcweir const ::rtl::Reference<AccessibleObject>& rpChild) 1454cdf0e10cSrcweir { 1455cdf0e10cSrcweir maChildren.push_back(rpChild); 1456cdf0e10cSrcweir rpChild->SetAccessibleParent(this); 1457cdf0e10cSrcweir FireAccessibleEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN, Any(), Any()); 1458cdf0e10cSrcweir } 1459cdf0e10cSrcweir 1460cdf0e10cSrcweir 1461cdf0e10cSrcweir 1462cdf0e10cSrcweir 1463cdf0e10cSrcweir void PresenterAccessible::AccessibleObject::RemoveChild ( 1464cdf0e10cSrcweir const ::rtl::Reference<AccessibleObject>& rpChild) 1465cdf0e10cSrcweir { 1466cdf0e10cSrcweir rpChild->SetAccessibleParent(Reference<XAccessible>()); 1467cdf0e10cSrcweir maChildren.erase(::std::find(maChildren.begin(), maChildren.end(), rpChild)); 1468cdf0e10cSrcweir FireAccessibleEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN, Any(), Any()); 1469cdf0e10cSrcweir } 1470cdf0e10cSrcweir 1471cdf0e10cSrcweir 1472cdf0e10cSrcweir 1473cdf0e10cSrcweir 1474cdf0e10cSrcweir void PresenterAccessible::AccessibleObject::SetIsFocused (const bool bIsFocused) 1475cdf0e10cSrcweir { 1476cdf0e10cSrcweir if (mbIsFocused != bIsFocused) 1477cdf0e10cSrcweir { 1478cdf0e10cSrcweir mbIsFocused = bIsFocused; 1479cdf0e10cSrcweir UpdateStateSet(); 1480cdf0e10cSrcweir } 1481cdf0e10cSrcweir } 1482cdf0e10cSrcweir 1483cdf0e10cSrcweir 1484cdf0e10cSrcweir 1485cdf0e10cSrcweir 1486cdf0e10cSrcweir void PresenterAccessible::AccessibleObject::SetAccessibleName (const ::rtl::OUString& rsName) 1487cdf0e10cSrcweir { 1488cdf0e10cSrcweir if (msName != rsName) 1489cdf0e10cSrcweir { 1490cdf0e10cSrcweir const OUString sOldName(msName); 1491cdf0e10cSrcweir msName = rsName; 1492cdf0e10cSrcweir FireAccessibleEvent(AccessibleEventId::NAME_CHANGED, Any(sOldName), Any(msName)); 1493cdf0e10cSrcweir } 1494cdf0e10cSrcweir } 1495cdf0e10cSrcweir 1496cdf0e10cSrcweir 1497cdf0e10cSrcweir 1498cdf0e10cSrcweir 1499cdf0e10cSrcweir void PresenterAccessible::AccessibleObject::FireAccessibleEvent ( 1500cdf0e10cSrcweir const sal_Int16 nEventId, 1501cdf0e10cSrcweir const uno::Any& rOldValue, 1502cdf0e10cSrcweir const uno::Any& rNewValue ) 1503cdf0e10cSrcweir { 1504cdf0e10cSrcweir AccessibleEventObject aEventObject; 1505cdf0e10cSrcweir 1506cdf0e10cSrcweir aEventObject.Source = Reference<XWeak>(this); 1507cdf0e10cSrcweir aEventObject.EventId = nEventId; 1508cdf0e10cSrcweir aEventObject.NewValue = rNewValue; 1509cdf0e10cSrcweir aEventObject.OldValue = rOldValue; 1510cdf0e10cSrcweir 1511cdf0e10cSrcweir ::std::vector<Reference<XAccessibleEventListener> > aListenerCopy(maListeners); 1512cdf0e10cSrcweir for (::std::vector<Reference<XAccessibleEventListener> >::const_iterator 1513cdf0e10cSrcweir iListener(aListenerCopy.begin()), 1514cdf0e10cSrcweir iEnd(aListenerCopy.end()); 1515cdf0e10cSrcweir iListener!=iEnd; 1516cdf0e10cSrcweir ++iListener) 1517cdf0e10cSrcweir { 1518cdf0e10cSrcweir try 1519cdf0e10cSrcweir { 1520cdf0e10cSrcweir (*iListener)->notifyEvent(aEventObject); 1521cdf0e10cSrcweir } 1522cdf0e10cSrcweir catch(lang::DisposedException&) 1523cdf0e10cSrcweir { 1524cdf0e10cSrcweir // Listener has been disposed and should have been removed 1525cdf0e10cSrcweir // already. 1526cdf0e10cSrcweir removeEventListener(*iListener); 1527cdf0e10cSrcweir } 1528cdf0e10cSrcweir catch(Exception&) 1529cdf0e10cSrcweir { 1530cdf0e10cSrcweir // Ignore all other exceptions and assume that they are 1531cdf0e10cSrcweir // caused by a temporary problem. 1532cdf0e10cSrcweir } 1533cdf0e10cSrcweir } 1534cdf0e10cSrcweir } 1535cdf0e10cSrcweir 1536cdf0e10cSrcweir 1537cdf0e10cSrcweir 1538cdf0e10cSrcweir awt::Point PresenterAccessible::AccessibleObject::GetRelativeLocation (void) 1539cdf0e10cSrcweir { 1540cdf0e10cSrcweir awt::Point aLocation; 1541cdf0e10cSrcweir if (mxContentWindow.is()) 1542cdf0e10cSrcweir { 1543cdf0e10cSrcweir const awt::Rectangle aContentBox (mxContentWindow->getPosSize()); 1544cdf0e10cSrcweir aLocation.X = aContentBox.X; 1545cdf0e10cSrcweir aLocation.Y = aContentBox.Y; 1546cdf0e10cSrcweir if (mxBorderWindow.is()) 1547cdf0e10cSrcweir { 1548cdf0e10cSrcweir const awt::Rectangle aBorderBox (mxBorderWindow->getPosSize()); 1549cdf0e10cSrcweir aLocation.X += aBorderBox.X; 1550cdf0e10cSrcweir aLocation.Y += aBorderBox.Y; 1551cdf0e10cSrcweir } 1552cdf0e10cSrcweir } 1553cdf0e10cSrcweir return aLocation; 1554cdf0e10cSrcweir } 1555cdf0e10cSrcweir 1556cdf0e10cSrcweir 1557cdf0e10cSrcweir 1558cdf0e10cSrcweir 1559cdf0e10cSrcweir awt::Size PresenterAccessible::AccessibleObject::GetSize (void) 1560cdf0e10cSrcweir { 1561cdf0e10cSrcweir if (mxContentWindow.is()) 1562cdf0e10cSrcweir { 1563cdf0e10cSrcweir const awt::Rectangle aBox (mxContentWindow->getPosSize()); 1564cdf0e10cSrcweir return awt::Size(aBox.Width, aBox.Height); 1565cdf0e10cSrcweir } 1566cdf0e10cSrcweir else 1567cdf0e10cSrcweir return awt::Size(); 1568cdf0e10cSrcweir } 1569cdf0e10cSrcweir 1570cdf0e10cSrcweir 1571cdf0e10cSrcweir 1572cdf0e10cSrcweir 1573cdf0e10cSrcweir awt::Point PresenterAccessible::AccessibleObject::GetAbsoluteParentLocation (void) 1574cdf0e10cSrcweir { 1575cdf0e10cSrcweir Reference<XAccessibleComponent> xParentComponent; 1576cdf0e10cSrcweir if (mxParentAccessible.is()) 1577cdf0e10cSrcweir xParentComponent = Reference<XAccessibleComponent>( 1578cdf0e10cSrcweir mxParentAccessible->getAccessibleContext(), UNO_QUERY); 1579cdf0e10cSrcweir if (xParentComponent.is()) 1580cdf0e10cSrcweir return xParentComponent->getLocationOnScreen(); 1581cdf0e10cSrcweir else 1582cdf0e10cSrcweir return awt::Point(); 1583cdf0e10cSrcweir } 1584cdf0e10cSrcweir 1585cdf0e10cSrcweir 1586cdf0e10cSrcweir 1587cdf0e10cSrcweir 1588cdf0e10cSrcweir sal_Bool PresenterAccessible::AccessibleObject::IsDisposed (void) const 1589cdf0e10cSrcweir { 1590cdf0e10cSrcweir return (rBHelper.bDisposed || rBHelper.bInDispose); 1591cdf0e10cSrcweir } 1592cdf0e10cSrcweir 1593cdf0e10cSrcweir 1594cdf0e10cSrcweir 1595cdf0e10cSrcweir 1596cdf0e10cSrcweir void PresenterAccessible::AccessibleObject::ThrowIfDisposed (void) const 1597cdf0e10cSrcweir throw (lang::DisposedException) 1598cdf0e10cSrcweir { 1599cdf0e10cSrcweir if (rBHelper.bDisposed || rBHelper.bInDispose) 1600cdf0e10cSrcweir ThrowException("object has already been disposed", ET_Disposed); 1601cdf0e10cSrcweir } 1602cdf0e10cSrcweir 1603cdf0e10cSrcweir 1604cdf0e10cSrcweir 1605cdf0e10cSrcweir 1606cdf0e10cSrcweir void PresenterAccessible::AccessibleObject::ThrowException ( 1607cdf0e10cSrcweir const sal_Char* pMessage, 1608cdf0e10cSrcweir const ExceptionType eExceptionType) const 1609cdf0e10cSrcweir { 1610cdf0e10cSrcweir const OUString sMessage (OUString(A2S("PresenterAccessible: ")) + OUString(A2S(pMessage))); 1611cdf0e10cSrcweir const Reference<XInterface> xObject ( 1612cdf0e10cSrcweir const_cast<uno::XWeak*>(static_cast<const uno::XWeak*>(this))); 1613cdf0e10cSrcweir switch (eExceptionType) 1614cdf0e10cSrcweir { 1615cdf0e10cSrcweir default: 1616cdf0e10cSrcweir case ET_Runtime: 1617cdf0e10cSrcweir throw RuntimeException(sMessage, xObject); 1618cdf0e10cSrcweir case ET_Disposed: 1619cdf0e10cSrcweir throw lang::DisposedException(sMessage, xObject); 1620cdf0e10cSrcweir case ET_IndexOutOfBounds: 1621cdf0e10cSrcweir throw lang::IndexOutOfBoundsException(sMessage, xObject); 1622cdf0e10cSrcweir } 1623cdf0e10cSrcweir } 1624cdf0e10cSrcweir 1625cdf0e10cSrcweir 1626cdf0e10cSrcweir 1627cdf0e10cSrcweir 1628cdf0e10cSrcweir 1629cdf0e10cSrcweir //===== AccessibleStateSet ==================================================== 1630cdf0e10cSrcweir 1631cdf0e10cSrcweir AccessibleStateSet::AccessibleStateSet (const sal_Int32 nStateSet) 1632cdf0e10cSrcweir : AccessibleStateSetInterfaceBase(m_aMutex), 1633cdf0e10cSrcweir mnStateSet (nStateSet) 1634cdf0e10cSrcweir { 1635cdf0e10cSrcweir } 1636cdf0e10cSrcweir 1637cdf0e10cSrcweir 1638cdf0e10cSrcweir 1639cdf0e10cSrcweir 1640cdf0e10cSrcweir AccessibleStateSet::~AccessibleStateSet (void) 1641cdf0e10cSrcweir { 1642cdf0e10cSrcweir } 1643cdf0e10cSrcweir 1644cdf0e10cSrcweir 1645cdf0e10cSrcweir 1646cdf0e10cSrcweir 1647cdf0e10cSrcweir sal_uInt32 AccessibleStateSet::GetStateMask (const sal_Int16 nState) 1648cdf0e10cSrcweir { 1649cdf0e10cSrcweir if (nState<0 || nState>=sal_Int16(sizeof(sal_uInt32)*8)) 1650cdf0e10cSrcweir { 1651cdf0e10cSrcweir throw RuntimeException(A2S("AccessibleStateSet::GetStateMask: invalid state"), NULL); 1652cdf0e10cSrcweir } 1653cdf0e10cSrcweir 1654cdf0e10cSrcweir return 1<<nState; 1655cdf0e10cSrcweir } 1656cdf0e10cSrcweir 1657cdf0e10cSrcweir 1658cdf0e10cSrcweir 1659cdf0e10cSrcweir 1660cdf0e10cSrcweir //----- XAccessibleStateSet --------------------------------------------------- 1661cdf0e10cSrcweir 1662cdf0e10cSrcweir sal_Bool SAL_CALL AccessibleStateSet::isEmpty (void) 1663cdf0e10cSrcweir throw (cssu::RuntimeException) 1664cdf0e10cSrcweir { 1665cdf0e10cSrcweir return mnStateSet==0; 1666cdf0e10cSrcweir } 1667cdf0e10cSrcweir 1668cdf0e10cSrcweir 1669cdf0e10cSrcweir 1670cdf0e10cSrcweir 1671cdf0e10cSrcweir sal_Bool SAL_CALL AccessibleStateSet::contains (sal_Int16 nState) 1672cdf0e10cSrcweir throw (cssu::RuntimeException) 1673cdf0e10cSrcweir { 1674cdf0e10cSrcweir return (mnStateSet & GetStateMask(nState)) != 0; 1675cdf0e10cSrcweir } 1676cdf0e10cSrcweir 1677cdf0e10cSrcweir 1678cdf0e10cSrcweir 1679cdf0e10cSrcweir 1680cdf0e10cSrcweir sal_Bool SAL_CALL AccessibleStateSet::containsAll (const cssu::Sequence<sal_Int16>& rStateSet) 1681cdf0e10cSrcweir throw (cssu::RuntimeException) 1682cdf0e10cSrcweir { 1683cdf0e10cSrcweir for (sal_Int32 nIndex=0,nCount=rStateSet.getLength(); nIndex<nCount; ++nIndex) 1684cdf0e10cSrcweir { 1685cdf0e10cSrcweir if ((mnStateSet & GetStateMask(rStateSet[nIndex])) == 0) 1686cdf0e10cSrcweir return sal_False; 1687cdf0e10cSrcweir } 1688cdf0e10cSrcweir return sal_True; 1689cdf0e10cSrcweir } 1690cdf0e10cSrcweir 1691cdf0e10cSrcweir 1692cdf0e10cSrcweir 1693cdf0e10cSrcweir 1694cdf0e10cSrcweir cssu::Sequence<sal_Int16> SAL_CALL AccessibleStateSet::getStates (void) 1695cdf0e10cSrcweir throw (cssu::RuntimeException) 1696cdf0e10cSrcweir { 1697cdf0e10cSrcweir ::std::vector<sal_Int16> aStates; 1698cdf0e10cSrcweir aStates.reserve(sizeof(mnStateSet)*8); 1699cdf0e10cSrcweir for (sal_uInt16 nIndex=0; nIndex<sizeof(mnStateSet)*8; ++nIndex) 1700cdf0e10cSrcweir if ((mnStateSet & GetStateMask(nIndex)) != 0) 1701cdf0e10cSrcweir aStates.push_back(nIndex); 1702cdf0e10cSrcweir return Sequence<sal_Int16>(&aStates.front(), aStates.size()); 1703cdf0e10cSrcweir } 1704cdf0e10cSrcweir 1705cdf0e10cSrcweir 1706cdf0e10cSrcweir 1707cdf0e10cSrcweir 1708cdf0e10cSrcweir //===== AccessibleRelationSet ================================================= 1709cdf0e10cSrcweir 1710cdf0e10cSrcweir AccessibleRelationSet::AccessibleRelationSet (void) 1711cdf0e10cSrcweir : AccessibleRelationSetInterfaceBase(m_aMutex), 1712cdf0e10cSrcweir maRelations() 1713cdf0e10cSrcweir { 1714cdf0e10cSrcweir } 1715cdf0e10cSrcweir 1716cdf0e10cSrcweir 1717cdf0e10cSrcweir 1718cdf0e10cSrcweir 1719cdf0e10cSrcweir AccessibleRelationSet::~AccessibleRelationSet (void) 1720cdf0e10cSrcweir { 1721cdf0e10cSrcweir } 1722cdf0e10cSrcweir 1723cdf0e10cSrcweir 1724cdf0e10cSrcweir 1725cdf0e10cSrcweir 1726cdf0e10cSrcweir void AccessibleRelationSet::AddRelation ( 1727cdf0e10cSrcweir const sal_Int16 nRelationType, 1728cdf0e10cSrcweir const Reference<XInterface>& rxObject) 1729cdf0e10cSrcweir { 1730cdf0e10cSrcweir maRelations.resize(maRelations.size()+1); 1731cdf0e10cSrcweir maRelations.back().RelationType = nRelationType; 1732cdf0e10cSrcweir maRelations.back().TargetSet.realloc(1); 1733cdf0e10cSrcweir maRelations.back().TargetSet[0] = rxObject; 1734cdf0e10cSrcweir } 1735cdf0e10cSrcweir 1736cdf0e10cSrcweir 1737cdf0e10cSrcweir 1738cdf0e10cSrcweir 1739cdf0e10cSrcweir //----- XAccessibleRelationSet ------------------------------------------------ 1740cdf0e10cSrcweir 1741cdf0e10cSrcweir sal_Int32 SAL_CALL AccessibleRelationSet::getRelationCount (void) 1742cdf0e10cSrcweir throw (cssu::RuntimeException) 1743cdf0e10cSrcweir { 1744cdf0e10cSrcweir return maRelations.size(); 1745cdf0e10cSrcweir } 1746cdf0e10cSrcweir 1747cdf0e10cSrcweir 1748cdf0e10cSrcweir 1749cdf0e10cSrcweir 1750cdf0e10cSrcweir AccessibleRelation SAL_CALL AccessibleRelationSet::getRelation (sal_Int32 nIndex) 1751cdf0e10cSrcweir throw (cssu::RuntimeException, css::lang::IndexOutOfBoundsException) 1752cdf0e10cSrcweir { 1753cdf0e10cSrcweir if (nIndex<0 && sal_uInt32(nIndex)>=maRelations.size()) 1754cdf0e10cSrcweir return AccessibleRelation(); 1755cdf0e10cSrcweir else 1756cdf0e10cSrcweir return maRelations[nIndex]; 1757cdf0e10cSrcweir } 1758cdf0e10cSrcweir 1759cdf0e10cSrcweir 1760cdf0e10cSrcweir 1761cdf0e10cSrcweir 1762cdf0e10cSrcweir sal_Bool SAL_CALL AccessibleRelationSet::containsRelation (sal_Int16 nRelationType) 1763cdf0e10cSrcweir throw (cssu::RuntimeException) 1764cdf0e10cSrcweir { 1765cdf0e10cSrcweir for (::std::vector<AccessibleRelation>::const_iterator iRelation(maRelations.begin()); 1766cdf0e10cSrcweir iRelation!=maRelations.end(); 1767cdf0e10cSrcweir ++iRelation) 1768cdf0e10cSrcweir { 1769cdf0e10cSrcweir if (iRelation->RelationType == nRelationType) 1770cdf0e10cSrcweir return sal_True; 1771cdf0e10cSrcweir } 1772cdf0e10cSrcweir return sal_False; 1773cdf0e10cSrcweir } 1774cdf0e10cSrcweir 1775cdf0e10cSrcweir 1776cdf0e10cSrcweir 1777cdf0e10cSrcweir 1778cdf0e10cSrcweir AccessibleRelation SAL_CALL AccessibleRelationSet::getRelationByType (sal_Int16 nRelationType) 1779cdf0e10cSrcweir throw (cssu::RuntimeException) 1780cdf0e10cSrcweir { 1781cdf0e10cSrcweir for (::std::vector<AccessibleRelation>::const_iterator iRelation(maRelations.begin()); 1782cdf0e10cSrcweir iRelation!=maRelations.end(); 1783cdf0e10cSrcweir ++iRelation) 1784cdf0e10cSrcweir { 1785cdf0e10cSrcweir if (iRelation->RelationType == nRelationType) 1786cdf0e10cSrcweir return *iRelation; 1787cdf0e10cSrcweir } 1788cdf0e10cSrcweir return AccessibleRelation(); 1789cdf0e10cSrcweir } 1790cdf0e10cSrcweir 1791cdf0e10cSrcweir 1792cdf0e10cSrcweir 1793cdf0e10cSrcweir 1794cdf0e10cSrcweir //===== PresenterAccessible::AccessibleParagraph ============================== 1795cdf0e10cSrcweir 1796cdf0e10cSrcweir PresenterAccessible::AccessibleParagraph::AccessibleParagraph ( 1797cdf0e10cSrcweir const lang::Locale aLocale, 1798cdf0e10cSrcweir const sal_Int16 nRole, 1799cdf0e10cSrcweir const OUString& rsName, 1800cdf0e10cSrcweir const SharedPresenterTextParagraph& rpParagraph, 1801cdf0e10cSrcweir const sal_Int32 nParagraphIndex) 1802cdf0e10cSrcweir : PresenterAccessibleParagraphInterfaceBase(aLocale, nRole, rsName), 1803cdf0e10cSrcweir mpParagraph(rpParagraph), 1804cdf0e10cSrcweir mnParagraphIndex(nParagraphIndex) 1805cdf0e10cSrcweir { 1806cdf0e10cSrcweir } 1807cdf0e10cSrcweir 1808cdf0e10cSrcweir 1809cdf0e10cSrcweir 1810cdf0e10cSrcweir 1811cdf0e10cSrcweir PresenterAccessible::AccessibleParagraph::~AccessibleParagraph (void) 1812cdf0e10cSrcweir { 1813cdf0e10cSrcweir } 1814cdf0e10cSrcweir 1815cdf0e10cSrcweir 1816cdf0e10cSrcweir 1817cdf0e10cSrcweir 1818cdf0e10cSrcweir //----- XAccessibleContext ---------------------------------------------------- 1819cdf0e10cSrcweir 1820cdf0e10cSrcweir Reference<XAccessibleRelationSet> SAL_CALL 1821cdf0e10cSrcweir PresenterAccessible::AccessibleParagraph::getAccessibleRelationSet (void) 1822cdf0e10cSrcweir throw (RuntimeException) 1823cdf0e10cSrcweir { 1824cdf0e10cSrcweir ThrowIfDisposed(); 1825cdf0e10cSrcweir 1826cdf0e10cSrcweir rtl::Reference<AccessibleRelationSet> pSet (new AccessibleRelationSet); 1827cdf0e10cSrcweir 1828cdf0e10cSrcweir if (mxParentAccessible.is()) 1829cdf0e10cSrcweir { 1830cdf0e10cSrcweir Reference<XAccessibleContext> xParentContext (mxParentAccessible->getAccessibleContext()); 1831cdf0e10cSrcweir if (xParentContext.is()) 1832cdf0e10cSrcweir { 1833cdf0e10cSrcweir if (mnParagraphIndex>0) 1834cdf0e10cSrcweir pSet->AddRelation( 1835cdf0e10cSrcweir AccessibleRelationType::CONTENT_FLOWS_FROM, 1836cdf0e10cSrcweir xParentContext->getAccessibleChild(mnParagraphIndex-1)); 1837cdf0e10cSrcweir 1838cdf0e10cSrcweir if (mnParagraphIndex<xParentContext->getAccessibleChildCount()-1) 1839cdf0e10cSrcweir pSet->AddRelation( 1840cdf0e10cSrcweir AccessibleRelationType::CONTENT_FLOWS_TO, 1841cdf0e10cSrcweir xParentContext->getAccessibleChild(mnParagraphIndex+1)); 1842cdf0e10cSrcweir } 1843cdf0e10cSrcweir } 1844cdf0e10cSrcweir 1845cdf0e10cSrcweir return Reference<XAccessibleRelationSet>(pSet.get()); 1846cdf0e10cSrcweir } 1847cdf0e10cSrcweir 1848cdf0e10cSrcweir 1849cdf0e10cSrcweir 1850cdf0e10cSrcweir 1851cdf0e10cSrcweir 1852cdf0e10cSrcweir 1853cdf0e10cSrcweir //----- XAccessibleText ------------------------------------------------------- 1854cdf0e10cSrcweir 1855cdf0e10cSrcweir sal_Int32 SAL_CALL PresenterAccessible::AccessibleParagraph::getCaretPosition (void) 1856cdf0e10cSrcweir throw (cssu::RuntimeException) 1857cdf0e10cSrcweir { 1858cdf0e10cSrcweir ThrowIfDisposed(); 1859cdf0e10cSrcweir 1860cdf0e10cSrcweir sal_Int32 nPosition (-1); 1861cdf0e10cSrcweir if (mpParagraph) 1862cdf0e10cSrcweir nPosition = mpParagraph->GetCaretPosition(); 1863cdf0e10cSrcweir 1864cdf0e10cSrcweir return nPosition; 1865cdf0e10cSrcweir } 1866cdf0e10cSrcweir 1867cdf0e10cSrcweir 1868cdf0e10cSrcweir 1869cdf0e10cSrcweir 1870cdf0e10cSrcweir sal_Bool SAL_CALL PresenterAccessible::AccessibleParagraph::setCaretPosition (sal_Int32 nIndex) 1871cdf0e10cSrcweir throw (::com::sun::star::lang::IndexOutOfBoundsException, cssu::RuntimeException) 1872cdf0e10cSrcweir { 1873cdf0e10cSrcweir ThrowIfDisposed(); 1874cdf0e10cSrcweir 1875cdf0e10cSrcweir if (mpParagraph) 1876cdf0e10cSrcweir { 1877cdf0e10cSrcweir mpParagraph->SetCaretPosition(nIndex); 1878cdf0e10cSrcweir return sal_True; 1879cdf0e10cSrcweir } 1880cdf0e10cSrcweir else 1881cdf0e10cSrcweir return sal_False; 1882cdf0e10cSrcweir } 1883cdf0e10cSrcweir 1884cdf0e10cSrcweir 1885cdf0e10cSrcweir 1886cdf0e10cSrcweir 1887cdf0e10cSrcweir sal_Unicode SAL_CALL PresenterAccessible::AccessibleParagraph::getCharacter (sal_Int32 nIndex) 1888cdf0e10cSrcweir throw (::com::sun::star::lang::IndexOutOfBoundsException, cssu::RuntimeException) 1889cdf0e10cSrcweir { 1890cdf0e10cSrcweir ThrowIfDisposed(); 1891cdf0e10cSrcweir 1892cdf0e10cSrcweir if (mpParagraph) 1893cdf0e10cSrcweir return mpParagraph->GetCharacter(nIndex); 1894cdf0e10cSrcweir else 1895cdf0e10cSrcweir { 1896cdf0e10cSrcweir ThrowException("no text support in current mode", ET_IndexOutOfBounds); 1897cdf0e10cSrcweir // The method above throws an exception and the following line is 1898cdf0e10cSrcweir // never reached. But there is at least one compiler that can not 1899cdf0e10cSrcweir // detect this and we need the return to make it happy. 1900cdf0e10cSrcweir return sal_Unicode(); 1901cdf0e10cSrcweir } 1902cdf0e10cSrcweir } 1903cdf0e10cSrcweir 1904cdf0e10cSrcweir 1905cdf0e10cSrcweir 1906cdf0e10cSrcweir 1907cdf0e10cSrcweir Sequence<css::beans::PropertyValue> SAL_CALL 1908cdf0e10cSrcweir PresenterAccessible::AccessibleParagraph::getCharacterAttributes ( 1909cdf0e10cSrcweir ::sal_Int32 nIndex, 1910cdf0e10cSrcweir const cssu::Sequence<rtl::OUString>& rRequestedAttributes) 1911cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, cssu::RuntimeException) 1912cdf0e10cSrcweir { 1913cdf0e10cSrcweir ThrowIfDisposed(); 1914cdf0e10cSrcweir 1915cdf0e10cSrcweir #ifdef VERBOSE 1916cdf0e10cSrcweir OSL_TRACE("PresenterAccessible::AccessibleParagraph::getCharacterAttributes at %x,%d returns empty set\r", 1917cdf0e10cSrcweir this,nIndex); 1918cdf0e10cSrcweir for (sal_Int32 nAttributeIndex(0),nAttributeCount(rRequestedAttributes.getLength()); 1919cdf0e10cSrcweir nAttributeIndex<nAttributeCount; 1920cdf0e10cSrcweir ++nAttributeIndex) 1921cdf0e10cSrcweir { 1922cdf0e10cSrcweir OSL_TRACE(" requested attribute %d is %s\r", 1923cdf0e10cSrcweir nAttributeIndex, 1924cdf0e10cSrcweir OUStringToOString(rRequestedAttributes[nAttributeIndex], RTL_TEXTENCODING_UTF8).getStr()); 1925cdf0e10cSrcweir } 1926cdf0e10cSrcweir #endif 1927cdf0e10cSrcweir 1928cdf0e10cSrcweir // Character properties are not supported. 1929cdf0e10cSrcweir (void)nIndex; 1930cdf0e10cSrcweir (void)rRequestedAttributes; 1931cdf0e10cSrcweir return Sequence<css::beans::PropertyValue>(); 1932cdf0e10cSrcweir } 1933cdf0e10cSrcweir 1934cdf0e10cSrcweir 1935cdf0e10cSrcweir 1936cdf0e10cSrcweir 1937cdf0e10cSrcweir awt::Rectangle SAL_CALL PresenterAccessible::AccessibleParagraph::getCharacterBounds ( 1938cdf0e10cSrcweir sal_Int32 nIndex) 1939cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, cssu::RuntimeException) 1940cdf0e10cSrcweir { 1941cdf0e10cSrcweir ThrowIfDisposed(); 1942cdf0e10cSrcweir 1943cdf0e10cSrcweir awt::Rectangle aCharacterBox; 1944cdf0e10cSrcweir if (nIndex < 0) 1945cdf0e10cSrcweir { 1946cdf0e10cSrcweir ThrowException("invalid text index", ET_IndexOutOfBounds); 1947cdf0e10cSrcweir } 1948cdf0e10cSrcweir else if (mpParagraph) 1949cdf0e10cSrcweir { 1950cdf0e10cSrcweir aCharacterBox = mpParagraph->GetCharacterBounds(nIndex, false); 1951cdf0e10cSrcweir // Convert coordinates relative to the window origin into absolute 1952cdf0e10cSrcweir // screen coordinates. 1953cdf0e10cSrcweir const awt::Point aWindowLocationOnScreen (getLocationOnScreen()); 1954cdf0e10cSrcweir aCharacterBox.X += aWindowLocationOnScreen.X; 1955cdf0e10cSrcweir aCharacterBox.Y += aWindowLocationOnScreen.Y; 1956cdf0e10cSrcweir } 1957cdf0e10cSrcweir else 1958cdf0e10cSrcweir { 1959cdf0e10cSrcweir ThrowException("no text support in current mode", ET_IndexOutOfBounds); 1960cdf0e10cSrcweir } 1961cdf0e10cSrcweir 1962cdf0e10cSrcweir return aCharacterBox; 1963cdf0e10cSrcweir } 1964cdf0e10cSrcweir 1965cdf0e10cSrcweir 1966cdf0e10cSrcweir 1967cdf0e10cSrcweir 1968cdf0e10cSrcweir sal_Int32 SAL_CALL PresenterAccessible::AccessibleParagraph::getCharacterCount (void) 1969cdf0e10cSrcweir throw (cssu::RuntimeException) 1970cdf0e10cSrcweir { 1971cdf0e10cSrcweir ThrowIfDisposed(); 1972cdf0e10cSrcweir 1973cdf0e10cSrcweir sal_Int32 nCount (0); 1974cdf0e10cSrcweir if (mpParagraph) 1975cdf0e10cSrcweir nCount = mpParagraph->GetCharacterCount(); 1976cdf0e10cSrcweir 1977cdf0e10cSrcweir return nCount; 1978cdf0e10cSrcweir } 1979cdf0e10cSrcweir 1980cdf0e10cSrcweir 1981cdf0e10cSrcweir 1982cdf0e10cSrcweir 1983cdf0e10cSrcweir sal_Int32 SAL_CALL PresenterAccessible::AccessibleParagraph::getIndexAtPoint ( 1984cdf0e10cSrcweir const css::awt::Point& rPoint) 1985cdf0e10cSrcweir throw (cssu::RuntimeException) 1986cdf0e10cSrcweir { 1987cdf0e10cSrcweir ThrowIfDisposed(); 1988cdf0e10cSrcweir 1989cdf0e10cSrcweir sal_Int32 nIndex (-1); 1990cdf0e10cSrcweir if (mpParagraph) 1991cdf0e10cSrcweir nIndex = mpParagraph->GetIndexAtPoint(rPoint); 1992cdf0e10cSrcweir 1993cdf0e10cSrcweir return nIndex; 1994cdf0e10cSrcweir } 1995cdf0e10cSrcweir 1996cdf0e10cSrcweir 1997cdf0e10cSrcweir 1998cdf0e10cSrcweir 1999cdf0e10cSrcweir ::rtl::OUString SAL_CALL PresenterAccessible::AccessibleParagraph::getSelectedText (void) 2000cdf0e10cSrcweir throw (cssu::RuntimeException) 2001cdf0e10cSrcweir { 2002cdf0e10cSrcweir ThrowIfDisposed(); 2003cdf0e10cSrcweir 2004cdf0e10cSrcweir return getTextRange(getSelectionStart(), getSelectionEnd()); 2005cdf0e10cSrcweir } 2006cdf0e10cSrcweir 2007cdf0e10cSrcweir 2008cdf0e10cSrcweir 2009cdf0e10cSrcweir 2010cdf0e10cSrcweir sal_Int32 SAL_CALL PresenterAccessible::AccessibleParagraph::getSelectionStart (void) 2011cdf0e10cSrcweir throw (cssu::RuntimeException) 2012cdf0e10cSrcweir { 2013cdf0e10cSrcweir ThrowIfDisposed(); 2014cdf0e10cSrcweir 2015cdf0e10cSrcweir return getCaretPosition(); 2016cdf0e10cSrcweir } 2017cdf0e10cSrcweir 2018cdf0e10cSrcweir 2019cdf0e10cSrcweir 2020cdf0e10cSrcweir 2021cdf0e10cSrcweir sal_Int32 SAL_CALL PresenterAccessible::AccessibleParagraph::getSelectionEnd (void) 2022cdf0e10cSrcweir throw (cssu::RuntimeException) 2023cdf0e10cSrcweir { 2024cdf0e10cSrcweir ThrowIfDisposed(); 2025cdf0e10cSrcweir 2026cdf0e10cSrcweir return getCaretPosition(); 2027cdf0e10cSrcweir } 2028cdf0e10cSrcweir 2029cdf0e10cSrcweir 2030cdf0e10cSrcweir 2031cdf0e10cSrcweir 2032cdf0e10cSrcweir sal_Bool SAL_CALL PresenterAccessible::AccessibleParagraph::setSelection ( 2033cdf0e10cSrcweir sal_Int32 nStartIndex, 2034cdf0e10cSrcweir sal_Int32 nEndIndex) 2035cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, cssu::RuntimeException) 2036cdf0e10cSrcweir { 2037cdf0e10cSrcweir (void)nEndIndex; 2038cdf0e10cSrcweir ThrowIfDisposed(); 2039cdf0e10cSrcweir 2040cdf0e10cSrcweir return setCaretPosition(nStartIndex); 2041cdf0e10cSrcweir } 2042cdf0e10cSrcweir 2043cdf0e10cSrcweir 2044cdf0e10cSrcweir 2045cdf0e10cSrcweir 2046cdf0e10cSrcweir ::rtl::OUString SAL_CALL PresenterAccessible::AccessibleParagraph::getText (void) 2047cdf0e10cSrcweir throw (cssu::RuntimeException) 2048cdf0e10cSrcweir { 2049cdf0e10cSrcweir ThrowIfDisposed(); 2050cdf0e10cSrcweir 2051cdf0e10cSrcweir ::rtl::OUString sText; 2052cdf0e10cSrcweir if (mpParagraph) 2053cdf0e10cSrcweir sText = mpParagraph->GetText(); 2054cdf0e10cSrcweir 2055cdf0e10cSrcweir return sText; 2056cdf0e10cSrcweir } 2057cdf0e10cSrcweir 2058cdf0e10cSrcweir 2059cdf0e10cSrcweir 2060cdf0e10cSrcweir 2061cdf0e10cSrcweir ::rtl::OUString SAL_CALL PresenterAccessible::AccessibleParagraph::getTextRange ( 2062cdf0e10cSrcweir sal_Int32 nLocalStartIndex, 2063cdf0e10cSrcweir sal_Int32 nLocalEndIndex) 2064cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, cssu::RuntimeException) 2065cdf0e10cSrcweir { 2066cdf0e10cSrcweir ThrowIfDisposed(); 2067cdf0e10cSrcweir 2068cdf0e10cSrcweir ::rtl::OUString sText; 2069cdf0e10cSrcweir if (mpParagraph) 2070cdf0e10cSrcweir { 2071cdf0e10cSrcweir const TextSegment aSegment ( 2072cdf0e10cSrcweir mpParagraph->CreateTextSegment(nLocalStartIndex, nLocalEndIndex)); 2073cdf0e10cSrcweir sText = aSegment.SegmentText; 2074cdf0e10cSrcweir } 2075cdf0e10cSrcweir 2076cdf0e10cSrcweir return sText; 2077cdf0e10cSrcweir } 2078cdf0e10cSrcweir 2079cdf0e10cSrcweir 2080cdf0e10cSrcweir 2081cdf0e10cSrcweir 2082cdf0e10cSrcweir TextSegment SAL_CALL PresenterAccessible::AccessibleParagraph::getTextAtIndex ( 2083cdf0e10cSrcweir sal_Int32 nLocalCharacterIndex, 2084cdf0e10cSrcweir sal_Int16 nTextType) 2085cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, 2086cdf0e10cSrcweir css::lang::IllegalArgumentException, 2087cdf0e10cSrcweir cssu::RuntimeException) 2088cdf0e10cSrcweir { 2089cdf0e10cSrcweir ThrowIfDisposed(); 2090cdf0e10cSrcweir 2091cdf0e10cSrcweir TextSegment aSegment; 2092cdf0e10cSrcweir if (mpParagraph) 2093cdf0e10cSrcweir aSegment = mpParagraph->GetTextSegment(0, nLocalCharacterIndex, nTextType); 2094cdf0e10cSrcweir 2095cdf0e10cSrcweir return aSegment; 2096cdf0e10cSrcweir } 2097cdf0e10cSrcweir 2098cdf0e10cSrcweir 2099cdf0e10cSrcweir 2100cdf0e10cSrcweir 2101cdf0e10cSrcweir TextSegment SAL_CALL PresenterAccessible::AccessibleParagraph::getTextBeforeIndex ( 2102cdf0e10cSrcweir sal_Int32 nLocalCharacterIndex, 2103cdf0e10cSrcweir sal_Int16 nTextType) 2104cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, 2105cdf0e10cSrcweir css::lang::IllegalArgumentException, 2106cdf0e10cSrcweir cssu::RuntimeException) 2107cdf0e10cSrcweir { 2108cdf0e10cSrcweir ThrowIfDisposed(); 2109cdf0e10cSrcweir 2110cdf0e10cSrcweir TextSegment aSegment; 2111cdf0e10cSrcweir if (mpParagraph) 2112cdf0e10cSrcweir aSegment = mpParagraph->GetTextSegment(-1, nLocalCharacterIndex, nTextType); 2113cdf0e10cSrcweir 2114cdf0e10cSrcweir return aSegment; 2115cdf0e10cSrcweir } 2116cdf0e10cSrcweir 2117cdf0e10cSrcweir 2118cdf0e10cSrcweir 2119cdf0e10cSrcweir 2120cdf0e10cSrcweir TextSegment SAL_CALL PresenterAccessible::AccessibleParagraph::getTextBehindIndex ( 2121cdf0e10cSrcweir sal_Int32 nLocalCharacterIndex, 2122cdf0e10cSrcweir sal_Int16 nTextType) 2123cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, 2124cdf0e10cSrcweir css::lang::IllegalArgumentException, 2125cdf0e10cSrcweir cssu::RuntimeException) 2126cdf0e10cSrcweir { 2127cdf0e10cSrcweir ThrowIfDisposed(); 2128cdf0e10cSrcweir 2129cdf0e10cSrcweir TextSegment aSegment; 2130cdf0e10cSrcweir if (mpParagraph) 2131cdf0e10cSrcweir aSegment = mpParagraph->GetTextSegment(+1, nLocalCharacterIndex, nTextType); 2132cdf0e10cSrcweir 2133cdf0e10cSrcweir return aSegment; 2134cdf0e10cSrcweir } 2135cdf0e10cSrcweir 2136cdf0e10cSrcweir 2137cdf0e10cSrcweir 2138cdf0e10cSrcweir 2139cdf0e10cSrcweir sal_Bool SAL_CALL PresenterAccessible::AccessibleParagraph::copyText ( 2140cdf0e10cSrcweir sal_Int32 nStartIndex, 2141cdf0e10cSrcweir sal_Int32 nEndIndex) 2142cdf0e10cSrcweir throw (css::lang::IndexOutOfBoundsException, cssu::RuntimeException) 2143cdf0e10cSrcweir { 2144cdf0e10cSrcweir ThrowIfDisposed(); 2145cdf0e10cSrcweir 2146cdf0e10cSrcweir // Return false because copying to clipboard is not supported. 2147cdf0e10cSrcweir // It IS supported in the notes view. There is no need to duplicate 2148cdf0e10cSrcweir // this here. 2149cdf0e10cSrcweir (void)nStartIndex; 2150cdf0e10cSrcweir (void)nEndIndex; 2151cdf0e10cSrcweir return sal_False; 2152cdf0e10cSrcweir } 2153cdf0e10cSrcweir 2154cdf0e10cSrcweir 2155cdf0e10cSrcweir 2156cdf0e10cSrcweir 2157cdf0e10cSrcweir //----- protected ------------------------------------------------------------- 2158cdf0e10cSrcweir 2159cdf0e10cSrcweir awt::Point PresenterAccessible::AccessibleParagraph::GetRelativeLocation (void) 2160cdf0e10cSrcweir { 2161cdf0e10cSrcweir awt::Point aLocation (AccessibleObject::GetRelativeLocation()); 2162cdf0e10cSrcweir if (mpParagraph) 2163cdf0e10cSrcweir { 2164cdf0e10cSrcweir const awt::Point aParagraphLocation (mpParagraph->GetRelativeLocation()); 2165cdf0e10cSrcweir aLocation.X += aParagraphLocation.X; 2166cdf0e10cSrcweir aLocation.Y += aParagraphLocation.Y; 2167cdf0e10cSrcweir } 2168cdf0e10cSrcweir 2169cdf0e10cSrcweir return aLocation; 2170cdf0e10cSrcweir } 2171cdf0e10cSrcweir 2172cdf0e10cSrcweir 2173cdf0e10cSrcweir 2174cdf0e10cSrcweir 2175cdf0e10cSrcweir awt::Size PresenterAccessible::AccessibleParagraph::GetSize (void) 2176cdf0e10cSrcweir { 2177cdf0e10cSrcweir if (mpParagraph) 2178cdf0e10cSrcweir return mpParagraph->GetSize(); 2179cdf0e10cSrcweir else 2180cdf0e10cSrcweir return AccessibleObject::GetSize(); 2181cdf0e10cSrcweir } 2182cdf0e10cSrcweir 2183cdf0e10cSrcweir 2184cdf0e10cSrcweir 2185cdf0e10cSrcweir 2186cdf0e10cSrcweir awt::Point PresenterAccessible::AccessibleParagraph::GetAbsoluteParentLocation (void) 2187cdf0e10cSrcweir { 2188cdf0e10cSrcweir if (mxParentAccessible.is()) 2189cdf0e10cSrcweir { 2190cdf0e10cSrcweir Reference<XAccessibleContext> xParentContext( 2191cdf0e10cSrcweir mxParentAccessible->getAccessibleContext(), UNO_QUERY); 2192cdf0e10cSrcweir if (xParentContext.is()) 2193cdf0e10cSrcweir { 2194cdf0e10cSrcweir Reference<XAccessibleComponent> xGrandParentComponent( 2195cdf0e10cSrcweir xParentContext->getAccessibleParent(), UNO_QUERY); 2196cdf0e10cSrcweir if (xGrandParentComponent.is()) 2197cdf0e10cSrcweir return xGrandParentComponent->getLocationOnScreen(); 2198cdf0e10cSrcweir } 2199cdf0e10cSrcweir } 2200cdf0e10cSrcweir 2201cdf0e10cSrcweir return awt::Point(); 2202cdf0e10cSrcweir } 2203cdf0e10cSrcweir 2204cdf0e10cSrcweir 2205cdf0e10cSrcweir 2206cdf0e10cSrcweir 2207cdf0e10cSrcweir bool PresenterAccessible::AccessibleParagraph::GetWindowState (const sal_Int16 nType) const 2208cdf0e10cSrcweir { 2209cdf0e10cSrcweir switch (nType) 2210cdf0e10cSrcweir { 2211cdf0e10cSrcweir case AccessibleStateType::EDITABLE: 2212cdf0e10cSrcweir return mpParagraph.get()!=NULL; 2213cdf0e10cSrcweir 2214cdf0e10cSrcweir case AccessibleStateType::ACTIVE: 2215cdf0e10cSrcweir return true; 2216cdf0e10cSrcweir 2217cdf0e10cSrcweir default: 2218cdf0e10cSrcweir return AccessibleObject::GetWindowState(nType); 2219cdf0e10cSrcweir } 2220cdf0e10cSrcweir } 2221cdf0e10cSrcweir 2222cdf0e10cSrcweir 2223cdf0e10cSrcweir 2224cdf0e10cSrcweir 2225cdf0e10cSrcweir 2226cdf0e10cSrcweir 2227cdf0e10cSrcweir //===== AccessibleNotes ======================================================= 2228cdf0e10cSrcweir 2229cdf0e10cSrcweir AccessibleNotes::AccessibleNotes ( 2230cdf0e10cSrcweir const css::lang::Locale aLocale, 2231cdf0e10cSrcweir const sal_Int16 nRole, 2232cdf0e10cSrcweir const ::rtl::OUString& rsName) 2233cdf0e10cSrcweir : AccessibleObject(aLocale,nRole,rsName), 2234cdf0e10cSrcweir mpTextView() 2235cdf0e10cSrcweir { 2236cdf0e10cSrcweir } 2237cdf0e10cSrcweir 2238cdf0e10cSrcweir 2239cdf0e10cSrcweir 2240cdf0e10cSrcweir 2241cdf0e10cSrcweir rtl::Reference<PresenterAccessible::AccessibleObject> AccessibleNotes::Create ( 2242cdf0e10cSrcweir const css::uno::Reference<css::uno::XComponentContext>& rxContext, 2243cdf0e10cSrcweir const lang::Locale aLocale, 2244cdf0e10cSrcweir const Reference<awt::XWindow>& rxContentWindow, 2245cdf0e10cSrcweir const Reference<awt::XWindow>& rxBorderWindow, 2246cdf0e10cSrcweir const ::boost::shared_ptr<PresenterTextView>& rpTextView) 2247cdf0e10cSrcweir { 2248cdf0e10cSrcweir OUString sName (A2S("Presenter Notes Text")); 2249cdf0e10cSrcweir { 2250cdf0e10cSrcweir PresenterConfigurationAccess aConfiguration ( 2251cdf0e10cSrcweir rxContext, 2252cdf0e10cSrcweir OUString::createFromAscii("/org.openoffice.Office.extension.PresenterScreen/"), 2253cdf0e10cSrcweir PresenterConfigurationAccess::READ_ONLY); 2254cdf0e10cSrcweir aConfiguration.GetConfigurationNode(A2S("Presenter/Accessibility/Notes/String")) 2255cdf0e10cSrcweir >>= sName; 2256cdf0e10cSrcweir } 2257cdf0e10cSrcweir 2258cdf0e10cSrcweir rtl::Reference<AccessibleNotes> pObject ( 2259cdf0e10cSrcweir new AccessibleNotes( 2260cdf0e10cSrcweir aLocale, 2261cdf0e10cSrcweir AccessibleRole::PANEL, 2262cdf0e10cSrcweir sName)); 2263cdf0e10cSrcweir pObject->LateInitialization(); 2264cdf0e10cSrcweir pObject->SetTextView(rpTextView); 2265cdf0e10cSrcweir pObject->UpdateStateSet(); 2266cdf0e10cSrcweir pObject->SetWindow(rxContentWindow, rxBorderWindow); 2267cdf0e10cSrcweir 2268cdf0e10cSrcweir return rtl::Reference<PresenterAccessible::AccessibleObject>(pObject.get()); 2269cdf0e10cSrcweir } 2270cdf0e10cSrcweir 2271cdf0e10cSrcweir 2272cdf0e10cSrcweir 2273cdf0e10cSrcweir 2274cdf0e10cSrcweir void AccessibleNotes::SetTextView ( 2275cdf0e10cSrcweir const ::boost::shared_ptr<PresenterTextView>& rpTextView) 2276cdf0e10cSrcweir { 2277cdf0e10cSrcweir ::std::vector<rtl::Reference<PresenterAccessible::AccessibleObject> > aChildren; 2278cdf0e10cSrcweir 2279cdf0e10cSrcweir // Release any listeners to the current text view. 2280cdf0e10cSrcweir if (mpTextView) 2281cdf0e10cSrcweir { 2282cdf0e10cSrcweir mpTextView->GetCaret()->SetCaretMotionBroadcaster( 2283cdf0e10cSrcweir ::boost::function<void(sal_Int32,sal_Int32,sal_Int32,sal_Int32)>()); 2284cdf0e10cSrcweir mpTextView->SetTextChangeBroadcaster( 2285cdf0e10cSrcweir ::boost::function<void(void)>()); 2286cdf0e10cSrcweir } 2287cdf0e10cSrcweir 2288cdf0e10cSrcweir mpTextView = rpTextView; 2289cdf0e10cSrcweir 2290cdf0e10cSrcweir if (mpTextView) 2291cdf0e10cSrcweir { 2292cdf0e10cSrcweir // Create a new set of children, one for each paragraph. 2293cdf0e10cSrcweir const sal_Int32 nParagraphCount (mpTextView->GetParagraphCount()); 2294cdf0e10cSrcweir for (sal_Int32 nIndex=0; nIndex<nParagraphCount; ++nIndex) 2295cdf0e10cSrcweir { 2296cdf0e10cSrcweir rtl::Reference<PresenterAccessible::AccessibleParagraph> pParagraph ( 2297cdf0e10cSrcweir new PresenterAccessible::AccessibleParagraph( 2298cdf0e10cSrcweir css::lang::Locale(), 2299cdf0e10cSrcweir AccessibleRole::PARAGRAPH, 2300cdf0e10cSrcweir A2S("Paragraph")+OUString::valueOf(nIndex), 2301cdf0e10cSrcweir rpTextView->GetParagraph(nIndex), 2302cdf0e10cSrcweir nIndex)); 2303cdf0e10cSrcweir pParagraph->LateInitialization(); 2304cdf0e10cSrcweir pParagraph->SetWindow( 2305cdf0e10cSrcweir Reference<awt::XWindow>(mxContentWindow, UNO_QUERY), 2306cdf0e10cSrcweir Reference<awt::XWindow>(mxBorderWindow, UNO_QUERY)); 2307cdf0e10cSrcweir pParagraph->SetAccessibleParent(this); 2308cdf0e10cSrcweir aChildren.push_back( 2309cdf0e10cSrcweir rtl::Reference<PresenterAccessible::AccessibleObject>(pParagraph.get())); 2310cdf0e10cSrcweir } 2311cdf0e10cSrcweir maChildren.swap(aChildren); 2312cdf0e10cSrcweir FireAccessibleEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN, Any(), Any()); 2313cdf0e10cSrcweir 2314cdf0e10cSrcweir // Dispose the old children. (This will remove them from the focus 2315cdf0e10cSrcweir // manager). 2316cdf0e10cSrcweir for (std::vector<rtl::Reference<AccessibleObject> >::const_iterator 2317cdf0e10cSrcweir iChild(aChildren.begin()), iEnd(aChildren.end()); 2318cdf0e10cSrcweir iChild!=iEnd; 2319cdf0e10cSrcweir ++iChild) 2320cdf0e10cSrcweir { 2321cdf0e10cSrcweir Reference<lang::XComponent> xComponent (static_cast<XWeak*>(iChild->get()), UNO_QUERY); 2322cdf0e10cSrcweir if (xComponent.is()) 2323cdf0e10cSrcweir xComponent->dispose(); 2324cdf0e10cSrcweir } 2325cdf0e10cSrcweir 2326cdf0e10cSrcweir // This class acts as a controller of who broadcasts caret motion 2327cdf0e10cSrcweir // events and handles text changes. Register the corresponding 2328cdf0e10cSrcweir // listeners here. 2329cdf0e10cSrcweir mpTextView->GetCaret()->SetCaretMotionBroadcaster( 2330cdf0e10cSrcweir ::boost::bind(&AccessibleNotes::NotifyCaretChange, this, _1, _2, _3, _4)); 2331cdf0e10cSrcweir mpTextView->SetTextChangeBroadcaster( 2332cdf0e10cSrcweir ::boost::bind(&AccessibleNotes::HandleTextChange, this)); 2333cdf0e10cSrcweir } 2334cdf0e10cSrcweir } 2335cdf0e10cSrcweir 2336cdf0e10cSrcweir 2337cdf0e10cSrcweir 2338cdf0e10cSrcweir 2339cdf0e10cSrcweir void AccessibleNotes::SetWindow ( 2340cdf0e10cSrcweir const cssu::Reference<css::awt::XWindow>& rxContentWindow, 2341cdf0e10cSrcweir const cssu::Reference<css::awt::XWindow>& rxBorderWindow) 2342cdf0e10cSrcweir { 2343cdf0e10cSrcweir AccessibleObject::SetWindow(rxContentWindow, rxBorderWindow); 2344cdf0e10cSrcweir 2345cdf0e10cSrcweir // Set the windows at the children as well, so that every paragraph can 2346cdf0e10cSrcweir // setup its geometry. 2347cdf0e10cSrcweir for (::std::vector<rtl::Reference<AccessibleObject> >::const_iterator 2348cdf0e10cSrcweir iChild(maChildren.begin()), 2349cdf0e10cSrcweir iEnd(maChildren.end()); 2350cdf0e10cSrcweir iChild!=iEnd; 2351cdf0e10cSrcweir ++iChild) 2352cdf0e10cSrcweir { 2353cdf0e10cSrcweir (*iChild)->SetWindow(rxContentWindow, rxBorderWindow); 2354cdf0e10cSrcweir } 2355cdf0e10cSrcweir } 2356cdf0e10cSrcweir 2357cdf0e10cSrcweir 2358cdf0e10cSrcweir 2359cdf0e10cSrcweir 2360cdf0e10cSrcweir void AccessibleNotes::NotifyCaretChange ( 2361cdf0e10cSrcweir const sal_Int32 nOldParagraphIndex, 2362cdf0e10cSrcweir const sal_Int32 nOldCharacterIndex, 2363cdf0e10cSrcweir const sal_Int32 nNewParagraphIndex, 2364cdf0e10cSrcweir const sal_Int32 nNewCharacterIndex) 2365cdf0e10cSrcweir { 2366cdf0e10cSrcweir AccessibleFocusManager::Instance()->FocusObject( 2367cdf0e10cSrcweir nNewParagraphIndex >= 0 2368cdf0e10cSrcweir ? maChildren[nNewParagraphIndex] 2369cdf0e10cSrcweir : this); 2370cdf0e10cSrcweir 2371cdf0e10cSrcweir if (nOldParagraphIndex != nNewParagraphIndex) 2372cdf0e10cSrcweir { 2373cdf0e10cSrcweir // Moved caret from one paragraph to another (or showed or 2374cdf0e10cSrcweir // hid the caret). Move focuse from one accessible 2375cdf0e10cSrcweir // paragraph to another. 2376cdf0e10cSrcweir if (nOldParagraphIndex >= 0) 2377cdf0e10cSrcweir { 2378cdf0e10cSrcweir maChildren[nOldParagraphIndex]->FireAccessibleEvent( 2379cdf0e10cSrcweir AccessibleEventId::CARET_CHANGED, 2380cdf0e10cSrcweir Any(nOldCharacterIndex), 2381cdf0e10cSrcweir Any(sal_Int32(-1))); 2382cdf0e10cSrcweir } 2383cdf0e10cSrcweir if (nNewParagraphIndex >= 0) 2384cdf0e10cSrcweir { 2385cdf0e10cSrcweir maChildren[nNewParagraphIndex]->FireAccessibleEvent( 2386cdf0e10cSrcweir AccessibleEventId::CARET_CHANGED, 2387cdf0e10cSrcweir Any(sal_Int32(-1)), 2388cdf0e10cSrcweir Any(nNewCharacterIndex)); 2389cdf0e10cSrcweir } 2390cdf0e10cSrcweir } 2391cdf0e10cSrcweir else if (nNewParagraphIndex >= 0) 2392cdf0e10cSrcweir { 2393cdf0e10cSrcweir // Caret moved inside one paragraph. 2394cdf0e10cSrcweir maChildren[nNewParagraphIndex]->FireAccessibleEvent( 2395cdf0e10cSrcweir AccessibleEventId::CARET_CHANGED, 2396cdf0e10cSrcweir Any(nOldCharacterIndex), 2397cdf0e10cSrcweir Any(nNewCharacterIndex)); 2398cdf0e10cSrcweir } 2399cdf0e10cSrcweir } 2400cdf0e10cSrcweir 2401cdf0e10cSrcweir 2402cdf0e10cSrcweir 2403cdf0e10cSrcweir 2404cdf0e10cSrcweir void AccessibleNotes::HandleTextChange (void) 2405cdf0e10cSrcweir { 2406cdf0e10cSrcweir SetTextView(mpTextView); 2407cdf0e10cSrcweir } 2408cdf0e10cSrcweir 2409cdf0e10cSrcweir 2410cdf0e10cSrcweir 2411cdf0e10cSrcweir 2412cdf0e10cSrcweir //===== AccessibleFocusManager ================================================ 2413cdf0e10cSrcweir 2414cdf0e10cSrcweir ::boost::shared_ptr<AccessibleFocusManager> AccessibleFocusManager::mpInstance; 2415cdf0e10cSrcweir 2416cdf0e10cSrcweir ::boost::shared_ptr<AccessibleFocusManager> AccessibleFocusManager::Instance (void) 2417cdf0e10cSrcweir { 2418cdf0e10cSrcweir if ( ! mpInstance) 2419cdf0e10cSrcweir { 2420cdf0e10cSrcweir mpInstance.reset(new AccessibleFocusManager()); 2421cdf0e10cSrcweir } 2422cdf0e10cSrcweir return mpInstance; 2423cdf0e10cSrcweir } 2424cdf0e10cSrcweir 2425cdf0e10cSrcweir 2426cdf0e10cSrcweir 2427cdf0e10cSrcweir 2428cdf0e10cSrcweir AccessibleFocusManager::AccessibleFocusManager (void) 2429cdf0e10cSrcweir : maFocusableObjects() 2430cdf0e10cSrcweir { 2431cdf0e10cSrcweir } 2432cdf0e10cSrcweir 2433cdf0e10cSrcweir 2434cdf0e10cSrcweir 2435cdf0e10cSrcweir 2436cdf0e10cSrcweir void AccessibleFocusManager::AddFocusableObject ( 2437cdf0e10cSrcweir const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject) 2438cdf0e10cSrcweir { 2439cdf0e10cSrcweir OSL_ASSERT(rpObject.is()); 2440cdf0e10cSrcweir OSL_ASSERT(::std::find(maFocusableObjects.begin(),maFocusableObjects.end(), rpObject)==maFocusableObjects.end()); 2441cdf0e10cSrcweir 2442cdf0e10cSrcweir maFocusableObjects.push_back(rpObject); 2443cdf0e10cSrcweir } 2444cdf0e10cSrcweir 2445cdf0e10cSrcweir 2446cdf0e10cSrcweir 2447cdf0e10cSrcweir 2448cdf0e10cSrcweir void AccessibleFocusManager::RemoveFocusableObject ( 2449cdf0e10cSrcweir const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject) 2450cdf0e10cSrcweir { 2451cdf0e10cSrcweir ::std::vector<rtl::Reference<PresenterAccessible::AccessibleObject> >::iterator iObject ( 2452cdf0e10cSrcweir ::std::find(maFocusableObjects.begin(),maFocusableObjects.end(), rpObject)); 2453cdf0e10cSrcweir 2454cdf0e10cSrcweir if (iObject != maFocusableObjects.end()) 2455cdf0e10cSrcweir maFocusableObjects.erase(iObject); 2456cdf0e10cSrcweir else 2457cdf0e10cSrcweir { 2458cdf0e10cSrcweir OSL_ASSERT(iObject!=maFocusableObjects.end()); 2459cdf0e10cSrcweir } 2460cdf0e10cSrcweir } 2461cdf0e10cSrcweir 2462cdf0e10cSrcweir 2463cdf0e10cSrcweir 2464cdf0e10cSrcweir 2465cdf0e10cSrcweir void AccessibleFocusManager::FocusObject ( 2466cdf0e10cSrcweir const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject) 2467cdf0e10cSrcweir { 2468cdf0e10cSrcweir // Remove the focus of any of the other focusable objects. 2469cdf0e10cSrcweir for (::std::vector<rtl::Reference<PresenterAccessible::AccessibleObject> >::const_iterator 2470cdf0e10cSrcweir iObject (maFocusableObjects.begin()), 2471cdf0e10cSrcweir iEnd (maFocusableObjects.end()); 2472cdf0e10cSrcweir iObject != iEnd; 2473cdf0e10cSrcweir ++iObject) 2474cdf0e10cSrcweir { 2475cdf0e10cSrcweir if (*iObject!=rpObject) 2476cdf0e10cSrcweir (*iObject)->SetIsFocused(false); 2477cdf0e10cSrcweir } 2478cdf0e10cSrcweir 2479cdf0e10cSrcweir if (rpObject.is()) 2480cdf0e10cSrcweir rpObject->SetIsFocused(true); 2481cdf0e10cSrcweir } 2482cdf0e10cSrcweir 2483cdf0e10cSrcweir } } // end of namespace ::sd::presenter 2484