summaryrefslogtreecommitdiffstats
path: root/sd/source/ui/inc/AccessibleDocumentViewBase.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/inc/AccessibleDocumentViewBase.hxx')
-rw-r--r--sd/source/ui/inc/AccessibleDocumentViewBase.hxx324
1 files changed, 324 insertions, 0 deletions
diff --git a/sd/source/ui/inc/AccessibleDocumentViewBase.hxx b/sd/source/ui/inc/AccessibleDocumentViewBase.hxx
new file mode 100644
index 000000000..0db25b689
--- /dev/null
+++ b/sd/source/ui/inc/AccessibleDocumentViewBase.hxx
@@ -0,0 +1,324 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * 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 .
+ */
+
+#ifndef INCLUDED_SD_SOURCE_UI_INC_ACCESSIBLEDOCUMENTVIEWBASE_HXX
+#define INCLUDED_SD_SOURCE_UI_INC_ACCESSIBLEDOCUMENTVIEWBASE_HXX
+
+#include <editeng/AccessibleContextBase.hxx>
+#include <editeng/AccessibleComponentBase.hxx>
+#include <editeng/AccessibleSelectionBase.hxx>
+#include "AccessibleViewForwarder.hxx"
+#include <svx/AccessibleShapeTreeInfo.hxx>
+#include <svx/IAccessibleViewForwarderListener.hxx>
+
+#include <com/sun/star/awt/XWindowListener.hpp>
+#include <com/sun/star/awt/XFocusListener.hpp>
+#include <com/sun/star/beans/XPropertyChangeListener.hpp>
+#include <tools/link.hxx>
+
+#include <com/sun/star/accessibility/XAccessibleExtendedAttributes.hpp>
+
+#include "Window.hxx"
+
+namespace com::sun::star::accessibility { class XAccessible; }
+namespace com::sun::star::frame { class XModel; }
+namespace com::sun::star::awt { class XWindow; }
+
+class VclWindowEvent;
+
+namespace sd {
+class ViewShell;
+}
+
+namespace accessibility {
+
+/** Base class for the various document views of the Draw and
+ Impress applications.
+
+ <p>The different view modes of the Draw and Impress applications
+ are made accessible by derived classes. When the view mode is
+ changed then the object representing the document view is
+ disposed and replaced by a new instance of the then appropriate
+ derived class.</p>
+
+ <p>This base class also manages an optionally active accessible OLE
+ object. If you overwrite the <member>getAccessibleChildCount</member>
+ and <member>getAccessibleChild</member> methods then make sure to first
+ call the corresponding method of this class and adapt your child count
+ and indices accordingly. Only one active OLE object is allowed at a
+ time. This class does not listen for disposing calls at the moment
+ because it does not use the accessible OLE object directly and trusts on
+ getting informed through VCL window events.</p>
+
+ <p>This class implements three kinds of listeners:
+ <ol><li>The property change listener is not used directly but exists as
+ convenience for derived classes. May be moved to those classes
+ instead.</li>
+ <li>As window listener it waits for changes of the window geometry and
+ forwards those as view forwarder changes.</li>
+ <li>As focus listener it keeps track of the focus to give this class and
+ derived classes the opportunity to set and remove the focus to/from
+ shapes.</li>
+ </ol>
+ </p>
+*/
+class AccessibleDocumentViewBase
+ : public AccessibleContextBase,
+ public AccessibleComponentBase,
+ public AccessibleSelectionBase,
+ public IAccessibleViewForwarderListener,
+ public css::beans::XPropertyChangeListener,
+ public css::awt::XWindowListener,
+ public css::awt::XFocusListener,
+ public css::accessibility::XAccessibleExtendedAttributes
+{
+public:
+ //===== internal ========================================================
+
+ /** Create a new object. Note that the caller has to call the
+ Init method directly after this constructor has finished.
+ @param pSdWindow
+ The window whose content is to be made accessible.
+ @param pViewShell
+ The view shell associated with the given window.
+ @param rxController
+ The controller from which to get the model.
+ @param rxParent
+ The accessible parent of the new object. Note that this parent does
+ not necessarily correspond with the parent of the given window.
+ */
+ AccessibleDocumentViewBase (
+ ::sd::Window* pSdWindow,
+ ::sd::ViewShell* pViewShell,
+ const css::uno::Reference<css::frame::XController>& rxController,
+ const css::uno::Reference<css::accessibility::XAccessible>& rxParent);
+
+ virtual ~AccessibleDocumentViewBase() override;
+
+ /** Initialize a new object. Call this method directly after creating a
+ new object. It finished the initialization begun in the constructor
+ but which needs a fully created object.
+ */
+ virtual void Init();
+
+ /** Define callback for listening to window child events of VCL.
+ Listen for creation or destruction of OLE objects.
+ */
+ DECL_LINK( WindowChildEventListener, VclWindowEvent&, void );
+
+ //===== IAccessibleViewForwarderListener ================================
+
+ /** A view forwarder change is signalled for instance when any of the
+ window events is received. Thus, instead of overriding the four
+ windowResized... methods it will be sufficient in most cases just to
+ override this method.
+ */
+ virtual void ViewForwarderChanged() override;
+
+ //===== XAccessibleContext ==============================================
+
+ virtual css::uno::Reference<css::accessibility::XAccessible> SAL_CALL
+ getAccessibleParent() override;
+
+ /** This implementation returns either 1 or 0 depending on whether there
+ is an active accessible OLE object or not.
+ */
+ virtual sal_Int32 SAL_CALL
+ getAccessibleChildCount() override;
+
+ /** This implementation either returns the active accessible OLE object
+ if it exists and the given index is 0 or throws an exception.
+ */
+ virtual css::uno::Reference<css::accessibility::XAccessible> SAL_CALL
+ getAccessibleChild (sal_Int32 nIndex) override;
+
+ //===== XAccessibleComponent ============================================
+
+ virtual css::uno::Reference<css::accessibility::XAccessible > SAL_CALL
+ getAccessibleAtPoint (const css::awt::Point& aPoint) override;
+
+ virtual css::awt::Rectangle SAL_CALL getBounds() override;
+
+ virtual css::awt::Point SAL_CALL getLocation() override;
+
+ virtual css::awt::Point SAL_CALL getLocationOnScreen() override;
+
+ virtual css::awt::Size SAL_CALL getSize() override;
+
+ //===== XInterface ======================================================
+
+ virtual css::uno::Any SAL_CALL
+ queryInterface (const css::uno::Type & rType) override;
+
+ virtual void SAL_CALL
+ acquire()
+ noexcept override;
+
+ virtual void SAL_CALL
+ release()
+ noexcept override;
+
+ //===== XServiceInfo ====================================================
+
+ /** Returns an identifier for the implementation of this object.
+ */
+ virtual OUString SAL_CALL
+ getImplementationName() override;
+
+ virtual css::uno::Sequence< OUString> SAL_CALL
+ getSupportedServiceNames() override;
+
+ //===== XTypeProvider ===================================================
+
+ virtual css::uno::Sequence< css::uno::Type> SAL_CALL
+ getTypes() override;
+
+ //===== lang::XEventListener ============================================
+
+ virtual void SAL_CALL
+ disposing (const css::lang::EventObject& rEventObject) override;
+
+ //===== XPropertyChangeListener =========================================
+
+ virtual void SAL_CALL
+ propertyChange (const css::beans::PropertyChangeEvent& rEventObject) override;
+
+ //===== XWindowListener =================================================
+
+ virtual void SAL_CALL
+ windowResized (const css::awt::WindowEvent& e) override;
+
+ virtual void SAL_CALL
+ windowMoved (const css::awt::WindowEvent& e) override;
+
+ virtual void SAL_CALL
+ windowShown (const css::lang::EventObject& e) override;
+
+ virtual void SAL_CALL
+ windowHidden (const css::lang::EventObject& e) override;
+
+ //===== XFocusListener =================================================
+
+ virtual void SAL_CALL focusGained (const css::awt::FocusEvent& e) override;
+ virtual void SAL_CALL focusLost (const css::awt::FocusEvent& e) override;
+ //----------------------------xAttribute----------------------------
+ virtual css::uno::Any SAL_CALL getExtendedAttributes() override;
+ ::sd::ViewShell* mpViewShell;
+private:
+
+ // return the member maMutex;
+ virtual ::osl::Mutex&
+ implGetMutex() override;
+
+ // return ourself as context in default case
+ virtual css::uno::Reference< css::accessibility::XAccessibleContext >
+ implGetAccessibleContext() override;
+
+ // return sal_False in default case
+ virtual bool
+ implIsSelected( sal_Int32 nAccessibleChildIndex ) override;
+
+ // return nothing in default case
+ virtual void
+ implSelect( sal_Int32 nAccessibleChildIndex, bool bSelect ) override;
+
+protected:
+ /// The API window that is made accessible.
+ css::uno::Reference< css::awt::XWindow>
+ mxWindow;
+
+ /// The controller of the window in which this view is displayed.
+ css::uno::Reference< css::frame::XController>
+ mxController;
+
+ /// Model of the document.
+ css::uno::Reference < css::frame::XModel>
+ mxModel;
+
+ // Bundle of information that is passed down the shape tree.
+ AccessibleShapeTreeInfo maShapeTreeInfo;
+
+ /// The view forwarder passed to the children manager.
+ AccessibleViewForwarder maViewForwarder;
+
+ /** Accessible OLE object. Set or removed by the
+ <member>SetAccessibleOLEObject</member> method.
+ */
+ css::uno::Reference< css::accessibility::XAccessible>
+ mxAccessibleOLEObject;
+
+ Link<VclWindowEvent&,void> maWindowLink;
+
+ // This method is called from the component helper base class while
+ // disposing.
+ virtual void SAL_CALL disposing() override;
+
+ /** Create a name string. The current name is not modified and,
+ therefore, no events are sent. This method is usually called once
+ by the <member>getAccessibleName</member> method of the base class.
+ @return
+ A name string.
+ */
+ virtual OUString
+ CreateAccessibleName () override;
+
+ /** This method is called when (after) the frame containing this
+ document has been activated. Can be used to send FOCUSED state
+ changes for the currently selected element.
+
+ Note: Currently used as a substitute for FocusGained. Should be
+ renamed in the future.
+ */
+ virtual void Activated();
+
+ /** This method is called when (before or after?) the frame containing
+ this document has been deactivated. Can be used to send FOCUSED
+ state changes for the currently selected element.
+
+ Note: Currently used as a substitute for FocusLost. Should be
+ renamed in the future.
+ */
+ virtual void Deactivated();
+
+ /** Set or remove the currently active accessible OLE object.
+ @param xOLEObject
+ If this is a valid reference then a child event is send that
+ informs the listeners of a new child. If there has already been
+ an active accessible OLE object then this is removed first and
+ appropriate events are sent.
+
+ If this is an empty reference then the currently active
+ accessible OLE object (if there is one) is removed.
+ */
+ void SetAccessibleOLEObject (
+ const css::uno::Reference<css::accessibility::XAccessible>& xOLEObject);
+
+public:
+ void SwitchViewActivated() { Activated(); }
+ virtual sal_Int32 SAL_CALL getForeground( ) override;
+
+ virtual sal_Int32 SAL_CALL getBackground( ) override;
+ virtual void impl_dispose();
+};
+
+} // end of namespace accessibility
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */