| /************************************************************** |
| * |
| * 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 COMPHELPER_ACCIMPLACCESS_HXX |
| #define COMPHELPER_ACCIMPLACCESS_HXX |
| |
| #include <cppuhelper/implbase1.hxx> |
| #include <com/sun/star/lang/XUnoTunnel.hpp> |
| #include "comphelper/comphelperdllapi.h" |
| |
| // forward declaration |
| namespace com { namespace sun { namespace star { namespace accessibility { |
| class XAccessible; |
| class XAccessibleContext; |
| }}}} |
| |
| //......................................................................... |
| namespace comphelper |
| { |
| //......................................................................... |
| |
| //===================================================================== |
| //= OAccessibleImplementationAccess |
| //===================================================================== |
| typedef ::cppu::ImplHelper1 < ::com::sun::star::lang::XUnoTunnel |
| > OAccImpl_Base; |
| struct OAccImpl_Impl; |
| |
| /** This is a helper class which allows accessing several aspects of the the implementation |
| of an AccessibleContext. |
| |
| <p>For instance, when you want to implement a context which can be re-parented, you: |
| <ul><li>derive your class from <type>OAccessibleImplementationAccess</type></li> |
| <li>use <code>setAccessibleParent( <em>component</em>, <em>new_parent</em> )</code> |
| </ul> |
| </p> |
| |
| <p>Another aspect which can be controlled from the outside are states. If you have a class which |
| has only partial control over it's states, you may consider deriving from OAccessibleImplementationAccess.<br/> |
| For instance, say you have an implementation (say component A) which is <em>unable</em> to know or to |
| determine if the represented object is selected, but another component (say B) which uses A (and integrates |
| it into a tree of accessibility components) is.<br/> |
| In this case, if A is derived from OAccessibleImplementationAccess, B can manipulate this |
| foreign-controlled state flag "SELECTED" by using the static helper methods on this class.</p> |
| |
| <p>Please note that the support for foreign controlled states is rather restrictive: You can't have states |
| which <em>may be</em> controlled by a foreign instances. This is implied by the fact that a derived |
| class can ask for states which are <em>set</em> only, not for the ones which are <em>reset</em> currently. |
| </p> |
| */ |
| class COMPHELPER_DLLPUBLIC OAccessibleImplementationAccess : public OAccImpl_Base |
| { |
| private: |
| OAccImpl_Impl* m_pImpl; |
| |
| protected: |
| /// retrieves the parent previously set via <method>setAccessibleParent</method> |
| ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > |
| implGetForeignControlledParent( ) const; |
| |
| /** retrieves the set of currently set states which are controlled by a foreign instance |
| @return |
| a bit mask, where a set bit 2^n means that the AccessibleStateType n has been set |
| */ |
| sal_Int64 implGetForeignControlledStates( ) const; |
| |
| /// sets the accessible parent component |
| virtual void setAccessibleParent( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >& _rxAccParent ); |
| |
| /// sets or resets a bit of the foreign controlled states |
| virtual void setStateBit( const sal_Int16 _nState, const sal_Bool _bSet ); |
| |
| protected: |
| OAccessibleImplementationAccess( ); |
| virtual ~OAccessibleImplementationAccess( ); |
| |
| // XUnoTunnel |
| virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& _rIdentifier ) throw (::com::sun::star::uno::RuntimeException); |
| |
| public: |
| /** tries to access the implementation of an OAccessibleImplementationAccess derivee which is known as |
| interface only. |
| |
| @param _rxComponent |
| is the component which should be examined. |
| @return |
| the pointer to the implementation, if successfull. The only known error condition so far |
| is an invalid context (which means it is <NULL/>, or the implementation is not derived |
| from <type>OAccessibleImplementationAccess</type>, or retrieving the implementation failed). |
| */ |
| static OAccessibleImplementationAccess* getImplementation( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext >& _rxComponent |
| ); |
| |
| |
| /** sets the parent for a derived implementation |
| |
| @param _rxComponent |
| is the component which's new parent should be set |
| @param _rxNewParent |
| is the new parent of the component |
| @return |
| <TRUE/> in case of success, <FALSE/> otherwise. For error condition please look at |
| <method>getImplementation</method>. |
| */ |
| static sal_Bool setAccessibleParent( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext >& _rxComponent, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >& _rxNewParent |
| ); |
| |
| /** sets or resets a state bit in the set of foreign-controlled states of the component. |
| |
| @param _rxComponent |
| is the component which's state is to be (re)set |
| @param _nState |
| the state bit which should be affected. This should be one of the respective UNO constants. |
| @param _bSet |
| <TRUE/> if the bit should be set, <FALSE/> otherwise |
| @return |
| <TRUE/> in case of success, <FALSE/> otherwise. For error condition please look at |
| <method>getImplementation</method>. |
| */ |
| static sal_Bool setForeignControlledState( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext >& _rxComponent, |
| const sal_Int16 _nState, |
| const sal_Bool _bSet |
| ); |
| |
| |
| private: |
| COMPHELPER_DLLPRIVATE static const ::com::sun::star::uno::Sequence< sal_Int8 >& getUnoTunnelImplementationId(); |
| }; |
| |
| //......................................................................... |
| } // namespace comphelper |
| //......................................................................... |
| |
| |
| #endif // COMPHELPER_ACCIMPLACCESS_HXX |
| |
| |