LCOV - code coverage report
Current view: top level - sc/source/ui/unoobj - afmtuno.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 356 391 91.0 %
Date: 2014-11-03 Functions: 51 69 73.9 %
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 "scitems.hxx"
      21             : #include <editeng/memberids.hrc>
      22             : #include <svl/poolitem.hxx>
      23             : #include <vcl/svapp.hxx>
      24             : #include <svx/unomid.hxx>
      25             : #include "unowids.hxx"
      26             : #include <comphelper/servicehelper.hxx>
      27             : #include <com/sun/star/table/BorderLine.hpp>
      28             : #include <com/sun/star/table/CellVertJustify2.hpp>
      29             : #include <com/sun/star/table/ShadowLocation.hpp>
      30             : #include <com/sun/star/table/TableBorder.hpp>
      31             : #include <com/sun/star/table/ShadowFormat.hpp>
      32             : #include <com/sun/star/table/CellRangeAddress.hpp>
      33             : #include <com/sun/star/table/CellContentType.hpp>
      34             : #include <com/sun/star/table/TableOrientation.hpp>
      35             : #include <com/sun/star/table/CellHoriJustify.hpp>
      36             : #include <com/sun/star/util/SortField.hpp>
      37             : #include <com/sun/star/util/SortFieldType.hpp>
      38             : #include <com/sun/star/table/CellOrientation.hpp>
      39             : #include <com/sun/star/table/CellAddress.hpp>
      40             : #include <com/sun/star/awt/SimpleFontMetric.hpp>
      41             : #include <com/sun/star/awt/FontWeight.hpp>
      42             : #include <com/sun/star/awt/FontSlant.hpp>
      43             : #include <com/sun/star/awt/CharSet.hpp>
      44             : #include <com/sun/star/awt/FontDescriptor.hpp>
      45             : #include <com/sun/star/awt/FontWidth.hpp>
      46             : #include <com/sun/star/awt/XFont.hpp>
      47             : #include <com/sun/star/awt/FontType.hpp>
      48             : #include <com/sun/star/awt/FontUnderline.hpp>
      49             : #include <com/sun/star/awt/FontStrikeout.hpp>
      50             : #include <com/sun/star/awt/FontFamily.hpp>
      51             : #include <com/sun/star/awt/FontPitch.hpp>
      52             : 
      53             : #include "afmtuno.hxx"
      54             : #include "miscuno.hxx"
      55             : #include "autoform.hxx"
      56             : #include "scdll.hxx"
      57             : #include "unonames.hxx"
      58             : #include "cellsuno.hxx"
      59             : 
      60             : using namespace ::com::sun::star;
      61             : 
      62             : //  ein AutoFormat hat immer 16 Eintraege
      63             : #define SC_AF_FIELD_COUNT 16
      64             : 
      65             : //  AutoFormat-Map nur fuer PropertySetInfo, ohne Which-IDs
      66             : 
      67          54 : static const SfxItemPropertyMapEntry* lcl_GetAutoFormatMap()
      68             : {
      69             :     static const SfxItemPropertyMapEntry aAutoFormatMap_Impl[] =
      70             :     {
      71           2 :         { OUString(SC_UNONAME_INCBACK),  0,  ::getBooleanCppuType(),    0, 0 },
      72           2 :         { OUString(SC_UNONAME_INCBORD),  0,  ::getBooleanCppuType(),    0, 0 },
      73           2 :         { OUString(SC_UNONAME_INCFONT),  0,  ::getBooleanCppuType(),    0, 0 },
      74           2 :         { OUString(SC_UNONAME_INCJUST),  0,  ::getBooleanCppuType(),    0, 0 },
      75           2 :         { OUString(SC_UNONAME_INCNUM),   0,  ::getBooleanCppuType(),    0, 0 },
      76           2 :         { OUString(SC_UNONAME_INCWIDTH), 0,  ::getBooleanCppuType(),    0, 0 },
      77             :         { OUString(), 0, css::uno::Type(), 0, 0 }
      78          68 :     };
      79          54 :     return aAutoFormatMap_Impl;
      80             : }
      81             : 
      82             : //! Zahlformat (String/Language) ??? (in XNumberFormat nur ReadOnly)
      83             : //! table::TableBorder ??!?
      84             : 
      85           8 : static const SfxItemPropertyMapEntry* lcl_GetAutoFieldMap()
      86             : {
      87             :     static const SfxItemPropertyMapEntry aAutoFieldMap_Impl[] =
      88             :     {
      89           2 :         {OUString(SC_UNONAME_CELLBACK), ATTR_BACKGROUND,        ::cppu::UnoType<sal_Int32>::get(),        0, MID_BACK_COLOR },
      90           2 :         {OUString(SC_UNONAME_CCOLOR),   ATTR_FONT_COLOR,        ::cppu::UnoType<sal_Int32>::get(),        0, 0 },
      91           2 :         {OUString(SC_UNONAME_COUTL),    ATTR_FONT_CONTOUR,      ::getBooleanCppuType(),                    0, 0 },
      92           2 :         {OUString(SC_UNONAME_CCROSS),   ATTR_FONT_CROSSEDOUT,   ::getBooleanCppuType(),                    0, MID_CROSSED_OUT },
      93           2 :         {OUString(SC_UNONAME_CFONT),    ATTR_FONT,              ::cppu::UnoType<sal_Int16>::get(),        0, MID_FONT_FAMILY },
      94           2 :         {OUString(SC_UNONAME_CFCHARS),  ATTR_FONT,              ::cppu::UnoType<sal_Int16>::get(),              0, MID_FONT_CHAR_SET },
      95           2 :         {OUString(SC_UNO_CJK_CFCHARS),  ATTR_CJK_FONT,          ::cppu::UnoType<sal_Int16>::get(),              0, MID_FONT_CHAR_SET },
      96           2 :         {OUString(SC_UNO_CTL_CFCHARS),  ATTR_CTL_FONT,          ::cppu::UnoType<sal_Int16>::get(),              0, MID_FONT_CHAR_SET },
      97           2 :         {OUString(SC_UNONAME_CFFAMIL),  ATTR_FONT,              ::cppu::UnoType<sal_Int16>::get(),              0, MID_FONT_FAMILY },
      98           2 :         {OUString(SC_UNO_CJK_CFFAMIL),  ATTR_CJK_FONT,          ::cppu::UnoType<sal_Int16>::get(),              0, MID_FONT_FAMILY },
      99           2 :         {OUString(SC_UNO_CTL_CFFAMIL),  ATTR_CTL_FONT,          ::cppu::UnoType<sal_Int16>::get(),              0, MID_FONT_FAMILY },
     100           2 :         {OUString(SC_UNONAME_CFNAME),   ATTR_FONT,              ::cppu::UnoType<OUString>::get(),          0, MID_FONT_FAMILY_NAME },
     101           2 :         {OUString(SC_UNO_CJK_CFNAME),   ATTR_CJK_FONT,          ::cppu::UnoType<OUString>::get(),          0, MID_FONT_FAMILY_NAME },
     102           2 :         {OUString(SC_UNO_CTL_CFNAME),   ATTR_CTL_FONT,          ::cppu::UnoType<OUString>::get(),          0, MID_FONT_FAMILY_NAME },
     103           2 :         {OUString(SC_UNONAME_CFPITCH),  ATTR_FONT,              ::cppu::UnoType<sal_Int16>::get(),              0, MID_FONT_PITCH },
     104           2 :         {OUString(SC_UNO_CJK_CFPITCH),  ATTR_CJK_FONT,          ::cppu::UnoType<sal_Int16>::get(),              0, MID_FONT_PITCH },
     105           2 :         {OUString(SC_UNO_CTL_CFPITCH),  ATTR_CTL_FONT,          ::cppu::UnoType<sal_Int16>::get(),              0, MID_FONT_PITCH },
     106           2 :         {OUString(SC_UNONAME_CFSTYLE),  ATTR_FONT,              ::cppu::UnoType<OUString>::get(),          0, MID_FONT_STYLE_NAME },
     107           2 :         {OUString(SC_UNO_CJK_CFSTYLE),  ATTR_CJK_FONT,          ::cppu::UnoType<OUString>::get(),          0, MID_FONT_STYLE_NAME },
     108           2 :         {OUString(SC_UNO_CTL_CFSTYLE),  ATTR_CTL_FONT,          ::cppu::UnoType<OUString>::get(),          0, MID_FONT_STYLE_NAME },
     109           2 :         {OUString(SC_UNONAME_CHEIGHT),  ATTR_FONT_HEIGHT,       ::cppu::UnoType<float>::get(),                  0, MID_FONTHEIGHT | CONVERT_TWIPS },
     110           2 :         {OUString(SC_UNO_CJK_CHEIGHT),  ATTR_CJK_FONT_HEIGHT,   ::cppu::UnoType<float>::get(),                  0, MID_FONTHEIGHT | CONVERT_TWIPS },
     111           2 :         {OUString(SC_UNO_CTL_CHEIGHT),  ATTR_CTL_FONT_HEIGHT,   ::cppu::UnoType<float>::get(),                  0, MID_FONTHEIGHT | CONVERT_TWIPS },
     112           2 :         {OUString(SC_UNONAME_COVER),    ATTR_FONT_OVERLINE,     ::cppu::UnoType<sal_Int16>::get(),        0, MID_TL_STYLE },
     113           2 :         {OUString(SC_UNONAME_CPOST),    ATTR_FONT_POSTURE,      ::cppu::UnoType<awt::FontSlant>::get(),         0, MID_POSTURE },
     114           2 :         {OUString(SC_UNO_CJK_CPOST),    ATTR_CJK_FONT_POSTURE,  ::cppu::UnoType<awt::FontSlant>::get(),         0, MID_POSTURE },
     115           2 :         {OUString(SC_UNO_CTL_CPOST),    ATTR_CTL_FONT_POSTURE,  ::cppu::UnoType<awt::FontSlant>::get(),         0, MID_POSTURE },
     116           2 :         {OUString(SC_UNONAME_CSHADD),   ATTR_FONT_SHADOWED,     ::getBooleanCppuType(),                    0, 0 },
     117           2 :         {OUString(SC_UNONAME_TBLBORD),  SC_WID_UNO_TBLBORD,     ::cppu::UnoType<table::TableBorder>::get(),     0, 0 | CONVERT_TWIPS },
     118           2 :         {OUString(SC_UNONAME_TBLBORD2),  SC_WID_UNO_TBLBORD2,     ::cppu::UnoType<table::TableBorder2>::get(),     0, 0 | CONVERT_TWIPS },
     119           2 :         {OUString(SC_UNONAME_CUNDER),   ATTR_FONT_UNDERLINE,    ::cppu::UnoType<sal_Int16>::get(),        0, MID_TL_STYLE },
     120           2 :         {OUString(SC_UNONAME_CWEIGHT),  ATTR_FONT_WEIGHT,       ::cppu::UnoType<float>::get(),                  0, MID_WEIGHT },
     121           2 :         {OUString(SC_UNO_CJK_CWEIGHT),  ATTR_CJK_FONT_WEIGHT,   ::cppu::UnoType<float>::get(),                  0, MID_WEIGHT },
     122           2 :         {OUString(SC_UNO_CTL_CWEIGHT),  ATTR_CTL_FONT_WEIGHT,   ::cppu::UnoType<float>::get(),                  0, MID_WEIGHT },
     123           2 :         {OUString(SC_UNONAME_CELLHJUS), ATTR_HOR_JUSTIFY,       ::cppu::UnoType<table::CellHoriJustify>::get(),   0, 0 },
     124           2 :         {OUString(SC_UNONAME_CELLHJUS_METHOD), ATTR_HOR_JUSTIFY_METHOD, ::cppu::UnoType<sal_Int32>::get(),   0, 0 },
     125           2 :         {OUString(SC_UNONAME_CELLTRAN), ATTR_BACKGROUND,        ::getBooleanCppuType(),                    0, MID_GRAPHIC_TRANSPARENT },
     126           2 :         {OUString(SC_UNONAME_WRAP),     ATTR_LINEBREAK,         ::getBooleanCppuType(),                    0, 0 },
     127           2 :         {OUString(SC_UNONAME_CELLORI),  ATTR_STACKED,           ::cppu::UnoType<table::CellOrientation>::get(),   0, 0 },
     128           2 :         {OUString(SC_UNONAME_PBMARGIN), ATTR_MARGIN,            ::cppu::UnoType<sal_Int32>::get(),        0, MID_MARGIN_LO_MARGIN | CONVERT_TWIPS },
     129           2 :         {OUString(SC_UNONAME_PLMARGIN), ATTR_MARGIN,            ::cppu::UnoType<sal_Int32>::get(),        0, MID_MARGIN_L_MARGIN  | CONVERT_TWIPS },
     130           2 :         {OUString(SC_UNONAME_PRMARGIN), ATTR_MARGIN,            ::cppu::UnoType<sal_Int32>::get(),        0, MID_MARGIN_R_MARGIN  | CONVERT_TWIPS },
     131           2 :         {OUString(SC_UNONAME_PTMARGIN), ATTR_MARGIN,            ::cppu::UnoType<sal_Int32>::get(),        0, MID_MARGIN_UP_MARGIN | CONVERT_TWIPS },
     132           2 :         {OUString(SC_UNONAME_ROTANG),   ATTR_ROTATE_VALUE,      ::cppu::UnoType<sal_Int32>::get(),        0, 0 },
     133           2 :         {OUString(SC_UNONAME_ROTREF),   ATTR_ROTATE_MODE,       ::cppu::UnoType<sal_Int32>::get(),   0, 0 },
     134           2 :         {OUString(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY,       ::cppu::UnoType<sal_Int32>::get(),   0, 0 },
     135           2 :         {OUString(SC_UNONAME_CELLVJUS_METHOD), ATTR_VER_JUSTIFY_METHOD, ::cppu::UnoType<sal_Int32>::get(),   0, 0 },
     136             :         { OUString(), 0, css::uno::Type(), 0, 0 }
     137         104 :     };
     138           8 :     return aAutoFieldMap_Impl;
     139             : }
     140             : 
     141             : #define SCAUTOFORMATSOBJ_SERVICE    "com.sun.star.sheet.TableAutoFormats"
     142             : 
     143           0 : SC_SIMPLE_SERVICE_INFO( ScAutoFormatFieldObj, "ScAutoFormatFieldObj", "com.sun.star.sheet.TableAutoFormatField" )
     144           4 : SC_SIMPLE_SERVICE_INFO( ScAutoFormatObj, "ScAutoFormatObj", "com.sun.star.sheet.TableAutoFormat" )
     145           0 : SC_SIMPLE_SERVICE_INFO( ScAutoFormatsObj, "ScAutoFormatsObj", SCAUTOFORMATSOBJ_SERVICE )
     146             : 
     147          22 : static bool lcl_FindAutoFormatIndex( const ScAutoFormat& rFormats, const OUString& rName, sal_uInt16& rOutIndex )
     148             : {
     149          22 :     ScAutoFormat::const_iterator itBeg = rFormats.begin(), itEnd = rFormats.end();
     150         322 :     for (ScAutoFormat::const_iterator it = itBeg; it != itEnd; ++it)
     151             :     {
     152         310 :         const ScAutoFormatData* pEntry = it->second;
     153         310 :         const OUString& aEntryName = pEntry->GetName();
     154         310 :         if ( aEntryName.equals(rName) )
     155             :         {
     156          10 :             size_t nPos = std::distance(itBeg, it);
     157          10 :             rOutIndex = nPos;
     158          10 :             return true;
     159             :         }
     160             :     }
     161          12 :     return false;       // is nich
     162             : }
     163             : 
     164           2 : ScAutoFormatsObj::ScAutoFormatsObj()
     165             : {
     166             :     //! Dieses Objekt darf es nur einmal geben, und es muss an den Auto-Format-Daten
     167             :     //! bekannt sein, damit Aenderungen gebroadcasted werden koennen
     168           2 : }
     169             : 
     170           4 : ScAutoFormatsObj::~ScAutoFormatsObj()
     171             : {
     172           4 : }
     173             : 
     174             : // stuff for exService_...
     175             : 
     176           2 : uno::Reference<uno::XInterface> SAL_CALL ScAutoFormatsObj_CreateInstance(
     177             :                         const uno::Reference<lang::XMultiServiceFactory>& )
     178             : {
     179           2 :     SolarMutexGuard aGuard;
     180           2 :     ScDLL::Init();
     181           2 :     static uno::Reference< uno::XInterface > xInst((::cppu::OWeakObject*) new ScAutoFormatsObj);
     182           2 :     return xInst;
     183             : }
     184             : 
     185         304 : OUString ScAutoFormatsObj::getImplementationName_Static()
     186             : {
     187         304 :     return OUString( "stardiv.StarCalc.ScAutoFormatsObj" );
     188             : }
     189             : 
     190           2 : uno::Sequence<OUString> ScAutoFormatsObj::getSupportedServiceNames_Static()
     191             : {
     192           2 :     uno::Sequence<OUString> aRet(1);
     193           2 :     OUString* pArray = aRet.getArray();
     194           2 :     pArray[0] = OUString( SCAUTOFORMATSOBJ_SERVICE );
     195           2 :     return aRet;
     196             : }
     197             : 
     198             : // XTableAutoFormats
     199             : 
     200          52 : ScAutoFormatObj* ScAutoFormatsObj::GetObjectByIndex_Impl(sal_uInt16 nIndex)
     201             : {
     202          52 :     if (nIndex < ScGlobal::GetOrCreateAutoFormat()->size())
     203          48 :         return new ScAutoFormatObj(nIndex);
     204             : 
     205           4 :     return NULL;    // falscher Index
     206             : }
     207             : 
     208           4 : ScAutoFormatObj* ScAutoFormatsObj::GetObjectByName_Impl(const OUString& aName)
     209             : {
     210           4 :     OUString aString(aName);
     211             :     sal_uInt16 nIndex;
     212           4 :     if (lcl_FindAutoFormatIndex(
     213           4 :             *ScGlobal::GetOrCreateAutoFormat(), aString, nIndex ))
     214           2 :         return GetObjectByIndex_Impl(nIndex);
     215           2 :     return NULL;
     216             : }
     217             : 
     218             : // container::XNameContainer
     219             : 
     220           6 : void SAL_CALL ScAutoFormatsObj::insertByName( const OUString& aName, const uno::Any& aElement )
     221             :                             throw (lang::IllegalArgumentException, container::ElementExistException,
     222             :                                    lang::WrappedTargetException, uno::RuntimeException,
     223             :                                    std::exception)
     224             : {
     225           6 :     SolarMutexGuard aGuard;
     226           6 :     bool bDone = false;
     227             :     //  Reflection muss nicht uno::XInterface sein, kann auch irgendein Interface sein...
     228          12 :     uno::Reference< uno::XInterface > xInterface(aElement, uno::UNO_QUERY);
     229           6 :     if ( xInterface.is() )
     230             :     {
     231           4 :         ScAutoFormatObj* pFormatObj = ScAutoFormatObj::getImplementation( xInterface );
     232           4 :         if ( pFormatObj && !pFormatObj->IsInserted() )  // noch nicht eingefuegt?
     233             :         {
     234           4 :             OUString aNameStr(aName);
     235           4 :             ScAutoFormat* pFormats = ScGlobal::GetOrCreateAutoFormat();
     236             : 
     237             :             sal_uInt16 nDummy;
     238           4 :             if (!lcl_FindAutoFormatIndex( *pFormats, aNameStr, nDummy ))
     239             :             {
     240           2 :                 ScAutoFormatData* pNew = new ScAutoFormatData();
     241           2 :                 pNew->SetName( aNameStr );
     242             : 
     243           2 :                 if (pFormats->insert(pNew))
     244             :                 {
     245             :                     //! Notify fuer andere Objekte
     246           2 :                     pFormats->Save();   // sofort speichern
     247             : 
     248             :                     sal_uInt16 nNewIndex;
     249           2 :                     if (lcl_FindAutoFormatIndex( *pFormats, aNameStr, nNewIndex ))
     250             :                     {
     251           2 :                         pFormatObj->InitFormat( nNewIndex );    // kann jetzt benutzt werden
     252           2 :                         bDone = true;
     253             :                     }
     254             :                 }
     255             :                 else
     256             :                 {
     257             :                     OSL_FAIL("AutoFormat konnte nicht eingefuegt werden");
     258           0 :                     throw uno::RuntimeException();
     259             :                 }
     260             :             }
     261             :             else
     262             :             {
     263           2 :                 throw container::ElementExistException();
     264           4 :             }
     265             :         }
     266             :     }
     267             : 
     268           4 :     if (!bDone)
     269             :     {
     270             :         //  other errors are handled above
     271           2 :         throw lang::IllegalArgumentException();
     272           6 :     }
     273           2 : }
     274             : 
     275           0 : void SAL_CALL ScAutoFormatsObj::replaceByName( const OUString& aName, const uno::Any& aElement )
     276             :                             throw(lang::IllegalArgumentException, container::NoSuchElementException,
     277             :                                     lang::WrappedTargetException, uno::RuntimeException, std::exception)
     278             : {
     279           0 :     SolarMutexGuard aGuard;
     280             :     //! zusammenfassen?
     281           0 :     removeByName( aName );
     282           0 :     insertByName( aName, aElement );
     283           0 : }
     284             : 
     285           4 : void SAL_CALL ScAutoFormatsObj::removeByName( const OUString& aName )
     286             :                                 throw(container::NoSuchElementException,
     287             :                                     lang::WrappedTargetException, uno::RuntimeException, std::exception)
     288             : {
     289           4 :     SolarMutexGuard aGuard;
     290           4 :     ScAutoFormat* pFormats = ScGlobal::GetOrCreateAutoFormat();
     291             : 
     292           4 :     ScAutoFormat::iterator it = pFormats->find(aName);
     293           4 :     if (it != pFormats->end())
     294             :     {
     295           2 :         pFormats->erase(it);
     296             : 
     297             :         //! Notify fuer andere Objekte
     298           2 :         pFormats->Save();   // sofort speichern
     299             :     }
     300             :     else
     301             :     {
     302           2 :         throw container::NoSuchElementException();
     303           4 :     }
     304           2 : }
     305             : 
     306             : // container::XEnumerationAccess
     307             : 
     308           4 : uno::Reference<container::XEnumeration> SAL_CALL ScAutoFormatsObj::createEnumeration()
     309             :                                                     throw(uno::RuntimeException, std::exception)
     310             : {
     311           4 :     SolarMutexGuard aGuard;
     312           4 :     return new ScIndexEnumeration(this, OUString("com.sun.star.sheet.TableAutoFormatEnumeration"));
     313             : }
     314             : 
     315             : // container::XIndexAccess
     316             : 
     317          44 : sal_Int32 SAL_CALL ScAutoFormatsObj::getCount() throw(uno::RuntimeException, std::exception)
     318             : {
     319          44 :     SolarMutexGuard aGuard;
     320          44 :     return ScGlobal::GetOrCreateAutoFormat()->size();
     321             : }
     322             : 
     323          50 : uno::Any SAL_CALL ScAutoFormatsObj::getByIndex( sal_Int32 nIndex )
     324             :                             throw(lang::IndexOutOfBoundsException,
     325             :                                     lang::WrappedTargetException, uno::RuntimeException, std::exception)
     326             : {
     327          50 :     SolarMutexGuard aGuard;
     328         100 :     uno::Reference< container::XNamed >  xFormat(GetObjectByIndex_Impl((sal_uInt16)nIndex));
     329          50 :     if (!xFormat.is())
     330           4 :         throw lang::IndexOutOfBoundsException();
     331          96 :     return uno::makeAny(xFormat);
     332             : }
     333             : 
     334           2 : uno::Type SAL_CALL ScAutoFormatsObj::getElementType() throw(uno::RuntimeException, std::exception)
     335             : {
     336           2 :     SolarMutexGuard aGuard;
     337           2 :     return cppu::UnoType<container::XNamed>::get();    // muss zu getByIndex passen
     338             : }
     339             : 
     340           2 : sal_Bool SAL_CALL ScAutoFormatsObj::hasElements() throw(uno::RuntimeException, std::exception)
     341             : {
     342           2 :     SolarMutexGuard aGuard;
     343           2 :     return ( getCount() != 0 );
     344             : }
     345             : 
     346             : // container::XNameAccess
     347             : 
     348           4 : uno::Any SAL_CALL ScAutoFormatsObj::getByName( const OUString& aName )
     349             :             throw(container::NoSuchElementException,
     350             :                     lang::WrappedTargetException, uno::RuntimeException, std::exception)
     351             : {
     352           4 :     SolarMutexGuard aGuard;
     353           8 :     uno::Reference< container::XNamed >  xFormat(GetObjectByName_Impl(aName));
     354           4 :     if (!xFormat.is())
     355           2 :         throw container::NoSuchElementException();
     356           6 :     return uno::makeAny(xFormat);
     357             : }
     358             : 
     359           8 : uno::Sequence<OUString> SAL_CALL ScAutoFormatsObj::getElementNames()
     360             :                                                 throw(uno::RuntimeException, std::exception)
     361             : {
     362           8 :     SolarMutexGuard aGuard;
     363           8 :     ScAutoFormat* pFormats = ScGlobal::GetOrCreateAutoFormat();
     364           8 :     uno::Sequence<OUString> aSeq(pFormats->size());
     365           8 :     OUString* pAry = aSeq.getArray();
     366           8 :     ScAutoFormat::const_iterator it = pFormats->begin(), itEnd = pFormats->end();
     367         148 :     for (size_t i = 0; it != itEnd; ++it, ++i)
     368             :     {
     369         140 :         pAry[i] = it->second->GetName();
     370             :     }
     371           8 :     return aSeq;
     372             : }
     373             : 
     374           8 : sal_Bool SAL_CALL ScAutoFormatsObj::hasByName( const OUString& aName )
     375             :                                         throw(uno::RuntimeException, std::exception)
     376             : {
     377           8 :     SolarMutexGuard aGuard;
     378          16 :     OUString aString(aName);
     379             :     sal_uInt16 nDummy;
     380             :     return lcl_FindAutoFormatIndex(
     381          16 :         *ScGlobal::GetOrCreateAutoFormat(), aString, nDummy );
     382             : }
     383             : 
     384          54 : ScAutoFormatObj::ScAutoFormatObj(sal_uInt16 nIndex) :
     385             :     aPropSet( lcl_GetAutoFormatMap() ),
     386          54 :     nFormatIndex( nIndex )
     387             : {
     388             :     //! Listening !!!
     389          54 : }
     390             : 
     391         162 : ScAutoFormatObj::~ScAutoFormatObj()
     392             : {
     393             :     //  Wenn ein AutoFormat-Objekt losgelassen wird, werden eventuelle Aenderungen
     394             :     //  gespeichert, damit sie z.B. im Writer sichtbar sind
     395             : 
     396          54 :     if (IsInserted())
     397             :     {
     398          50 :         ScAutoFormat* pFormats = ScGlobal::GetAutoFormat();
     399          50 :         if ( pFormats && pFormats->IsSaveLater() )
     400           1 :             pFormats->Save();
     401             : 
     402             :         // Save() setzt SaveLater Flag zurueck
     403             :     }
     404         108 : }
     405             : 
     406           2 : void ScAutoFormatObj::InitFormat( sal_uInt16 nNewIndex )
     407             : {
     408             :     OSL_ENSURE( nFormatIndex == SC_AFMTOBJ_INVALID, "ScAutoFormatObj::InitFormat mehrfach" );
     409           2 :     nFormatIndex = nNewIndex;
     410             :     //! Listening !!!
     411           2 : }
     412             : 
     413             : // XUnoTunnel
     414             : 
     415           4 : sal_Int64 SAL_CALL ScAutoFormatObj::getSomething(
     416             :                 const uno::Sequence<sal_Int8 >& rId ) throw(uno::RuntimeException, std::exception)
     417             : {
     418           8 :     if ( rId.getLength() == 16 &&
     419           4 :           0 == memcmp( getUnoTunnelId().getConstArray(),
     420           8 :                                     rId.getConstArray(), 16 ) )
     421             :     {
     422           4 :         return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(this));
     423             :     }
     424           0 :     return 0;
     425             : }
     426             : 
     427             : namespace
     428             : {
     429             :     class theScAutoFormatObjUnoTunnelId : public rtl::Static< UnoTunnelIdInit, theScAutoFormatObjUnoTunnelId> {};
     430             : }
     431             : 
     432           8 : const uno::Sequence<sal_Int8>& ScAutoFormatObj::getUnoTunnelId()
     433             : {
     434           8 :     return theScAutoFormatObjUnoTunnelId::get().getSeq();
     435             : }
     436             : 
     437           4 : ScAutoFormatObj* ScAutoFormatObj::getImplementation(
     438             :                         const uno::Reference<uno::XInterface> xObj )
     439             : {
     440           4 :     ScAutoFormatObj* pRet = NULL;
     441           4 :     uno::Reference<lang::XUnoTunnel> xUT( xObj, uno::UNO_QUERY );
     442           4 :     if (xUT.is())
     443           4 :         pRet = reinterpret_cast<ScAutoFormatObj*>(sal::static_int_cast<sal_IntPtr>(xUT->getSomething(getUnoTunnelId())));
     444           4 :     return pRet;
     445             : }
     446             : 
     447           0 : void ScAutoFormatObj::Notify( SfxBroadcaster& /* rBC */, const SfxHint& /* rHint */ )
     448             : {
     449             :     //  spaeter...
     450           0 : }
     451             : 
     452             : // XTableAutoFormat
     453             : 
     454           8 : ScAutoFormatFieldObj* ScAutoFormatObj::GetObjectByIndex_Impl(sal_uInt16 nIndex)
     455             : {
     456           8 :     if ( IsInserted() && nIndex < SC_AF_FIELD_COUNT )
     457           8 :         return new ScAutoFormatFieldObj( nFormatIndex, nIndex );
     458             : 
     459           0 :     return NULL;
     460             : }
     461             : 
     462             : // container::XEnumerationAccess
     463             : 
     464           2 : uno::Reference<container::XEnumeration> SAL_CALL ScAutoFormatObj::createEnumeration()
     465             :                                                     throw(uno::RuntimeException, std::exception)
     466             : {
     467           2 :     SolarMutexGuard aGuard;
     468           2 :     return new ScIndexEnumeration(this, OUString("com.sun.star.sheet.TableAutoFormatEnumeration"));
     469             : }
     470             : 
     471             : // container::XIndexAccess
     472             : 
     473          14 : sal_Int32 SAL_CALL ScAutoFormatObj::getCount() throw(uno::RuntimeException, std::exception)
     474             : {
     475          14 :     SolarMutexGuard aGuard;
     476          14 :     if (IsInserted())
     477          14 :         return SC_AF_FIELD_COUNT;   // immer 16 Elemente
     478             :     else
     479           0 :         return 0;
     480             : }
     481             : 
     482          10 : uno::Any SAL_CALL ScAutoFormatObj::getByIndex( sal_Int32 nIndex )
     483             :                             throw(lang::IndexOutOfBoundsException,
     484             :                                     lang::WrappedTargetException, uno::RuntimeException, std::exception)
     485             : {
     486          10 :     SolarMutexGuard aGuard;
     487             : 
     488          10 :     if ( nIndex < 0 || nIndex >= getCount() )
     489           2 :         throw lang::IndexOutOfBoundsException();
     490             : 
     491           8 :     if (IsInserted())
     492           8 :         return uno::makeAny(uno::Reference< beans::XPropertySet >(GetObjectByIndex_Impl((sal_uInt16)nIndex)));
     493           2 :     return uno::Any();
     494             : }
     495             : 
     496           2 : uno::Type SAL_CALL ScAutoFormatObj::getElementType() throw(uno::RuntimeException, std::exception)
     497             : {
     498           2 :     SolarMutexGuard aGuard;
     499           2 :     return cppu::UnoType<beans::XPropertySet>::get();  // muss zu getByIndex passen
     500             : }
     501             : 
     502           2 : sal_Bool SAL_CALL ScAutoFormatObj::hasElements() throw(uno::RuntimeException, std::exception)
     503             : {
     504           2 :     SolarMutexGuard aGuard;
     505           2 :     return ( getCount() != 0 );
     506             : }
     507             : 
     508             : // container::XNamed
     509             : 
     510          10 : OUString SAL_CALL ScAutoFormatObj::getName() throw(uno::RuntimeException, std::exception)
     511             : {
     512          10 :     SolarMutexGuard aGuard;
     513          10 :     ScAutoFormat* pFormats = ScGlobal::GetOrCreateAutoFormat();
     514          10 :     if (IsInserted() && nFormatIndex < pFormats->size())
     515          10 :         return pFormats->findByIndex(nFormatIndex)->GetName();
     516             : 
     517           0 :     return OUString();
     518             : }
     519             : 
     520           4 : void SAL_CALL ScAutoFormatObj::setName( const OUString& aNewName )
     521             :     throw (uno::RuntimeException, std::exception)
     522             : {
     523           4 :     SolarMutexGuard aGuard;
     524           8 :     OUString aNewString(aNewName);
     525           4 :     ScAutoFormat* pFormats = ScGlobal::GetOrCreateAutoFormat();
     526             : 
     527             :     sal_uInt16 nDummy;
     528           8 :     if (IsInserted() && nFormatIndex < pFormats->size() &&
     529           4 :         !lcl_FindAutoFormatIndex( *pFormats, aNewName, nDummy ))
     530             :     {
     531           4 :         ScAutoFormat::iterator it = pFormats->begin();
     532           4 :         std::advance(it, nFormatIndex);
     533           4 :         ScAutoFormatData* pData = it->second;
     534             :         OSL_ENSURE(pData,"AutoFormat Daten nicht da");
     535             : 
     536           4 :         ScAutoFormatData* pNew = new ScAutoFormatData(*pData);
     537           4 :         pNew->SetName( aNewString );
     538             : 
     539           4 :         pFormats->erase(it);
     540           4 :         if (pFormats->insert(pNew))
     541             :         {
     542           4 :             it = pFormats->find(pNew);
     543           4 :             ScAutoFormat::iterator itBeg = pFormats->begin();
     544           4 :             nFormatIndex = std::distance(itBeg, it);
     545             : 
     546             :             //! Notify fuer andere Objekte
     547           4 :             pFormats->SetSaveLater(true);
     548             :         }
     549             :         else
     550             :         {
     551             :             OSL_FAIL("AutoFormat konnte nicht eingefuegt werden");
     552           0 :             nFormatIndex = 0;       //! alter Index ist ungueltig
     553             :         }
     554             :     }
     555             :     else
     556             :     {
     557             :         //  not inserted or name exists
     558           0 :         throw uno::RuntimeException();
     559           4 :     }
     560           4 : }
     561             : 
     562             : // beans::XPropertySet
     563             : 
     564          26 : uno::Reference<beans::XPropertySetInfo> SAL_CALL ScAutoFormatObj::getPropertySetInfo()
     565             :                                                         throw(uno::RuntimeException, std::exception)
     566             : {
     567          26 :     SolarMutexGuard aGuard;
     568          26 :     static uno::Reference< beans::XPropertySetInfo > aRef(new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ));
     569          26 :     return aRef;
     570             : }
     571             : 
     572          36 : void SAL_CALL ScAutoFormatObj::setPropertyValue(
     573             :                         const OUString& aPropertyName, const uno::Any& aValue )
     574             :                 throw(beans::UnknownPropertyException, beans::PropertyVetoException,
     575             :                         lang::IllegalArgumentException, lang::WrappedTargetException,
     576             :                         uno::RuntimeException, std::exception)
     577             : {
     578          36 :     SolarMutexGuard aGuard;
     579          36 :     ScAutoFormat* pFormats = ScGlobal::GetOrCreateAutoFormat();
     580          36 :     if (IsInserted() && nFormatIndex < pFormats->size())
     581             :     {
     582          36 :         ScAutoFormatData* pData = pFormats->findByIndex(nFormatIndex);
     583             :         OSL_ENSURE(pData,"AutoFormat Daten nicht da");
     584             : 
     585          36 :         OUString aPropString(aPropertyName);
     586             :         bool bBool;
     587          36 :         if (aPropString.equalsAscii( SC_UNONAME_INCBACK ) && (aValue >>= bBool))
     588           6 :             pData->SetIncludeBackground( bBool );
     589          30 :         else if (aPropString.equalsAscii( SC_UNONAME_INCBORD ) && (aValue >>= bBool))
     590           6 :             pData->SetIncludeFrame( bBool );
     591          24 :         else if (aPropString.equalsAscii( SC_UNONAME_INCFONT ) && (aValue >>= bBool))
     592           6 :             pData->SetIncludeFont( bBool );
     593          18 :         else if (aPropString.equalsAscii( SC_UNONAME_INCJUST ) && (aValue >>= bBool))
     594           6 :             pData->SetIncludeJustify( bBool );
     595          12 :         else if (aPropString.equalsAscii( SC_UNONAME_INCNUM ) && (aValue >>= bBool))
     596           6 :             pData->SetIncludeValueFormat( bBool );
     597           6 :         else if (aPropString.equalsAscii( SC_UNONAME_INCWIDTH ) && (aValue >>= bBool))
     598           6 :             pData->SetIncludeWidthHeight( bBool );
     599             : 
     600             :         // else Fehler
     601             : 
     602             :         //! Notify fuer andere Objekte
     603          36 :         pFormats->SetSaveLater(true);
     604          36 :     }
     605          36 : }
     606             : 
     607          84 : uno::Any SAL_CALL ScAutoFormatObj::getPropertyValue( const OUString& aPropertyName )
     608             :                 throw(beans::UnknownPropertyException, lang::WrappedTargetException,
     609             :                         uno::RuntimeException, std::exception)
     610             : {
     611          84 :     SolarMutexGuard aGuard;
     612          84 :     uno::Any aAny;
     613             : 
     614          84 :     ScAutoFormat* pFormats = ScGlobal::GetOrCreateAutoFormat();
     615          84 :     if (IsInserted() && nFormatIndex < pFormats->size())
     616             :     {
     617          84 :         ScAutoFormatData* pData = pFormats->findByIndex(nFormatIndex);
     618             :         OSL_ENSURE(pData,"AutoFormat Daten nicht da");
     619             : 
     620             :         bool bValue;
     621          84 :         bool bError = false;
     622             : 
     623          84 :         if (aPropertyName.equalsAscii( SC_UNONAME_INCBACK ))
     624          14 :             bValue = pData->GetIncludeBackground();
     625          70 :         else if (aPropertyName.equalsAscii( SC_UNONAME_INCBORD ))
     626          14 :             bValue = pData->GetIncludeFrame();
     627          56 :         else if (aPropertyName.equalsAscii( SC_UNONAME_INCFONT ))
     628          14 :             bValue = pData->GetIncludeFont();
     629          42 :         else if (aPropertyName.equalsAscii( SC_UNONAME_INCJUST ))
     630          14 :             bValue = pData->GetIncludeJustify();
     631          28 :         else if (aPropertyName.equalsAscii( SC_UNONAME_INCNUM ))
     632          14 :             bValue = pData->GetIncludeValueFormat();
     633          14 :         else if (aPropertyName.equalsAscii( SC_UNONAME_INCWIDTH ))
     634          14 :             bValue = pData->GetIncludeWidthHeight();
     635             :         else
     636           0 :             bError = true;      // unbekannte Property
     637             : 
     638          84 :         if (!bError)
     639          84 :             aAny <<= bValue;
     640             :     }
     641             : 
     642          84 :     return aAny;
     643             : }
     644             : 
     645           0 : SC_IMPL_DUMMY_PROPERTY_LISTENER( ScAutoFormatObj )
     646             : 
     647           8 : ScAutoFormatFieldObj::ScAutoFormatFieldObj(sal_uInt16 nFormat, sal_uInt16 nField) :
     648             :     aPropSet( lcl_GetAutoFieldMap() ),
     649             :     nFormatIndex( nFormat ),
     650           8 :     nFieldIndex( nField )
     651             : {
     652             :     //! Listening !!!
     653           8 : }
     654             : 
     655          16 : ScAutoFormatFieldObj::~ScAutoFormatFieldObj()
     656             : {
     657          16 : }
     658             : 
     659           0 : void ScAutoFormatFieldObj::Notify( SfxBroadcaster& /* rBC */, const SfxHint& /* rHint */ )
     660             : {
     661             :     //  spaeter...
     662           0 : }
     663             : 
     664             : // beans::XPropertySet
     665             : 
     666           2 : uno::Reference<beans::XPropertySetInfo> SAL_CALL ScAutoFormatFieldObj::getPropertySetInfo()
     667             :                                                         throw(uno::RuntimeException, std::exception)
     668             : {
     669           2 :     SolarMutexGuard aGuard;
     670           2 :     static uno::Reference< beans::XPropertySetInfo > aRef(new SfxItemPropertySetInfo( aPropSet.getPropertyMap() ));
     671           2 :     return aRef;
     672             : }
     673             : 
     674         172 : void SAL_CALL ScAutoFormatFieldObj::setPropertyValue(
     675             :                         const OUString& aPropertyName, const uno::Any& aValue )
     676             :                 throw(beans::UnknownPropertyException, beans::PropertyVetoException,
     677             :                         lang::IllegalArgumentException, lang::WrappedTargetException,
     678             :                         uno::RuntimeException, std::exception)
     679             : {
     680         172 :     SolarMutexGuard aGuard;
     681         172 :     ScAutoFormat* pFormats = ScGlobal::GetOrCreateAutoFormat();
     682             :     const SfxItemPropertySimpleEntry* pEntry =
     683         172 :             aPropSet.getPropertyMap().getByName( aPropertyName );
     684             : 
     685         172 :     if ( pEntry && pEntry->nWID && nFormatIndex < pFormats->size() )
     686             :     {
     687         172 :         ScAutoFormatData* pData = pFormats->findByIndex(nFormatIndex);
     688             : 
     689         172 :         if ( IsScItemWid( pEntry->nWID ) )
     690             :         {
     691         168 :             if( const SfxPoolItem* pItem = pData->GetItem( nFieldIndex, pEntry->nWID ) )
     692             :             {
     693         168 :                 bool bDone = false;
     694             : 
     695         168 :                 switch( pEntry->nWID )
     696             :                 {
     697             :                     case ATTR_STACKED:
     698             :                     {
     699             :                         table::CellOrientation eOrient;
     700           4 :                         if( aValue >>= eOrient )
     701             :                         {
     702           4 :                             switch( eOrient )
     703             :                             {
     704             :                                 case table::CellOrientation_STANDARD:
     705           0 :                                     pData->PutItem( nFieldIndex, SfxBoolItem( ATTR_STACKED, false ) );
     706           0 :                                 break;
     707             :                                 case table::CellOrientation_TOPBOTTOM:
     708           4 :                                     pData->PutItem( nFieldIndex, SfxBoolItem( ATTR_STACKED, false ) );
     709           4 :                                     pData->PutItem( nFieldIndex, SfxInt32Item( ATTR_ROTATE_VALUE, 27000 ) );
     710           4 :                                 break;
     711             :                                 case table::CellOrientation_BOTTOMTOP:
     712           0 :                                     pData->PutItem( nFieldIndex, SfxBoolItem( ATTR_STACKED, false ) );
     713           0 :                                     pData->PutItem( nFieldIndex, SfxInt32Item( ATTR_ROTATE_VALUE, 9000 ) );
     714           0 :                                 break;
     715             :                                 case table::CellOrientation_STACKED:
     716           0 :                                     pData->PutItem( nFieldIndex, SfxBoolItem( ATTR_STACKED, true ) );
     717           0 :                                 break;
     718             :                                 default:
     719             :                                 {
     720             :                                     // added to avoid warnings
     721             :                                 }
     722             :                             }
     723           4 :                             bDone = true;
     724             :                         }
     725             :                     }
     726           4 :                     break;
     727             :                     default:
     728         164 :                         SfxPoolItem* pNewItem = pItem->Clone();
     729         164 :                         bDone = pNewItem->PutValue( aValue, pEntry->nMemberId );
     730         164 :                         if (bDone)
     731         164 :                             pData->PutItem( nFieldIndex, *pNewItem );
     732         164 :                         delete pNewItem;
     733             :                 }
     734             : 
     735         168 :                 if (bDone)
     736             :                     //! Notify fuer andere Objekte?
     737         168 :                     pFormats->SetSaveLater(true);
     738             :             }
     739             :         }
     740             :         else
     741             :         {
     742           4 :             switch (pEntry->nWID)
     743             :             {
     744             :                 case SC_WID_UNO_TBLBORD:
     745             :                     {
     746           4 :                         table::TableBorder aBorder;
     747           4 :                         if ( aValue >>= aBorder )   // empty = nothing to do
     748             :                         {
     749           4 :                             SvxBoxItem aOuter(ATTR_BORDER);
     750           8 :                             SvxBoxInfoItem aInner(ATTR_BORDER_INNER);
     751           4 :                             ScHelperFunctions::FillBoxItems( aOuter, aInner, aBorder );
     752           4 :                             pData->PutItem( nFieldIndex, aOuter );
     753             : 
     754             :                             //! Notify for other objects?
     755           8 :                             pFormats->SetSaveLater(true);
     756             :                         }
     757             :                     }
     758           4 :                     break;
     759             :                 case SC_WID_UNO_TBLBORD2:
     760             :                     {
     761           0 :                         table::TableBorder2 aBorder2;
     762           0 :                         if ( aValue >>= aBorder2 )   // empty = nothing to do
     763             :                         {
     764           0 :                             SvxBoxItem aOuter(ATTR_BORDER);
     765           0 :                             SvxBoxInfoItem aInner(ATTR_BORDER_INNER);
     766           0 :                             ScHelperFunctions::FillBoxItems( aOuter, aInner, aBorder2 );
     767           0 :                             pData->PutItem( nFieldIndex, aOuter );
     768             : 
     769             :                             //! Notify for other objects?
     770           0 :                             pFormats->SetSaveLater(true);
     771             :                         }
     772             :                     }
     773           0 :                     break;
     774             :             }
     775             :         }
     776         172 :     }
     777         172 : }
     778             : 
     779         434 : uno::Any SAL_CALL ScAutoFormatFieldObj::getPropertyValue( const OUString& aPropertyName )
     780             :                 throw(beans::UnknownPropertyException, lang::WrappedTargetException,
     781             :                         uno::RuntimeException, std::exception)
     782             : {
     783         434 :     SolarMutexGuard aGuard;
     784         434 :     uno::Any aVal;
     785             : 
     786         434 :     ScAutoFormat* pFormats = ScGlobal::GetOrCreateAutoFormat();
     787             :     const SfxItemPropertySimpleEntry* pEntry =
     788         434 :             aPropSet.getPropertyMap().getByName( aPropertyName );
     789             : 
     790         434 :     if ( pEntry && pEntry->nWID && nFormatIndex < pFormats->size() )
     791             :     {
     792         434 :         const ScAutoFormatData* pData = pFormats->findByIndex(nFormatIndex);
     793             : 
     794         434 :         if ( IsScItemWid( pEntry->nWID ) )
     795             :         {
     796         422 :             if( const SfxPoolItem* pItem = pData->GetItem( nFieldIndex, pEntry->nWID ) )
     797             :             {
     798         418 :                 switch( pEntry->nWID )
     799             :                 {
     800             :                     case ATTR_STACKED:
     801             :                     {
     802          10 :                         const SfxInt32Item* pRotItem = static_cast<const SfxInt32Item*>(pData->GetItem( nFieldIndex, ATTR_ROTATE_VALUE ));
     803          10 :                         sal_Int32 nRot = pRotItem ? pRotItem->GetValue() : 0;
     804          10 :                         bool bStacked = static_cast<const SfxBoolItem*>(pItem)->GetValue();
     805          10 :                         SvxOrientationItem( nRot, bStacked, 0 ).QueryValue( aVal );
     806             :                     }
     807          10 :                     break;
     808             :                     default:
     809         408 :                         pItem->QueryValue( aVal, pEntry->nMemberId );
     810             :                 }
     811             :             }
     812             :         }
     813             :         else
     814             :         {
     815          12 :             switch (pEntry->nWID)
     816             :             {
     817             :                 case SC_WID_UNO_TBLBORD:
     818             :                 case SC_WID_UNO_TBLBORD2:
     819             :                     {
     820          12 :                         const SfxPoolItem* pItem = pData->GetItem(nFieldIndex, ATTR_BORDER);
     821          12 :                         if (pItem)
     822             :                         {
     823          12 :                             SvxBoxItem aOuter(*(static_cast<const SvxBoxItem*>(pItem)));
     824          24 :                             SvxBoxInfoItem aInner(ATTR_BORDER_INNER);
     825             : 
     826          12 :                             if (pEntry->nWID == SC_WID_UNO_TBLBORD2)
     827           2 :                                 ScHelperFunctions::AssignTableBorder2ToAny( aVal, aOuter, aInner);
     828             :                             else
     829          22 :                                 ScHelperFunctions::AssignTableBorderToAny( aVal, aOuter, aInner);
     830             :                         }
     831             :                     }
     832          12 :                     break;
     833             :             }
     834             :         }
     835             :     }
     836             : 
     837         434 :     return aVal;
     838             : }
     839             : 
     840         228 : SC_IMPL_DUMMY_PROPERTY_LISTENER( ScAutoFormatFieldObj )
     841             : 
     842             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10