/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef _SVXGRAPHACCESSIBLECONTEXT_HXX #define _SVXGRAPHACCESSIBLECONTEXT_HXX #ifndef _CPPUHELPER_IMPLBASE7_HXX_ #include #endif #include #include #include #include #include #ifndef _COM_SUN_STAR_ACCESSIBILITY_IllegalAccessibleComponentStateException_HPP_ #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace com { namespace sun { namespace star { namespace awt { struct Point; struct Rectangle; struct Size; class XFocusListener; } } } } class Rectangle; class GraphCtrl; class Window; class SdrObject; class SdrModel; class SdrPage; class SdrView; /** @descr This base class provides an implementation of the AccessibleContext service. */ typedef ::cppu::WeakAggComponentImplHelper7< ::com::sun::star::accessibility::XAccessible, ::com::sun::star::accessibility::XAccessibleComponent, ::com::sun::star::accessibility::XAccessibleContext, ::com::sun::star::accessibility::XAccessibleEventBroadcaster, ::com::sun::star::accessibility::XAccessibleSelection, ::com::sun::star::lang::XServiceInfo, ::com::sun::star::lang::XServiceName > SvxGraphCtrlAccessibleContext_Base; class SvxGraphCtrlAccessibleContext : public SvxGraphCtrlAccessibleContext_Base, ::comphelper::OBaseMutex, SfxListener, ::accessibility::IAccessibleViewForwarder { public: friend class GraphCtrl; //===== internal ======================================================== SvxGraphCtrlAccessibleContext( const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible>& rxParent, GraphCtrl& rRepresentation, const ::rtl::OUString* pName = NULL, const ::rtl::OUString* pDescription = NULL ); void Notify( SfxBroadcaster& aBC, const SfxHint& aHint ); protected: virtual ~SvxGraphCtrlAccessibleContext(); public: //===== XAccessible ===================================================== /// Return the XAccessibleContext. virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext> SAL_CALL getAccessibleContext (void) throw (::com::sun::star::uno::RuntimeException); //===== XAccessibleComponent ============================================ virtual sal_Bool SAL_CALL containsPoint( const ::com::sun::star::awt::Point& rPoint ) throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const ::com::sun::star::awt::Point& rPoint ) throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::awt::Rectangle SAL_CALL getBounds() throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::awt::Point SAL_CALL getLocation() throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::awt::Point SAL_CALL getLocationOnScreen() throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::awt::Size SAL_CALL getSize() throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL addFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL removeFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL grabFocus() throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Any SAL_CALL getAccessibleKeyBinding() throw (::com::sun::star::uno::RuntimeException); virtual sal_Int32 SAL_CALL getForeground (void) throw (::com::sun::star::uno::RuntimeException); virtual sal_Int32 SAL_CALL getBackground (void) throw (::com::sun::star::uno::RuntimeException); //===== XAccessibleContext ============================================== virtual sal_Int32 SAL_CALL getAccessibleChildCount (void) throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> SAL_CALL getAccessibleChild (sal_Int32 nIndex) throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::IndexOutOfBoundsException); virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> SAL_CALL getAccessibleParent (void) throw (::com::sun::star::uno::RuntimeException); virtual sal_Int32 SAL_CALL getAccessibleIndexInParent (void) throw (::com::sun::star::uno::RuntimeException); virtual sal_Int16 SAL_CALL getAccessibleRole (void) throw (::com::sun::star::uno::RuntimeException); virtual ::rtl::OUString SAL_CALL getAccessibleDescription (void) throw (::com::sun::star::uno::RuntimeException); virtual ::rtl::OUString SAL_CALL getAccessibleName (void) throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleRelationSet> SAL_CALL getAccessibleRelationSet (void) throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleStateSet> SAL_CALL getAccessibleStateSet (void) throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::lang::Locale SAL_CALL getLocale (void) throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::accessibility::IllegalAccessibleComponentStateException); // virtual void SAL_CALL addPropertyChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException) {} // virtual void SAL_CALL removePropertyChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException) {} //===== XComponent ======================================================== using ::cppu::WeakAggComponentImplHelperBase::addEventListener; using ::cppu::WeakAggComponentImplHelperBase::removeEventListener; //===== XAccessibleEventBroadcaster ===================================== virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleEventListener>& xListener) throw (com::sun::star::uno::RuntimeException); virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleEventListener>& xListener) throw (com::sun::star::uno::RuntimeException); //===== XServiceInfo ==================================================== virtual ::rtl::OUString SAL_CALL getImplementationName (void) throw (::com::sun::star::uno::RuntimeException); virtual sal_Bool SAL_CALL supportsService (const ::rtl::OUString& sServiceName) throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL getSupportedServiceNames (void) throw (::com::sun::star::uno::RuntimeException); //===== XTypeProvider =================================================== virtual ::com::sun::star::uno::Sequence SAL_CALL getImplementationId (void) throw (::com::sun::star::uno::RuntimeException); //===== XServiceName ==================================================== virtual ::rtl::OUString SAL_CALL getServiceName (void) throw (::com::sun::star::uno::RuntimeException); //===== XAccessibleSelection ============================================= virtual void SAL_CALL selectAccessibleChild( sal_Int32 nChildIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); virtual sal_Bool SAL_CALL isAccessibleChildSelected( sal_Int32 nChildIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); virtual void SAL_CALL clearAccessibleSelection() throw (::com::sun::star::uno::RuntimeException ); virtual void SAL_CALL selectAllAccessibleChildren() throw (::com::sun::star::uno::RuntimeException ); virtual sal_Int32 SAL_CALL getSelectedAccessibleChildCount() throw (::com::sun::star::uno::RuntimeException ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); virtual void SAL_CALL deselectAccessibleChild( sal_Int32 nSelectedChildIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); //===== IAccessibleViewforwarder ======================================== virtual sal_Bool IsValid (void) const; virtual Rectangle GetVisibleArea() const; virtual Point LogicToPixel (const Point& rPoint) const; virtual Size LogicToPixel (const Size& rSize) const; virtual Point PixelToLogic (const Point& rPoint) const; virtual Size PixelToLogic (const Size& rSize) const; protected: //===== internals ======================================================== void checkChildIndex( long nIndexOfChild ) throw (::com::sun::star::lang::IndexOutOfBoundsException ); void checkChildIndexOnSelection( long nIndexOfChild ) throw (::com::sun::star::lang::IndexOutOfBoundsException ); public: /// Sets the name void setName( const ::rtl::OUString& rName ); /// Sets the description void setDescription( const ::rtl::OUString& rDescr ); /** This method is used by the graph control to tell the accessibility object about a new model and view. */ void setModelAndView (SdrModel* pModel, SdrView* pView); private: static ::com::sun::star::uno::Sequence< sal_Int8 > getUniqueId( void ); protected: /** Return the object's current bounding box relative to the desktop, i.e in absolute pixel coordinates. @return The returned rectangle is a bounding box of the object given in absolute screen coordinates. @raise DisposedException When the object is already disposed then a DisposedException is thrown. */ virtual Rectangle GetBoundingBoxOnScreen(void) throw (::com::sun::star::uno::RuntimeException); /// Return the object's current bounding box relative to the parent object. virtual Rectangle GetBoundingBox(void) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL disposing(); private: SdrObject* getSdrObject( sal_Int32 nIndex ) throw( ::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::IndexOutOfBoundsException ); void CommitChange (sal_Int16 aEventId, const ::com::sun::star::uno::Any& rNewValue, const ::com::sun::star::uno::Any& rOldValue); void FireEvent (const ::com::sun::star::accessibility::AccessibleEventObject& aEvent); ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessible( const SdrObject* pObj ); accessibility::AccessibleShapeTreeInfo maTreeInfo; /// Reference to the parent object. ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> mxParent; /** Description of this object. This is not a constant because it can be set from the outside. */ ::rtl::OUString msDescription; /** Name of this object. */ ::rtl::OUString msName; /// map of accessible shapes struct SdrObjectCompareLess { bool operator()(const SdrObject* p1, const SdrObject* p2) const { return p1 < p2; } }; typedef ::std::map< const SdrObject*, ::accessibility::AccessibleShape*, SdrObjectCompareLess > ShapesMapType; ShapesMapType mxShapes; GraphCtrl* mpControl; SdrModel* mpModel; SdrPage* mpPage; SdrView* mpView; /// client id in the AccessibleEventNotifier queue sal_uInt32 mnClientId; sal_Bool mbDisposed; }; #endif