xref: /trunk/main/sd/source/ui/inc/AccessibleSlideView.hxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef SD_ACCESSIBILITY_ACCESSIBLE_SLIDE_VIEW_HXX
25 #define SD_ACCESSIBILITY_ACCESSIBLE_SLIDE_VIEW_HXX
26 
27 #include <cppuhelper/implbase6.hxx>
28 #include <cppuhelper/implbase9.hxx>
29 //#include <cppuhelper/implbase7.hxx>
30 #include "SlideView.hxx"
31 #include <com/sun/star/lang/XUnoTunnel.hpp>
32 #include <com/sun/star/accessibility/XAccessible.hpp>
33 #include <com/sun/star/accessibility/XAccessibleContext.hpp>
34 #include <com/sun/star/accessibility/XAccessibleComponent.hpp>
35 #include <com/sun/star/accessibility/XAccessibleSelection.hpp>
36 #include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp>
37 #include <com/sun/star/lang/XServiceInfo.hpp>
38 
39 #include <com/sun/star/accessibility/XAccessibleExtendedAttributes.hpp>
40 #include <vector>
41 
42 class SdDrawDocument;
43 class AccessibleSlideView;
44 
45 namespace sd {
46 class SlideView;
47 class Window;
48 }
49 
50 // -----------------------------
51 // - AccessibleSlideViewObject -
52 // -----------------------------
53 
54 class AccessibleSlideViewObject : public ::cppu::WeakImplHelper6<
55     ::com::sun::star::lang::XUnoTunnel,
56     ::com::sun::star::accessibility::XAccessible,
57     ::com::sun::star::accessibility::XAccessibleEventBroadcaster,
58     ::com::sun::star::accessibility::XAccessibleContext,
59     ::com::sun::star::accessibility::XAccessibleComponent,
60     ::com::sun::star::lang::XServiceInfo >
61 {
62 private:
63 
64     ::osl::Mutex                                                                                                            maMutex;
65     ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >                                mxParent;
66     AccessibleSlideView*                                                                                                    mpManager;
67     /// client id in the AccessibleEventNotifier queue
68     sal_uInt32                                                                                                              mnClientId;
69     sal_uInt16                                                                                                              mnPage;
70     sal_Bool                                                                                                                mbVisible;
71     sal_Bool                                                                                                                mbValid;
72 
73 private:
74 
75     // Misc
76     static const ::com::sun::star::uno::Sequence< sal_Int8 >& getUnoTunnelId();
77 
78     // XUnoTunnel
79     virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& rId );
80 
81     // XAccessible
82     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext(  );
83 
84     // XAccessibleEventBroadcaster
85     virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleEventListener >& xListener );
86     virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleEventListener >& xListener );
87 
88     // XAccessibleContext
89     virtual sal_Int32 SAL_CALL getAccessibleChildCount(  );
90     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i );
91     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleParent(  );
92     virtual sal_Int32 SAL_CALL getAccessibleIndexInParent(  );
93     virtual sal_Int16 SAL_CALL getAccessibleRole(  );
94     virtual ::rtl::OUString SAL_CALL getAccessibleDescription(  );
95     virtual ::rtl::OUString SAL_CALL getAccessibleName(  );
96     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet(  );
97     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet(  );
98     virtual ::com::sun::star::lang::Locale SAL_CALL getLocale(  );
99 
100     // XAccessibleComponent
101     virtual sal_Bool SAL_CALL containsPoint( const ::com::sun::star::awt::Point& aPoint );
102     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const ::com::sun::star::awt::Point& aPoint );
103     virtual ::com::sun::star::awt::Rectangle SAL_CALL getBounds(  );
104     virtual ::com::sun::star::awt::Point SAL_CALL getLocation(  );
105     virtual ::com::sun::star::awt::Point SAL_CALL getLocationOnScreen(  );
106     virtual ::com::sun::star::awt::Size SAL_CALL getSize(  );
107     virtual void SAL_CALL grabFocus(  );
108 
109     virtual sal_Int32 SAL_CALL getForeground (void);
110 
111     virtual sal_Int32 SAL_CALL getBackground (void);
112 
113     //=====  XServiceInfo  ====================================================
114 
115     /** Returns an identifier for the implementation of this object.
116     */
117     virtual ::rtl::OUString SAL_CALL
118         getImplementationName (void);
119 
120     /** Return whether the specified service is supported by this class.
121     */
122     virtual sal_Bool SAL_CALL
123         supportsService (const ::rtl::OUString& sServiceName);
124 
125     /** Returns a list of all supported services.
126     */
127     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL
128         getSupportedServiceNames (void);
129 
130 public:
131 
132     static AccessibleSlideViewObject* getImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rxData ) throw();
133 
134 public:
135 
136                                 AccessibleSlideViewObject( const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >& rxParent, sal_uInt16 nPage, sal_Bool bVisible );
137                                 ~AccessibleSlideViewObject();
138 
139     void                        FireAccessibleEvent( short nEventId, const ::com::sun::star::uno::Any& rOldValue, const ::com::sun::star::uno::Any& rNewValue );
140 
141     /** This method acts like a dispose call.  It sends a disposing to all
142         of its listeners.  It may be called twice.
143     */
144     void Destroyed (void);
145 
GetPageNum() const146     sal_uInt16                  GetPageNum() const { return mnPage; }
147 
148     void                        SetVisible( sal_Bool bVisible );
149     sal_Bool                    IsVisible() const;
150 };
151 
152 // -----------------------
153 // - AccessibleSlideView -
154 // -----------------------
155 
156 class AccessibleSlideView : public ::cppu::WeakImplHelper9<
157     ::com::sun::star::lang::XUnoTunnel,
158     ::com::sun::star::accessibility::XAccessible,
159     ::com::sun::star::accessibility::XAccessibleEventBroadcaster,
160     ::com::sun::star::accessibility::XAccessibleContext,
161     ::com::sun::star::accessibility::XAccessibleComponent,
162     ::com::sun::star::accessibility::XAccessibleSelection,
163     ::com::sun::star::lang::XServiceInfo
164     ,::com::sun::star::accessibility::XAccessibleExtendedAttributes
165     ,::com::sun::star::awt::XFocusListener >
166 {
167 public:
168 
169     static AccessibleSlideView* getImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rxData ) throw();
170 
171     AccessibleSlideView(
172         SdDrawDocument& rDoc,
173         ::sd::SlideView& rView,
174         ::sd::Window& rParentWindow);
175     virtual ~AccessibleSlideView (void);
176 
177     void                        FireAccessibleEvent( short nEventId, const ::com::sun::star::uno::Any& rOldValue, const ::com::sun::star::uno::Any& rNewValue );
178 
179     /** This method acts like a dispose call.  It sends a disposing to all
180         of its listeners.  It may be called twice.
181     */
182     void Destroyed (void);
183 
GetDrawDocument() const184     SdDrawDocument*             GetDrawDocument() const { return mpDoc; }
GetSlideView() const185     ::sd::SlideView* GetSlideView() const { return mpView; }
GetParentWindow() const186     ::sd::Window* GetParentWindow() const { return mpParentWindow; }
187 
188     void                        SetPageVisible( sal_uInt16 nPage, sal_Bool bVisible );
189     void                        Reset();
190     void                        FocusHasChanged( sal_uInt16 nOldFocusPage, sal_uInt16 nNewFocusPage );
191     void            SelectionHasChanged (sal_uInt16 nPage, sal_Bool bSelect );
192     //=====  XFocusListener  =================================================
193     virtual void SAL_CALL focusGained (const ::com::sun::star::awt::FocusEvent& e);
194     virtual void SAL_CALL focusLost (const ::com::sun::star::awt::FocusEvent& e);
195     //=====  lang::XEventListener  ============================================
196     virtual void SAL_CALL disposing (const struct com::sun::star::lang::EventObject &);
197     // This method is called from the component helper base class while disposing.
198     virtual void SAL_CALL disposing (void);
199 private:
200     ::osl::Mutex maMutex;
201     ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > >               maSlidePageObjects;
202     SdDrawDocument* mpDoc;
203     ::sd::SlideView* mpView;
204     ::sd::Window* mpParentWindow;
205      /// client id in the AccessibleEventNotifier queue
206     sal_uInt32 mnClientId;
207     sal_uInt32  nFocusPageIndex;
208     ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow>           mxWindow;
209 
210     // internal
211     static const ::com::sun::star::uno::Sequence< sal_Int8 >&                                   getUnoTunnelId();
212     sal_Int32                                                                                   ImplGetVisibleChildCount() const;
213     ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >    ImplGetVisibleChild( sal_Int32 nVisibleChild ) const;
214 
215     // XUnoTunnel
216     virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& rId );
217 
218     // XAccessible
219     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext(  );
220 
221     // XAccessibleEventBroadcaster
222     virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleEventListener >& xListener );
223     virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleEventListener >& xListener );
224 
225     // XAccessibleContext
226     virtual sal_Int32 SAL_CALL getAccessibleChildCount(  );
227     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i );
228     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleParent(  );
229     virtual sal_Int32 SAL_CALL getAccessibleIndexInParent(  );
230     virtual sal_Int16 SAL_CALL getAccessibleRole(  );
231     virtual ::rtl::OUString SAL_CALL getAccessibleDescription(  );
232     virtual ::rtl::OUString SAL_CALL getAccessibleName(  );
233     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet(  );
234     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet(  );
235     virtual ::com::sun::star::lang::Locale SAL_CALL getLocale(  );
236 
237     // XAccessibleComponent
238     virtual sal_Bool SAL_CALL containsPoint( const ::com::sun::star::awt::Point& aPoint );
239     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const ::com::sun::star::awt::Point& aPoint );
240     virtual ::com::sun::star::awt::Rectangle SAL_CALL getBounds(  );
241     virtual ::com::sun::star::awt::Point SAL_CALL getLocation(  );
242     virtual ::com::sun::star::awt::Point SAL_CALL getLocationOnScreen(  );
243     virtual ::com::sun::star::awt::Size SAL_CALL getSize(  );
244     virtual void SAL_CALL grabFocus(  );
245 
246     virtual sal_Int32 SAL_CALL getForeground (void);
247 
248     virtual sal_Int32 SAL_CALL getBackground (void);
249 
250     // XAccessibleSelection
251     virtual void SAL_CALL selectAccessibleChild( sal_Int32 nChildIndex );
252     virtual sal_Bool SAL_CALL isAccessibleChildSelected( sal_Int32 nChildIndex );
253     virtual void SAL_CALL clearAccessibleSelection(  );
254     virtual void SAL_CALL selectAllAccessibleChildren(  );
255     virtual sal_Int32 SAL_CALL getSelectedAccessibleChildCount(  );
256     virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex );
257     virtual void SAL_CALL deselectAccessibleChild( sal_Int32 nSelectedChildIndex );
258 
259     //=====  XServiceInfo  ====================================================
260 
261     //----------------------------xAttribute----------------------------
262     virtual com::sun::star::uno::Any SAL_CALL getExtendedAttributes() ;
263     /** Returns an identifier for the implementation of this object.
264     */
265     virtual ::rtl::OUString SAL_CALL
266         getImplementationName (void);
267 
268     /** Return whether the specified service is supported by this class.
269     */
270     virtual sal_Bool SAL_CALL
271         supportsService (const ::rtl::OUString& sServiceName);
272 
273     /** Returns a list of all supported services.
274     */
275     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString> SAL_CALL
276         getSupportedServiceNames (void);
277 
278 };
279 
280 #endif
281