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

Generated by: LCOV version 1.11