LCOV - code coverage report
Current view: top level - libreoffice/accessibility/source/extended - accessibletabbar.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 214 0.0 %
Date: 2012-12-27 Functions: 0 33 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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             : #include <accessibility/extended/accessibletabbar.hxx>
      21             : #include <svtools/tabbar.hxx>
      22             : #include <accessibility/extended/accessibletabbarpagelist.hxx>
      23             : #include <com/sun/star/accessibility/AccessibleEventId.hpp>
      24             : #include <com/sun/star/accessibility/AccessibleRole.hpp>
      25             : #include <com/sun/star/accessibility/AccessibleStateType.hpp>
      26             : #include <cppuhelper/supportsservice.hxx>
      27             : #include <unotools/accessiblestatesethelper.hxx>
      28             : #include <unotools/accessiblerelationsethelper.hxx>
      29             : #include <vcl/svapp.hxx>
      30             : #include <toolkit/awt/vclxfont.hxx>
      31             : #include <toolkit/helper/convert.hxx>
      32             : 
      33             : #include <vector>
      34             : 
      35             : 
      36             : //.........................................................................
      37             : namespace accessibility
      38             : {
      39             : //.........................................................................
      40             : 
      41             :     using namespace ::com::sun::star;
      42             :     using namespace ::com::sun::star::uno;
      43             :     using namespace ::com::sun::star::lang;
      44             :     using namespace ::com::sun::star::accessibility;
      45             :     using namespace ::comphelper;
      46             : 
      47             :     //  ----------------------------------------------------
      48             :     //  class AccessibleTabBar
      49             :     //  ----------------------------------------------------
      50             : 
      51           0 :     AccessibleTabBar::AccessibleTabBar( TabBar* pTabBar )
      52           0 :         :AccessibleTabBarBase( pTabBar )
      53             :     {
      54           0 :         if ( m_pTabBar )
      55           0 :             m_aAccessibleChildren.assign( m_pTabBar->GetAccessibleChildWindowCount() + 1, Reference< XAccessible >() );
      56           0 :     }
      57             : 
      58             :     // -----------------------------------------------------------------------------
      59             : 
      60           0 :     AccessibleTabBar::~AccessibleTabBar()
      61             :     {
      62           0 :     }
      63             : 
      64             :     // -----------------------------------------------------------------------------
      65             : 
      66           0 :     void AccessibleTabBar::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
      67             :     {
      68           0 :         Any aOldValue, aNewValue;
      69             : 
      70           0 :         switch ( rVclWindowEvent.GetId() )
      71             :         {
      72             :             case VCLEVENT_WINDOW_ENABLED:
      73             :             {
      74           0 :                 aNewValue <<= AccessibleStateType::SENSITIVE;
      75           0 :                 NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
      76           0 :                 aNewValue <<= AccessibleStateType::ENABLED;
      77           0 :                 NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
      78             :             }
      79           0 :             break;
      80             :             case VCLEVENT_WINDOW_DISABLED:
      81             :             {
      82           0 :                 aOldValue <<= AccessibleStateType::ENABLED;
      83           0 :                 NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
      84           0 :                 aOldValue <<= AccessibleStateType::SENSITIVE;
      85           0 :                 NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
      86             :             }
      87           0 :             break;
      88             :             case VCLEVENT_WINDOW_GETFOCUS:
      89             :             {
      90           0 :                 aNewValue <<= AccessibleStateType::FOCUSED;
      91           0 :                 NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
      92             :             }
      93           0 :             break;
      94             :             case VCLEVENT_WINDOW_LOSEFOCUS:
      95             :             {
      96           0 :                 aOldValue <<= AccessibleStateType::FOCUSED;
      97           0 :                 NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
      98             :             }
      99           0 :             break;
     100             :             case VCLEVENT_WINDOW_SHOW:
     101             :             {
     102           0 :                 aNewValue <<= AccessibleStateType::SHOWING;
     103           0 :                 NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
     104             :             }
     105           0 :             break;
     106             :             case VCLEVENT_WINDOW_HIDE:
     107             :             {
     108           0 :                 aOldValue <<= AccessibleStateType::SHOWING;
     109           0 :                 NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
     110             :             }
     111           0 :             break;
     112             :             default:
     113             :             {
     114           0 :                 AccessibleTabBarBase::ProcessWindowEvent( rVclWindowEvent );
     115             :             }
     116           0 :             break;
     117           0 :         }
     118           0 :     }
     119             : 
     120             :     // -----------------------------------------------------------------------------
     121             : 
     122           0 :     void AccessibleTabBar::FillAccessibleStateSet( utl::AccessibleStateSetHelper& rStateSet )
     123             :     {
     124           0 :         if ( m_pTabBar )
     125             :         {
     126           0 :             if ( m_pTabBar->IsEnabled() )
     127             :             {
     128           0 :                 rStateSet.AddState( AccessibleStateType::ENABLED );
     129           0 :                 rStateSet.AddState( AccessibleStateType::SENSITIVE );
     130             :             }
     131             : 
     132           0 :             rStateSet.AddState( AccessibleStateType::FOCUSABLE );
     133             : 
     134           0 :             if ( m_pTabBar->HasFocus() )
     135           0 :                 rStateSet.AddState( AccessibleStateType::FOCUSED );
     136             : 
     137           0 :             rStateSet.AddState( AccessibleStateType::VISIBLE );
     138             : 
     139           0 :             if ( m_pTabBar->IsVisible() )
     140           0 :                 rStateSet.AddState( AccessibleStateType::SHOWING );
     141             : 
     142           0 :             if ( m_pTabBar->GetStyle() & WB_SIZEABLE )
     143           0 :                 rStateSet.AddState( AccessibleStateType::RESIZABLE );
     144             :         }
     145           0 :     }
     146             : 
     147             :     // -----------------------------------------------------------------------------
     148             :     // OCommonAccessibleComponent
     149             :     // -----------------------------------------------------------------------------
     150             : 
     151           0 :     awt::Rectangle AccessibleTabBar::implGetBounds() throw (RuntimeException)
     152             :     {
     153           0 :         awt::Rectangle aBounds;
     154           0 :         if ( m_pTabBar )
     155           0 :             aBounds = AWTRectangle( Rectangle( m_pTabBar->GetPosPixel(), m_pTabBar->GetSizePixel() ) );
     156             : 
     157           0 :         return aBounds;
     158             :     }
     159             : 
     160             :     // -----------------------------------------------------------------------------
     161             :     // XInterface
     162             :     // -----------------------------------------------------------------------------
     163             : 
     164           0 :     IMPLEMENT_FORWARD_XINTERFACE2( AccessibleTabBar, AccessibleExtendedComponentHelper_BASE, AccessibleTabBar_BASE )
     165             : 
     166             :     // -----------------------------------------------------------------------------
     167             :     // XTypeProvider
     168             :     // -----------------------------------------------------------------------------
     169             : 
     170           0 :     IMPLEMENT_FORWARD_XTYPEPROVIDER2( AccessibleTabBar, AccessibleExtendedComponentHelper_BASE, AccessibleTabBar_BASE )
     171             : 
     172             :     // -----------------------------------------------------------------------------
     173             :     // XComponent
     174             :     // -----------------------------------------------------------------------------
     175             : 
     176           0 :     void AccessibleTabBar::disposing()
     177             :     {
     178           0 :         AccessibleTabBarBase::disposing();
     179             : 
     180             :         // dispose all children
     181           0 :         for ( sal_uInt32 i = 0; i < m_aAccessibleChildren.size(); ++i )
     182             :         {
     183           0 :             Reference< XComponent > xComponent( m_aAccessibleChildren[i], UNO_QUERY );
     184           0 :             if ( xComponent.is() )
     185           0 :                 xComponent->dispose();
     186           0 :         }
     187           0 :         m_aAccessibleChildren.clear();
     188           0 :     }
     189             : 
     190             :     // -----------------------------------------------------------------------------
     191             :     // XServiceInfo
     192             :     // -----------------------------------------------------------------------------
     193             : 
     194           0 :     OUString AccessibleTabBar::getImplementationName() throw (RuntimeException)
     195             :     {
     196           0 :         return OUString( "com.sun.star.comp.svtools.AccessibleTabBar" );
     197             :     }
     198             : 
     199             :     // -----------------------------------------------------------------------------
     200             : 
     201           0 :     sal_Bool AccessibleTabBar::supportsService( const OUString& rServiceName ) throw (RuntimeException)
     202             :     {
     203           0 :         return cppu::supportsService(this, rServiceName);
     204             :     }
     205             : 
     206             :     // -----------------------------------------------------------------------------
     207             : 
     208           0 :     Sequence< OUString > AccessibleTabBar::getSupportedServiceNames() throw (RuntimeException)
     209             :     {
     210           0 :         Sequence< OUString > aNames(1);
     211           0 :         aNames[0] = "com.sun.star.awt.AccessibleTabBar";
     212           0 :         return aNames;
     213             :     }
     214             : 
     215             :     // -----------------------------------------------------------------------------
     216             :     // XAccessible
     217             :     // -----------------------------------------------------------------------------
     218             : 
     219           0 :     Reference< XAccessibleContext > AccessibleTabBar::getAccessibleContext(  ) throw (RuntimeException)
     220             :     {
     221           0 :         OExternalLockGuard aGuard( this );
     222             : 
     223           0 :         return this;
     224             :     }
     225             : 
     226             :     // -----------------------------------------------------------------------------
     227             :     // XAccessibleContext
     228             :     // -----------------------------------------------------------------------------
     229             : 
     230           0 :     sal_Int32 AccessibleTabBar::getAccessibleChildCount() throw (RuntimeException)
     231             :     {
     232           0 :         OExternalLockGuard aGuard( this );
     233             : 
     234           0 :         return m_aAccessibleChildren.size();
     235             :     }
     236             : 
     237             :     // -----------------------------------------------------------------------------
     238             : 
     239           0 :     Reference< XAccessible > AccessibleTabBar::getAccessibleChild( sal_Int32 i ) throw (IndexOutOfBoundsException, RuntimeException)
     240             :     {
     241           0 :         OExternalLockGuard aGuard( this );
     242             : 
     243           0 :         if ( i < 0 || i >= getAccessibleChildCount() )
     244           0 :             throw IndexOutOfBoundsException();
     245             : 
     246           0 :         Reference< XAccessible > xChild = m_aAccessibleChildren[i];
     247           0 :         if ( !xChild.is() )
     248             :         {
     249           0 :             if ( m_pTabBar )
     250             :             {
     251           0 :                 sal_Int32 nCount = m_pTabBar->GetAccessibleChildWindowCount();
     252             : 
     253           0 :                 if ( i < nCount )
     254             :                 {
     255           0 :                     Window* pChild = m_pTabBar->GetAccessibleChildWindow( (sal_uInt16)i );
     256           0 :                     if ( pChild )
     257           0 :                         xChild = pChild->GetAccessible();
     258             :                 }
     259           0 :                 else if ( i == nCount )
     260             :                 {
     261           0 :                     xChild = new AccessibleTabBarPageList( m_pTabBar, i );
     262             :                 }
     263             : 
     264             :                 // insert into child list
     265           0 :                 m_aAccessibleChildren[i] = xChild;
     266             :             }
     267             :         }
     268             : 
     269           0 :         return xChild;
     270             :     }
     271             : 
     272             :     // -----------------------------------------------------------------------------
     273             : 
     274           0 :     Reference< XAccessible > AccessibleTabBar::getAccessibleParent(  ) throw (RuntimeException)
     275             :     {
     276           0 :         OExternalLockGuard aGuard( this );
     277             : 
     278           0 :         Reference< XAccessible > xParent;
     279           0 :         if ( m_pTabBar )
     280             :         {
     281           0 :             Window* pParent = m_pTabBar->GetAccessibleParentWindow();
     282           0 :             if ( pParent )
     283           0 :                 xParent = pParent->GetAccessible();
     284             :         }
     285             : 
     286           0 :         return xParent;
     287             :     }
     288             : 
     289             :     // -----------------------------------------------------------------------------
     290             : 
     291           0 :     sal_Int32 AccessibleTabBar::getAccessibleIndexInParent(  ) throw (RuntimeException)
     292             :     {
     293           0 :         OExternalLockGuard aGuard( this );
     294             : 
     295           0 :         sal_Int32 nIndexInParent = -1;
     296           0 :         if ( m_pTabBar )
     297             :         {
     298           0 :             Window* pParent = m_pTabBar->GetAccessibleParentWindow();
     299           0 :             if ( pParent )
     300             :             {
     301           0 :                 for ( sal_uInt16 i = 0, nCount = pParent->GetAccessibleChildWindowCount(); i < nCount; ++i )
     302             :                 {
     303           0 :                     Window* pChild = pParent->GetAccessibleChildWindow( i );
     304           0 :                     if ( pChild == static_cast< Window* >( m_pTabBar ) )
     305             :                     {
     306           0 :                         nIndexInParent = i;
     307           0 :                         break;
     308             :                     }
     309             :                 }
     310             :             }
     311             :         }
     312             : 
     313           0 :         return nIndexInParent;
     314             :     }
     315             : 
     316             :     // -----------------------------------------------------------------------------
     317             : 
     318           0 :     sal_Int16 AccessibleTabBar::getAccessibleRole(  ) throw (RuntimeException)
     319             :     {
     320           0 :         OExternalLockGuard aGuard( this );
     321             : 
     322           0 :         return AccessibleRole::PANEL;
     323             :     }
     324             : 
     325             :     // -----------------------------------------------------------------------------
     326             : 
     327           0 :     OUString AccessibleTabBar::getAccessibleDescription( ) throw (RuntimeException)
     328             :     {
     329           0 :         OExternalLockGuard aGuard( this );
     330             : 
     331           0 :         OUString sDescription;
     332           0 :         if ( m_pTabBar )
     333           0 :             sDescription = m_pTabBar->GetAccessibleDescription();
     334             : 
     335           0 :         return sDescription;
     336             :     }
     337             : 
     338             :     // -----------------------------------------------------------------------------
     339             : 
     340           0 :     OUString AccessibleTabBar::getAccessibleName(  ) throw (RuntimeException)
     341             :     {
     342           0 :         OExternalLockGuard aGuard( this );
     343             : 
     344           0 :         OUString sName;
     345           0 :         if ( m_pTabBar )
     346           0 :             sName = m_pTabBar->GetAccessibleName();
     347             : 
     348           0 :         return sName;
     349             :     }
     350             : 
     351             :     // -----------------------------------------------------------------------------
     352             : 
     353           0 :     Reference< XAccessibleRelationSet > AccessibleTabBar::getAccessibleRelationSet(  ) throw (RuntimeException)
     354             :     {
     355           0 :         OExternalLockGuard aGuard( this );
     356             : 
     357           0 :         utl::AccessibleRelationSetHelper* pRelationSetHelper = new utl::AccessibleRelationSetHelper;
     358           0 :         Reference< XAccessibleRelationSet > xSet = pRelationSetHelper;
     359           0 :         return xSet;
     360             :     }
     361             : 
     362             :     // -----------------------------------------------------------------------------
     363             : 
     364           0 :     Reference< XAccessibleStateSet > AccessibleTabBar::getAccessibleStateSet(  ) throw (RuntimeException)
     365             :     {
     366           0 :         OExternalLockGuard aGuard( this );
     367             : 
     368           0 :         utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper;
     369           0 :         Reference< XAccessibleStateSet > xSet = pStateSetHelper;
     370             : 
     371           0 :         if ( !rBHelper.bDisposed && !rBHelper.bInDispose )
     372             :         {
     373           0 :             FillAccessibleStateSet( *pStateSetHelper );
     374             :         }
     375             :         else
     376             :         {
     377           0 :             pStateSetHelper->AddState( AccessibleStateType::DEFUNC );
     378             :         }
     379             : 
     380           0 :         return xSet;
     381             :     }
     382             : 
     383             :     // -----------------------------------------------------------------------------
     384             : 
     385           0 :     Locale AccessibleTabBar::getLocale(  ) throw (IllegalAccessibleComponentStateException, RuntimeException)
     386             :     {
     387           0 :         OExternalLockGuard aGuard( this );
     388             : 
     389           0 :         return Application::GetSettings().GetLanguageTag().getLocale();
     390             :     }
     391             : 
     392             :     // -----------------------------------------------------------------------------
     393             :     // XAccessibleComponent
     394             :     // -----------------------------------------------------------------------------
     395             : 
     396           0 :     Reference< XAccessible > AccessibleTabBar::getAccessibleAtPoint( const awt::Point& rPoint ) throw (RuntimeException)
     397             :     {
     398           0 :         OExternalLockGuard aGuard( this );
     399             : 
     400           0 :         Reference< XAccessible > xChild;
     401           0 :         for ( sal_uInt32 i = 0; i < m_aAccessibleChildren.size(); ++i )
     402             :         {
     403           0 :             Reference< XAccessible > xAcc = getAccessibleChild( i );
     404           0 :             if ( xAcc.is() )
     405             :             {
     406           0 :                 Reference< XAccessibleComponent > xComp( xAcc->getAccessibleContext(), UNO_QUERY );
     407           0 :                 if ( xComp.is() )
     408             :                 {
     409           0 :                     Rectangle aRect = VCLRectangle( xComp->getBounds() );
     410           0 :                     Point aPos = VCLPoint( rPoint );
     411           0 :                     if ( aRect.IsInside( aPos ) )
     412             :                     {
     413           0 :                         xChild = xAcc;
     414             :                         break;
     415             :                     }
     416           0 :                 }
     417             :             }
     418           0 :         }
     419             : 
     420           0 :         return xChild;
     421             :     }
     422             : 
     423             :     // -----------------------------------------------------------------------------
     424             : 
     425           0 :     void AccessibleTabBar::grabFocus(  ) throw (RuntimeException)
     426             :     {
     427           0 :         OExternalLockGuard aGuard( this );
     428             : 
     429           0 :         if ( m_pTabBar )
     430           0 :             m_pTabBar->GrabFocus();
     431           0 :     }
     432             : 
     433             :     // -----------------------------------------------------------------------------
     434             : 
     435           0 :     sal_Int32 AccessibleTabBar::getForeground(  ) throw (RuntimeException)
     436             :     {
     437           0 :         OExternalLockGuard aGuard( this );
     438             : 
     439           0 :         sal_Int32 nColor = 0;
     440           0 :         if ( m_pTabBar )
     441             :         {
     442           0 :             if ( m_pTabBar->IsControlForeground() )
     443           0 :                 nColor = m_pTabBar->GetControlForeground().GetColor();
     444             :             else
     445             :             {
     446           0 :                 Font aFont;
     447           0 :                 if ( m_pTabBar->IsControlFont() )
     448           0 :                     aFont = m_pTabBar->GetControlFont();
     449             :                 else
     450           0 :                     aFont = m_pTabBar->GetFont();
     451           0 :                 nColor = aFont.GetColor().GetColor();
     452             :             }
     453             :         }
     454             : 
     455           0 :         return nColor;
     456             :     }
     457             : 
     458             :     // -----------------------------------------------------------------------------
     459             : 
     460           0 :     sal_Int32 AccessibleTabBar::getBackground(  ) throw (RuntimeException)
     461             :     {
     462           0 :         OExternalLockGuard aGuard( this );
     463             : 
     464           0 :         sal_Int32 nColor = 0;
     465           0 :         if ( m_pTabBar )
     466             :         {
     467           0 :             if ( m_pTabBar->IsControlBackground() )
     468           0 :                 nColor = m_pTabBar->GetControlBackground().GetColor();
     469             :             else
     470           0 :                 nColor = m_pTabBar->GetBackground().GetColor().GetColor();
     471             :         }
     472             : 
     473           0 :         return nColor;
     474             :     }
     475             : 
     476             :     // -----------------------------------------------------------------------------
     477             :     // XAccessibleExtendedComponent
     478             :     // -----------------------------------------------------------------------------
     479             : 
     480           0 :     Reference< awt::XFont > AccessibleTabBar::getFont(  ) throw (RuntimeException)
     481             :     {
     482           0 :         OExternalLockGuard aGuard( this );
     483             : 
     484           0 :         Reference< awt::XFont > xFont;
     485           0 :         if ( m_pTabBar )
     486             :         {
     487           0 :             Reference< awt::XDevice > xDev( m_pTabBar->GetComponentInterface(), UNO_QUERY );
     488           0 :             if ( xDev.is() )
     489             :             {
     490           0 :                 Font aFont;
     491           0 :                 if ( m_pTabBar->IsControlFont() )
     492           0 :                     aFont = m_pTabBar->GetControlFont();
     493             :                 else
     494           0 :                     aFont = m_pTabBar->GetFont();
     495           0 :                 VCLXFont* pVCLXFont = new VCLXFont;
     496           0 :                 pVCLXFont->Init( *xDev.get(), aFont );
     497           0 :                 xFont = pVCLXFont;
     498           0 :             }
     499             :         }
     500             : 
     501           0 :         return xFont;
     502             :     }
     503             : 
     504             :     // -----------------------------------------------------------------------------
     505             : 
     506           0 :     OUString AccessibleTabBar::getTitledBorderText(  ) throw (RuntimeException)
     507             :     {
     508           0 :         OExternalLockGuard aGuard( this );
     509             : 
     510           0 :         OUString sText;
     511           0 :         if ( m_pTabBar )
     512           0 :             sText = m_pTabBar->GetText();
     513             : 
     514           0 :         return sText;
     515             :     }
     516             : 
     517             :     // -----------------------------------------------------------------------------
     518             : 
     519           0 :     OUString AccessibleTabBar::getToolTipText(  ) throw (RuntimeException)
     520             :     {
     521           0 :         OExternalLockGuard aGuard( this );
     522             : 
     523           0 :         OUString sText;
     524           0 :         if ( m_pTabBar )
     525           0 :             sText = m_pTabBar->GetQuickHelpText();
     526             : 
     527           0 :         return sText;
     528             :     }
     529             : 
     530             :     // -----------------------------------------------------------------------------
     531             : 
     532             : //.........................................................................
     533             : }   // namespace accessibility
     534             : //.........................................................................
     535             : 
     536             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10