1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 20 #ifndef INCLUDED_SFX2_SOURCE_CONTROL_THUMBNAILVIEWACC_HXX 21 #define INCLUDED_SFX2_SOURCE_CONTROL_THUMBNAILVIEWACC_HXX 22 23 #include <osl/mutex.hxx> 24 #include <cppuhelper/implbase.hxx> 25 #include <cppuhelper/compbase.hxx> 26 #include <cppuhelper/basemutex.hxx> 27 28 #include <com/sun/star/lang/XUnoTunnel.hpp> 29 #include <com/sun/star/accessibility/XAccessible.hpp> 30 #include <com/sun/star/accessibility/XAccessibleContext.hpp> 31 #include <com/sun/star/accessibility/XAccessibleComponent.hpp> 32 #include <com/sun/star/accessibility/XAccessibleSelection.hpp> 33 #include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp> 34 #include <com/sun/star/lang/DisposedException.hpp> 35 36 #include <vcl/vclptr.hxx> 37 #include <vector> 38 39 class ThumbnailView; 40 class SfxThumbnailView; 41 class ThumbnailViewItem; 42 43 typedef ::cppu::WeakComponentImplHelper< 44 css::accessibility::XAccessible, 45 css::accessibility::XAccessibleEventBroadcaster, 46 css::accessibility::XAccessibleContext, 47 css::accessibility::XAccessibleComponent, 48 css::accessibility::XAccessibleSelection, 49 css::lang::XUnoTunnel > 50 ValueSetAccComponentBase; 51 52 class ThumbnailViewAcc : 53 public ::cppu::BaseMutex, 54 public ValueSetAccComponentBase 55 { 56 public: 57 58 ThumbnailViewAcc( ThumbnailView* pParent ); 59 virtual ~ThumbnailViewAcc() override; 60 61 void FireAccessibleEvent( short nEventId, 62 const css::uno::Any& rOldValue, 63 const css::uno::Any& rNewValue ); 64 HasAccessibleListeners() const65 bool HasAccessibleListeners() const { return( mxEventListeners.size() > 0 ); } 66 67 static ThumbnailViewAcc* getImplementation( const css::uno::Reference< css::uno::XInterface >& rxData ) throw(); 68 69 public: 70 71 /** Called by the corresponding ValueSet when it gets the focus. 72 Stores the new focus state and broadcasts a state change event. 73 */ 74 void GetFocus(); 75 76 /** Called by the corresponding ValueSet when it loses the focus. 77 Stores the new focus state and broadcasts a state change event. 78 */ 79 void LoseFocus(); 80 81 // XAccessible 82 virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) override; 83 84 // XAccessibleEventBroadcaster 85 virtual void SAL_CALL addAccessibleEventListener( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override; 86 virtual void SAL_CALL removeAccessibleEventListener( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override; 87 88 // XAccessibleContext 89 virtual sal_Int32 SAL_CALL getAccessibleChildCount( ) override; 90 virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i ) override; 91 virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent( ) override; 92 virtual sal_Int32 SAL_CALL getAccessibleIndexInParent( ) override; 93 virtual sal_Int16 SAL_CALL getAccessibleRole( ) override; 94 virtual OUString SAL_CALL getAccessibleDescription( ) override; 95 virtual OUString SAL_CALL getAccessibleName( ) override; 96 virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( ) override; 97 virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet( ) override; 98 virtual css::lang::Locale SAL_CALL getLocale( ) override; 99 100 // XAccessibleComponent 101 virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& aPoint ) override; 102 virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const css::awt::Point& aPoint ) override; 103 virtual css::awt::Rectangle SAL_CALL getBounds( ) override; 104 virtual css::awt::Point SAL_CALL getLocation( ) override; 105 virtual css::awt::Point SAL_CALL getLocationOnScreen( ) override; 106 virtual css::awt::Size SAL_CALL getSize( ) override; 107 virtual void SAL_CALL grabFocus( ) override; 108 virtual sal_Int32 SAL_CALL getForeground( ) override; 109 virtual sal_Int32 SAL_CALL getBackground( ) override; 110 111 // XAccessibleSelection 112 virtual void SAL_CALL selectAccessibleChild( sal_Int32 nChildIndex ) override; 113 virtual sal_Bool SAL_CALL isAccessibleChildSelected( sal_Int32 nChildIndex ) override; 114 virtual void SAL_CALL clearAccessibleSelection( ) override; 115 virtual void SAL_CALL selectAllAccessibleChildren( ) override; 116 virtual sal_Int32 SAL_CALL getSelectedAccessibleChildCount( ) override; 117 virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) override; 118 virtual void SAL_CALL deselectAccessibleChild( sal_Int32 nSelectedChildIndex ) override; 119 120 // XUnoTunnel 121 static const css::uno::Sequence< sal_Int8 >& getUnoTunnelId(); 122 virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& rId ) override; 123 124 private: 125 ::std::vector< css::uno::Reference< 126 css::accessibility::XAccessibleEventListener > > mxEventListeners; 127 VclPtr<ThumbnailView> mpParent; 128 /// The current FOCUSED state. 129 bool mbIsFocused; 130 131 /** Tell all listeners that the object is dying. This callback is 132 usually called from the WeakComponentImplHelper class. 133 */ 134 virtual void SAL_CALL disposing() override; 135 136 /** Return the number of items. This takes the None-Item into account. 137 */ 138 sal_uInt16 getItemCount() const; 139 140 /** Return the item associated with the given index. The None-Item is 141 taken into account which, when present, is taken to be the first 142 (with index 0) item. 143 @param nIndex 144 Index of the item to return. The index 0 denotes the None-Item 145 when present. 146 @return 147 Returns NULL when the given index is out of range. 148 */ 149 ThumbnailViewItem* getItem (sal_uInt16 nIndex) const; 150 151 /** Check whether or not the object has been disposed (or is in the 152 state of being disposed). If that is the case then 153 DisposedException is thrown to inform the (indirect) caller of the 154 foul deed. 155 156 @throws css::lang::DisposedException 157 */ 158 void ThrowIfDisposed(); 159 }; 160 161 class SfxThumbnailViewAcc : 162 public ::cppu::BaseMutex, 163 public ValueSetAccComponentBase 164 { 165 public: 166 167 SfxThumbnailViewAcc( SfxThumbnailView* pParent ); 168 virtual ~SfxThumbnailViewAcc() override; 169 170 public: 171 172 // XAccessible 173 virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) override; 174 175 // XAccessibleEventBroadcaster 176 virtual void SAL_CALL addAccessibleEventListener( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override; 177 virtual void SAL_CALL removeAccessibleEventListener( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override; 178 179 // XAccessibleContext 180 virtual sal_Int32 SAL_CALL getAccessibleChildCount( ) override; 181 virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i ) override; 182 virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent( ) override; 183 virtual sal_Int32 SAL_CALL getAccessibleIndexInParent( ) override; 184 virtual sal_Int16 SAL_CALL getAccessibleRole( ) override; 185 virtual OUString SAL_CALL getAccessibleDescription( ) override; 186 virtual OUString SAL_CALL getAccessibleName( ) override; 187 virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( ) override; 188 virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet( ) override; 189 virtual css::lang::Locale SAL_CALL getLocale( ) override; 190 191 // XAccessibleComponent 192 virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& aPoint ) override; 193 virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const css::awt::Point& aPoint ) override; 194 virtual css::awt::Rectangle SAL_CALL getBounds( ) override; 195 virtual css::awt::Point SAL_CALL getLocation( ) override; 196 virtual css::awt::Point SAL_CALL getLocationOnScreen( ) override; 197 virtual css::awt::Size SAL_CALL getSize( ) override; 198 virtual void SAL_CALL grabFocus( ) override; 199 virtual sal_Int32 SAL_CALL getForeground( ) override; 200 virtual sal_Int32 SAL_CALL getBackground( ) override; 201 202 // XAccessibleSelection 203 virtual void SAL_CALL selectAccessibleChild( sal_Int32 nChildIndex ) override; 204 virtual sal_Bool SAL_CALL isAccessibleChildSelected( sal_Int32 nChildIndex ) override; 205 virtual void SAL_CALL clearAccessibleSelection( ) override; 206 virtual void SAL_CALL selectAllAccessibleChildren( ) override; 207 virtual sal_Int32 SAL_CALL getSelectedAccessibleChildCount( ) override; 208 virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) override; 209 virtual void SAL_CALL deselectAccessibleChild( sal_Int32 nSelectedChildIndex ) override; 210 211 // XUnoTunnel 212 static const css::uno::Sequence< sal_Int8 >& getUnoTunnelId(); 213 virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& rId ) override; 214 215 private: 216 ::std::vector< css::uno::Reference< 217 css::accessibility::XAccessibleEventListener > > mxEventListeners; 218 SfxThumbnailView* mpParent; 219 220 /** Tell all listeners that the object is dying. This callback is 221 usually called from the WeakComponentImplHelper class. 222 */ 223 virtual void SAL_CALL disposing() override; 224 225 /** Return the number of items. This takes the None-Item into account. 226 */ 227 sal_uInt16 getItemCount() const; 228 229 /** Return the item associated with the given index. The None-Item is 230 taken into account which, when present, is taken to be the first 231 (with index 0) item. 232 @param nIndex 233 Index of the item to return. The index 0 denotes the None-Item 234 when present. 235 @return 236 Returns NULL when the given index is out of range. 237 */ 238 ThumbnailViewItem* getItem (sal_uInt16 nIndex) const; 239 240 /** Check whether or not the object has been disposed (or is in the 241 state of being disposed). If that is the case then 242 DisposedException is thrown to inform the (indirect) caller of the 243 foul deed. 244 245 @throws css::lang::DisposedException 246 */ 247 void ThrowIfDisposed(); 248 }; 249 250 251 class ThumbnailViewItemAcc : public ::cppu::WeakImplHelper< css::accessibility::XAccessible, 252 css::accessibility::XAccessibleEventBroadcaster, 253 css::accessibility::XAccessibleContext, 254 css::accessibility::XAccessibleComponent, 255 css::lang::XUnoTunnel > 256 { 257 private: 258 259 ::std::vector< css::uno::Reference< css::accessibility::XAccessibleEventListener > > 260 mxEventListeners; 261 ::osl::Mutex maMutex; 262 ThumbnailViewItem* mpParent; 263 bool const mbIsTransientChildrenDisabled; 264 265 public: 266 267 ThumbnailViewItemAcc( ThumbnailViewItem* pParent, bool bIsTransientChildrenDisabled ); 268 virtual ~ThumbnailViewItemAcc() override; 269 270 void ParentDestroyed(); 271 272 static ThumbnailViewItemAcc* getImplementation( const css::uno::Reference< css::uno::XInterface >& rxData ) throw(); 273 274 public: 275 276 // XAccessible 277 virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) override; 278 279 // XAccessibleEventBroadcaster 280 virtual void SAL_CALL addAccessibleEventListener( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override; 281 virtual void SAL_CALL removeAccessibleEventListener( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override; 282 283 // XAccessibleContext 284 virtual sal_Int32 SAL_CALL getAccessibleChildCount( ) override; 285 virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i ) override; 286 virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent( ) override; 287 virtual sal_Int32 SAL_CALL getAccessibleIndexInParent( ) override; 288 virtual sal_Int16 SAL_CALL getAccessibleRole( ) override; 289 virtual OUString SAL_CALL getAccessibleDescription( ) override; 290 virtual OUString SAL_CALL getAccessibleName( ) override; 291 virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( ) override; 292 virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet( ) override; 293 virtual css::lang::Locale SAL_CALL getLocale( ) override; 294 295 // XAccessibleComponent 296 virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& aPoint ) override; 297 virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const css::awt::Point& aPoint ) override; 298 virtual css::awt::Rectangle SAL_CALL getBounds( ) override; 299 virtual css::awt::Point SAL_CALL getLocation( ) override; 300 virtual css::awt::Point SAL_CALL getLocationOnScreen( ) override; 301 virtual css::awt::Size SAL_CALL getSize( ) override; 302 virtual void SAL_CALL grabFocus( ) override; 303 virtual sal_Int32 SAL_CALL getForeground( ) override; 304 virtual sal_Int32 SAL_CALL getBackground( ) override; 305 306 // XUnoTunnel 307 static const css::uno::Sequence< sal_Int8 >& getUnoTunnelId(); 308 virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& rId ) override; 309 }; 310 311 #endif // INCLUDED_SFX2_SOURCE_CONTROL_THUMBNAILVIEWACC_HXX 312 313 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 314