LCOV - code coverage report
Current view: top level - sc/source/ui/Accessibility - AccessibleCellBase.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 119 336 35.4 %
Date: 2015-06-13 12:38:46 Functions: 17 26 65.4 %
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 "AccessibleCellBase.hxx"
      21             : #include "attrib.hxx"
      22             : #include "scitems.hxx"
      23             : #include "miscuno.hxx"
      24             : #include "document.hxx"
      25             : #include "docfunc.hxx"
      26             : #include "docsh.hxx"
      27             : #include "formulacell.hxx"
      28             : #include "scresid.hxx"
      29             : #include "sc.hrc"
      30             : #include "unonames.hxx"
      31             : #include "detfunc.hxx"
      32             : #include "chgtrack.hxx"
      33             : 
      34             : #include <com/sun/star/accessibility/AccessibleRole.hpp>
      35             : #include <com/sun/star/accessibility/AccessibleStateType.hpp>
      36             : #include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
      37             : #include <com/sun/star/sheet/XSpreadsheet.hpp>
      38             : #include <com/sun/star/sheet/XSheetAnnotation.hpp>
      39             : #include <com/sun/star/sheet/XSheetAnnotationAnchor.hpp>
      40             : #include <com/sun/star/text/XSimpleText.hpp>
      41             : #include <editeng/brushitem.hxx>
      42             : #include <comphelper/sequence.hxx>
      43             : #include <comphelper/servicehelper.hxx>
      44             : #include <sfx2/objsh.hxx>
      45             : #include <vcl/svapp.hxx>
      46             : 
      47             : #include <float.h>
      48             : 
      49             : using namespace ::com::sun::star;
      50             : using namespace ::com::sun::star::accessibility;
      51             : 
      52             : //=====  internal  ============================================================
      53             : 
      54          16 : ScAccessibleCellBase::ScAccessibleCellBase(
      55             :         const uno::Reference<XAccessible>& rxParent,
      56             :         ScDocument* pDoc,
      57             :         const ScAddress& rCellAddress,
      58             :         sal_Int32 nIndex)
      59             :     :
      60             :     ScAccessibleContextBase(rxParent, AccessibleRole::TABLE_CELL),
      61             :     maCellAddress(rCellAddress),
      62             :     mpDoc(pDoc),
      63          16 :     mnIndex(nIndex)
      64             : {
      65          16 : }
      66             : 
      67          16 : ScAccessibleCellBase::~ScAccessibleCellBase()
      68             : {
      69          16 : }
      70             : 
      71             :     //=====  XAccessibleComponent  ============================================
      72             : 
      73          21 : bool SAL_CALL ScAccessibleCellBase::isVisible()
      74             :     throw (uno::RuntimeException, std::exception)
      75             : {
      76          21 :      SolarMutexGuard aGuard;
      77          21 :     IsObjectValid();
      78             :     // test whether the cell is hidden (column/row - hidden/filtered)
      79          21 :     bool bVisible(true);
      80          21 :     if (mpDoc)
      81             :     {
      82          21 :         bool bColHidden = mpDoc->ColHidden(maCellAddress.Col(), maCellAddress.Tab());
      83          21 :         bool bRowHidden = mpDoc->RowHidden(maCellAddress.Row(), maCellAddress.Tab());
      84          21 :         bool bColFiltered = mpDoc->ColFiltered(maCellAddress.Col(), maCellAddress.Tab());
      85          21 :         bool bRowFiltered = mpDoc->RowFiltered(maCellAddress.Row(), maCellAddress.Tab());
      86             : 
      87          21 :         if (bColHidden || bColFiltered || bRowHidden || bRowFiltered)
      88           0 :             bVisible = false;
      89             :     }
      90          21 :     return bVisible;
      91             : }
      92             : 
      93           1 : sal_Int32 SAL_CALL ScAccessibleCellBase::getForeground()
      94             :     throw (uno::RuntimeException, std::exception)
      95             : {
      96           1 :     SolarMutexGuard aGuard;
      97           1 :     IsObjectValid();
      98           1 :     sal_Int32 nColor(0);
      99           1 :     if (mpDoc)
     100             :     {
     101           1 :         SfxObjectShell* pObjSh = mpDoc->GetDocumentShell();
     102           1 :         if ( pObjSh )
     103             :         {
     104           1 :             uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
     105           1 :             if ( xSpreadDoc.is() )
     106             :             {
     107           1 :                 uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
     108           2 :                 uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
     109           1 :                 if ( xIndex.is() )
     110             :                 {
     111           1 :                     uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
     112           2 :                     uno::Reference<sheet::XSpreadsheet> xTable;
     113           1 :                     if (aTable>>=xTable)
     114             :                     {
     115           1 :                         uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
     116           1 :                         if (xCell.is())
     117             :                         {
     118           1 :                             uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
     119           1 :                             if (xCellProps.is())
     120             :                             {
     121           1 :                                 uno::Any aAny = xCellProps->getPropertyValue(OUString(SC_UNONAME_CCOLOR));
     122           1 :                                 aAny >>= nColor;
     123           1 :                             }
     124           1 :                         }
     125           1 :                     }
     126           1 :                 }
     127           1 :             }
     128             :         }
     129             :     }
     130           1 :     return nColor;
     131             : }
     132             : 
     133           1 : sal_Int32 SAL_CALL ScAccessibleCellBase::getBackground()
     134             :     throw (uno::RuntimeException, std::exception)
     135             : {
     136           1 :     SolarMutexGuard aGuard;
     137           1 :     IsObjectValid();
     138           1 :     sal_Int32 nColor(0);
     139             : 
     140           1 :     if (mpDoc)
     141             :     {
     142           1 :         SfxObjectShell* pObjSh = mpDoc->GetDocumentShell();
     143           1 :         if ( pObjSh )
     144             :         {
     145           1 :             uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
     146           1 :             if ( xSpreadDoc.is() )
     147             :             {
     148           1 :                 uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
     149           2 :                 uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
     150           1 :                 if ( xIndex.is() )
     151             :                 {
     152           1 :                     uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
     153           2 :                     uno::Reference<sheet::XSpreadsheet> xTable;
     154           1 :                     if (aTable>>=xTable)
     155             :                     {
     156           1 :                         uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
     157           1 :                         if (xCell.is())
     158             :                         {
     159           1 :                             uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
     160           1 :                             if (xCellProps.is())
     161             :                             {
     162           1 :                                 uno::Any aAny = xCellProps->getPropertyValue(OUString(SC_UNONAME_CELLBACK));
     163           1 :                                 aAny >>= nColor;
     164           1 :                             }
     165           1 :                         }
     166           1 :                     }
     167           1 :                 }
     168           1 :             }
     169             :         }
     170             :     }
     171             : 
     172           1 :     return nColor;
     173             : }
     174             : 
     175             :     //=====  XInterface  =====================================================
     176             : 
     177          73 : uno::Any SAL_CALL ScAccessibleCellBase::queryInterface( uno::Type const & rType )
     178             :     throw (uno::RuntimeException, std::exception)
     179             : {
     180          73 :     uno::Any aAny (ScAccessibleCellBaseImpl::queryInterface(rType));
     181          73 :     return aAny.hasValue() ? aAny : ScAccessibleContextBase::queryInterface(rType);
     182             : }
     183             : 
     184         474 : void SAL_CALL ScAccessibleCellBase::acquire()
     185             :     throw ()
     186             : {
     187         474 :     ScAccessibleContextBase::acquire();
     188         474 : }
     189             : 
     190         474 : void SAL_CALL ScAccessibleCellBase::release()
     191             :     throw ()
     192             : {
     193         474 :     ScAccessibleContextBase::release();
     194         474 : }
     195             : 
     196             :     //=====  XAccessibleContext  ==============================================
     197             : 
     198             : sal_Int32
     199           4 :     ScAccessibleCellBase::getAccessibleIndexInParent()
     200             :         throw (uno::RuntimeException, std::exception)
     201             : {
     202           4 :     SolarMutexGuard aGuard;
     203           4 :     IsObjectValid();
     204           4 :     return mnIndex;
     205             : }
     206             : 
     207             : OUString SAL_CALL
     208          28 :     ScAccessibleCellBase::createAccessibleDescription()
     209             :     throw (uno::RuntimeException)
     210             : {
     211          28 :     OUString sDescription = OUString(ScResId(STR_ACC_CELL_DESCR));
     212             : 
     213          28 :     return sDescription;
     214             : }
     215             : 
     216             : OUString SAL_CALL
     217          16 :     ScAccessibleCellBase::createAccessibleName()
     218             :     throw (uno::RuntimeException, std::exception)
     219             : {
     220             :     // Document not needed, because only the cell address, but not the tablename is needed
     221             :     // always us OOO notation
     222          16 :     return maCellAddress.Format(SCA_VALID, NULL);
     223             : }
     224             : 
     225             :     //=====  XAccessibleValue  ================================================
     226             : 
     227             : uno::Any SAL_CALL
     228           7 :     ScAccessibleCellBase::getCurrentValue()
     229             :     throw (uno::RuntimeException, std::exception)
     230             : {
     231           7 :     SolarMutexGuard aGuard;
     232           7 :     IsObjectValid();
     233           7 :     uno::Any aAny;
     234           7 :     if (mpDoc)
     235             :     {
     236           7 :         aAny <<= mpDoc->GetValue(maCellAddress);
     237             :     }
     238           7 :     return aAny;
     239             : }
     240             : 
     241             : sal_Bool SAL_CALL
     242           6 :     ScAccessibleCellBase::setCurrentValue( const uno::Any& aNumber )
     243             :     throw (uno::RuntimeException, std::exception)
     244             : {
     245           6 :     SolarMutexGuard aGuard;
     246           6 :     IsObjectValid();
     247           6 :     double fValue = 0;
     248           6 :     bool bResult = false;
     249           6 :     if((aNumber >>= fValue) && mpDoc && mpDoc->GetDocumentShell())
     250             :     {
     251           6 :         uno::Reference<XAccessibleStateSet> xParentStates;
     252           6 :         if (getAccessibleParent().is())
     253             :         {
     254           6 :             uno::Reference<XAccessibleContext> xParentContext = getAccessibleParent()->getAccessibleContext();
     255           6 :             xParentStates = xParentContext->getAccessibleStateSet();
     256             :         }
     257           6 :         if (IsEditable(xParentStates))
     258             :         {
     259           5 :             ScDocShell* pDocShell = static_cast<ScDocShell*>(mpDoc->GetDocumentShell());
     260           5 :             bResult = pDocShell->GetDocFunc().SetValueCell(maCellAddress, fValue, false);
     261           6 :         }
     262             :     }
     263           6 :     return bResult;
     264             : }
     265             : 
     266             : uno::Any SAL_CALL
     267           2 :     ScAccessibleCellBase::getMaximumValue(  )
     268             :     throw (uno::RuntimeException, std::exception)
     269             : {
     270           2 :     uno::Any aAny;
     271           2 :     aAny <<= DBL_MAX;
     272             : 
     273           2 :     return aAny;
     274             : }
     275             : 
     276             : uno::Any SAL_CALL
     277           2 :     ScAccessibleCellBase::getMinimumValue(  )
     278             :     throw (uno::RuntimeException, std::exception)
     279             : {
     280           2 :     uno::Any aAny;
     281           2 :     aAny <<= -DBL_MAX;
     282             : 
     283           2 :     return aAny;
     284             : }
     285             : 
     286             :     //=====  XServiceInfo  ====================================================
     287             : 
     288           0 : OUString SAL_CALL ScAccessibleCellBase::getImplementationName()
     289             :         throw (uno::RuntimeException, std::exception)
     290             : {
     291           0 :     return OUString("ScAccessibleCellBase");
     292             : }
     293             : 
     294             :     //=====  XTypeProvider  ===================================================
     295             : 
     296           0 : uno::Sequence< uno::Type > SAL_CALL ScAccessibleCellBase::getTypes()
     297             :         throw (uno::RuntimeException, std::exception)
     298             : {
     299           0 :     return comphelper::concatSequences(ScAccessibleCellBaseImpl::getTypes(), ScAccessibleContextBase::getTypes());
     300             : }
     301             : 
     302             : uno::Sequence<sal_Int8> SAL_CALL
     303           0 :     ScAccessibleCellBase::getImplementationId()
     304             :     throw (uno::RuntimeException, std::exception)
     305             : {
     306           0 :     return css::uno::Sequence<sal_Int8>();
     307             : }
     308             : 
     309           0 : bool ScAccessibleCellBase::IsEditable(
     310             :     const uno::Reference<XAccessibleStateSet>& rxParentStates)
     311             : {
     312           0 :     bool bEditable(false);
     313           0 :     if (rxParentStates.is() && rxParentStates->contains(AccessibleStateType::EDITABLE))
     314           0 :         bEditable = true;
     315           0 :     return bEditable;
     316             : }
     317             : 
     318           0 : OUString SAL_CALL ScAccessibleCellBase::GetNote()
     319             :                                 throw (::com::sun::star::uno::RuntimeException)
     320             : {
     321           0 :     SolarMutexGuard aGuard;
     322           0 :     IsObjectValid();
     323           0 :     OUString msNote;
     324           0 :     if (mpDoc)
     325             :     {
     326           0 :         SfxObjectShell* pObjSh = mpDoc->GetDocumentShell();
     327           0 :         if ( pObjSh )
     328             :         {
     329           0 :             uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
     330           0 :             if ( xSpreadDoc.is() )
     331             :             {
     332           0 :                 uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
     333           0 :                 uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
     334           0 :                 if ( xIndex.is() )
     335             :                 {
     336           0 :                     uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
     337           0 :                     uno::Reference<sheet::XSpreadsheet> xTable;
     338           0 :                     if (aTable>>=xTable)
     339             :                     {
     340           0 :                         uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
     341           0 :                         if (xCell.is())
     342             :                         {
     343           0 :                             uno::Reference <sheet::XSheetAnnotationAnchor> xAnnotationAnchor ( xCell, uno::UNO_QUERY);
     344           0 :                             if(xAnnotationAnchor.is())
     345             :                             {
     346           0 :                                 uno::Reference <sheet::XSheetAnnotation> xSheetAnnotation = xAnnotationAnchor->getAnnotation();
     347           0 :                                 if (xSheetAnnotation.is())
     348             :                                 {
     349           0 :                                     uno::Reference <text::XSimpleText> xText (xSheetAnnotation, uno::UNO_QUERY);
     350           0 :                                     if (xText.is())
     351             :                                     {
     352           0 :                                         msNote = xText->getString();
     353           0 :                                     }
     354           0 :                                 }
     355           0 :                             }
     356           0 :                         }
     357           0 :                     }
     358           0 :                 }
     359           0 :             }
     360             :         }
     361             :     }
     362           0 :     return msNote;
     363             : }
     364             : 
     365             : #include <com/sun/star/table/ShadowFormat.hpp>
     366             : 
     367           0 : OUString SAL_CALL ScAccessibleCellBase::getShadowAttrs()
     368             :                                         throw (::com::sun::star::uno::RuntimeException)
     369             : {
     370           0 :     SolarMutexGuard aGuard;
     371           0 :     IsObjectValid();
     372           0 :     table::ShadowFormat aShadowFmt;
     373           0 :     if (mpDoc)
     374             :     {
     375           0 :         SfxObjectShell* pObjSh = mpDoc->GetDocumentShell();
     376           0 :         if ( pObjSh )
     377             :         {
     378           0 :             uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
     379           0 :             if ( xSpreadDoc.is() )
     380             :             {
     381           0 :                 uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
     382           0 :                 uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
     383           0 :                 if ( xIndex.is() )
     384             :                 {
     385           0 :                     uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
     386           0 :                     uno::Reference<sheet::XSpreadsheet> xTable;
     387           0 :                     if (aTable>>=xTable)
     388             :                     {
     389           0 :                         uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
     390           0 :                         if (xCell.is())
     391             :                         {
     392           0 :                             uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
     393           0 :                             if (xCellProps.is())
     394             :                             {
     395           0 :                                 uno::Any aAny = xCellProps->getPropertyValue(OUString(SC_UNONAME_SHADOW));
     396           0 :                                 aAny >>= aShadowFmt;
     397           0 :                             }
     398           0 :                         }
     399           0 :                     }
     400           0 :                 }
     401           0 :             }
     402             :         }
     403             :     }
     404             :     //construct shadow attributes string
     405           0 :     OUString sShadowAttrs("Shadow:");
     406           0 :     OUString sInnerSplit(",");
     407           0 :     OUString sOuterSplit(";");
     408           0 :     sal_Int32 nLocationVal = 0;
     409           0 :     switch( aShadowFmt.Location )
     410             :     {
     411             :     case table::ShadowLocation_TOP_LEFT:
     412           0 :         nLocationVal = 1;
     413           0 :         break;
     414             :     case table::ShadowLocation_TOP_RIGHT:
     415           0 :         nLocationVal = 2;
     416           0 :         break;
     417             :     case table::ShadowLocation_BOTTOM_LEFT:
     418           0 :         nLocationVal = 3;
     419           0 :         break;
     420             :     case table::ShadowLocation_BOTTOM_RIGHT:
     421           0 :         nLocationVal = 4;
     422           0 :         break;
     423             :     default:
     424           0 :         break;
     425             :     }
     426             :     //if there is no shadow property for the cell
     427           0 :     if ( nLocationVal == 0 )
     428             :     {
     429           0 :         sShadowAttrs += sOuterSplit;
     430           0 :         return sShadowAttrs;
     431             :     }
     432             :     //else return all the shadow properties
     433           0 :     sShadowAttrs += "Location=";
     434           0 :     sShadowAttrs += OUString::number( (sal_Int32)nLocationVal );
     435           0 :     sShadowAttrs += sInnerSplit;
     436           0 :     sShadowAttrs += "ShadowWidth=";
     437           0 :     sShadowAttrs += OUString::number( (sal_Int32)aShadowFmt.ShadowWidth ) ;
     438           0 :     sShadowAttrs += sInnerSplit;
     439           0 :     sShadowAttrs += "IsTransparent=";
     440           0 :     sShadowAttrs += OUString::number( (int)aShadowFmt.IsTransparent ) ;
     441           0 :     sShadowAttrs += sInnerSplit;
     442           0 :     sShadowAttrs += "Color=";
     443           0 :     sShadowAttrs += OUString::number( (sal_Int32)aShadowFmt.Color );
     444           0 :     sShadowAttrs += sOuterSplit;
     445           0 :     return sShadowAttrs;
     446             : }
     447             : 
     448             : #include <com/sun/star/table/BorderLine.hpp>
     449             : 
     450           0 : OUString SAL_CALL ScAccessibleCellBase::getBorderAttrs()
     451             :                                         throw (::com::sun::star::uno::RuntimeException)
     452             : {
     453           0 :     SolarMutexGuard aGuard;
     454           0 :     IsObjectValid();
     455           0 :     table::BorderLine aTopBorder;
     456           0 :     table::BorderLine aBottomBorder;
     457           0 :     table::BorderLine aLeftBorder;
     458           0 :     table::BorderLine aRightBorder;
     459           0 :     if (mpDoc)
     460             :     {
     461           0 :         SfxObjectShell* pObjSh = mpDoc->GetDocumentShell();
     462           0 :         if ( pObjSh )
     463             :         {
     464           0 :             uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( pObjSh->GetModel(), uno::UNO_QUERY );
     465           0 :             if ( xSpreadDoc.is() )
     466             :             {
     467           0 :                 uno::Reference<sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
     468           0 :                 uno::Reference<container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
     469           0 :                 if ( xIndex.is() )
     470             :                 {
     471           0 :                     uno::Any aTable = xIndex->getByIndex(maCellAddress.Tab());
     472           0 :                     uno::Reference<sheet::XSpreadsheet> xTable;
     473           0 :                     if (aTable>>=xTable)
     474             :                     {
     475           0 :                         uno::Reference<table::XCell> xCell = xTable->getCellByPosition(maCellAddress.Col(), maCellAddress.Row());
     476           0 :                         if (xCell.is())
     477             :                         {
     478           0 :                             uno::Reference<beans::XPropertySet> xCellProps(xCell, uno::UNO_QUERY);
     479           0 :                             if (xCellProps.is())
     480             :                             {
     481           0 :                                 uno::Any aAny = xCellProps->getPropertyValue(OUString(SC_UNONAME_TOPBORDER));
     482           0 :                                 aAny >>= aTopBorder;
     483           0 :                                 aAny = xCellProps->getPropertyValue(OUString(SC_UNONAME_BOTTBORDER));
     484           0 :                                 aAny >>= aBottomBorder;
     485           0 :                                 aAny = xCellProps->getPropertyValue(OUString(SC_UNONAME_LEFTBORDER));
     486           0 :                                 aAny >>= aLeftBorder;
     487           0 :                                 aAny = xCellProps->getPropertyValue(OUString(SC_UNONAME_RIGHTBORDER));
     488           0 :                                 aAny >>= aRightBorder;
     489           0 :                             }
     490           0 :                         }
     491           0 :                     }
     492           0 :                 }
     493           0 :             }
     494             :         }
     495             :     }
     496             : 
     497           0 :     Color aColor;
     498           0 :     bool bIn = mpDoc && mpDoc->IsCellInChangeTrack(maCellAddress,&aColor);
     499           0 :     if (bIn)
     500             :     {
     501           0 :         aTopBorder.Color = aColor.GetColor();
     502           0 :         aBottomBorder.Color = aColor.GetColor();
     503           0 :         aLeftBorder.Color = aColor.GetColor();
     504           0 :         aRightBorder.Color = aColor.GetColor();
     505           0 :         aTopBorder.OuterLineWidth =2;
     506           0 :         aBottomBorder.OuterLineWidth =2;
     507           0 :         aLeftBorder.OuterLineWidth =2;
     508           0 :         aRightBorder.OuterLineWidth =2;
     509             :     }
     510             : 
     511             :     //construct border attributes string
     512           0 :     OUString sBorderAttrs;
     513           0 :     OUString sInnerSplit(",");
     514           0 :     OUString sOuterSplit(";");
     515             :     //top border
     516             :     //if top of the cell has no border
     517           0 :     if ( aTopBorder.InnerLineWidth == 0 && aTopBorder.OuterLineWidth == 0 )
     518             :     {
     519           0 :         sBorderAttrs += "TopBorder:;";
     520             :     }
     521             :     else//add all the border properties to the return string.
     522             :     {
     523           0 :         sBorderAttrs += "TopBorder:Color=";
     524           0 :         sBorderAttrs += OUString::number( (sal_Int32)aTopBorder.Color );
     525           0 :         sBorderAttrs += sInnerSplit;
     526           0 :         sBorderAttrs += "InnerLineWidth=";
     527           0 :         sBorderAttrs += OUString::number( (sal_Int32)aTopBorder.InnerLineWidth );
     528           0 :         sBorderAttrs += sInnerSplit;
     529           0 :         sBorderAttrs += "OuterLineWidth=";
     530           0 :         sBorderAttrs += OUString::number( (sal_Int32)aTopBorder.OuterLineWidth );
     531           0 :         sBorderAttrs += sInnerSplit;
     532           0 :         sBorderAttrs += "LineDistance=";
     533           0 :         sBorderAttrs += OUString::number( (sal_Int32)aTopBorder.LineDistance );
     534           0 :         sBorderAttrs += sOuterSplit;
     535             :     }
     536             :     //bottom border
     537           0 :     if ( aBottomBorder.InnerLineWidth == 0 && aBottomBorder.OuterLineWidth == 0 )
     538             :     {
     539           0 :         sBorderAttrs += "BottomBorde:;";
     540             :     }
     541             :     else
     542             :     {
     543           0 :         sBorderAttrs += "BottomBorder:Color=";
     544           0 :         sBorderAttrs += OUString::number( (sal_Int32)aBottomBorder.Color );
     545           0 :         sBorderAttrs += sInnerSplit;
     546           0 :         sBorderAttrs += "InnerLineWidth=";
     547           0 :         sBorderAttrs += OUString::number( (sal_Int32)aBottomBorder.InnerLineWidth );
     548           0 :         sBorderAttrs += sInnerSplit;
     549           0 :         sBorderAttrs += "OuterLineWidth=";
     550           0 :         sBorderAttrs += OUString::number( (sal_Int32)aBottomBorder.OuterLineWidth );
     551           0 :         sBorderAttrs += sInnerSplit;
     552           0 :         sBorderAttrs += "LineDistance=";
     553           0 :         sBorderAttrs += OUString::number( (sal_Int32)aBottomBorder.LineDistance );
     554           0 :         sBorderAttrs += sOuterSplit;
     555             :     }
     556             :     //left border
     557           0 :     if ( aLeftBorder.InnerLineWidth == 0 && aLeftBorder.OuterLineWidth == 0 )
     558             :     {
     559           0 :         sBorderAttrs += "LeftBorder:;";
     560             :     }
     561             :     else
     562             :     {
     563           0 :         sBorderAttrs += "LeftBorder:Color=";
     564           0 :         sBorderAttrs += OUString::number( (sal_Int32)aLeftBorder.Color );
     565           0 :         sBorderAttrs += sInnerSplit;
     566           0 :         sBorderAttrs += "InnerLineWidth=";
     567           0 :         sBorderAttrs += OUString::number( (sal_Int32)aLeftBorder.InnerLineWidth );
     568           0 :         sBorderAttrs += sInnerSplit;
     569           0 :         sBorderAttrs += "OuterLineWidth=";
     570           0 :         sBorderAttrs += OUString::number( (sal_Int32)aLeftBorder.OuterLineWidth );
     571           0 :         sBorderAttrs += sInnerSplit;
     572           0 :         sBorderAttrs += "LineDistance=";
     573           0 :         sBorderAttrs += OUString::number( (sal_Int32)aLeftBorder.LineDistance );
     574           0 :         sBorderAttrs += sOuterSplit;
     575             :     }
     576             :     //right border
     577           0 :     if ( aRightBorder.InnerLineWidth == 0 && aRightBorder.OuterLineWidth == 0 )
     578             :     {
     579           0 :         sBorderAttrs += "RightBorder:;";
     580             :     }
     581             :     else
     582             :     {
     583           0 :         sBorderAttrs += "RightBorder:Color=";
     584           0 :         sBorderAttrs += OUString::number( (sal_Int32)aRightBorder.Color );
     585           0 :         sBorderAttrs += sInnerSplit;
     586           0 :         sBorderAttrs += "InnerLineWidth=";
     587           0 :         sBorderAttrs += OUString::number( (sal_Int32)aRightBorder.InnerLineWidth );
     588           0 :         sBorderAttrs += sInnerSplit;
     589           0 :         sBorderAttrs += "OuterLineWidth=";
     590           0 :         sBorderAttrs += OUString::number( (sal_Int32)aRightBorder.OuterLineWidth );
     591           0 :         sBorderAttrs += sInnerSplit;
     592           0 :         sBorderAttrs += "LineDistance=";
     593           0 :         sBorderAttrs += OUString::number( (sal_Int32)aRightBorder.LineDistance );
     594           0 :         sBorderAttrs += sOuterSplit;
     595             :     }
     596           0 :     return sBorderAttrs;
     597             : }
     598             : //end of cell attributes
     599             : 
     600           0 : OUString SAL_CALL ScAccessibleCellBase::GetAllDisplayNote()
     601             :     throw (::com::sun::star::uno::RuntimeException)
     602             : {
     603           0 :     OUString strNote;
     604           0 :     OUString strTrackText;
     605           0 :     if (mpDoc)
     606             :     {
     607           0 :         bool bLeftedge = false;
     608           0 :         mpDoc->GetCellChangeTrackNote(maCellAddress,strTrackText,bLeftedge);
     609             :     }
     610           0 :     if (!strTrackText.isEmpty())
     611             :     {
     612           0 :         ScDetectiveFunc::AppendChangTrackNoteSeparator(strTrackText);
     613           0 :         strNote = strTrackText;
     614             :     }
     615           0 :     strNote += GetNote();
     616           0 :     return strNote;
     617         156 : }
     618             : 
     619             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11