LCOV - code coverage report
Current view: top level - xmloff/source/style - HatchStyle.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 81 82 98.8 %
Date: 2015-06-13 12:38:46 Functions: 6 6 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <xmloff/HatchStyle.hxx>
      21             : 
      22             : #include <com/sun/star/drawing/Hatch.hpp>
      23             : 
      24             : #include <sax/tools/converter.hxx>
      25             : 
      26             : #include <xmloff/nmspmap.hxx>
      27             : #include <xmloff/xmluconv.hxx>
      28             : #include <xmloff/xmlnmspe.hxx>
      29             : #include <xmloff/xmltoken.hxx>
      30             : #include <xmloff/xmlexp.hxx>
      31             : #include <xmloff/xmlimp.hxx>
      32             : #include <rtl/ustrbuf.hxx>
      33             : #include <rtl/ustring.hxx>
      34             : #include <tools/debug.hxx>
      35             : #include <xmloff/xmltkmap.hxx>
      36             : 
      37             : using namespace ::com::sun::star;
      38             : 
      39             : using namespace ::xmloff::token;
      40             : 
      41             : enum SvXMLTokenMapAttrs
      42             : {
      43             :     XML_TOK_HATCH_NAME,
      44             :     XML_TOK_HATCH_DISPLAY_NAME,
      45             :     XML_TOK_HATCH_STYLE,
      46             :     XML_TOK_HATCH_COLOR,
      47             :     XML_TOK_HATCH_DISTANCE,
      48             :     XML_TOK_HATCH_ROTATION,
      49             :     XML_TOK_TABSTOP_END=XML_TOK_UNKNOWN
      50             : };
      51             : 
      52             : SvXMLEnumMapEntry const pXML_HatchStyle_Enum[] =
      53             : {
      54             :     { XML_HATCHSTYLE_SINGLE,    drawing::HatchStyle_SINGLE },
      55             :     { XML_HATCHSTYLE_DOUBLE,    drawing::HatchStyle_DOUBLE },
      56             :     { XML_HATCHSTYLE_TRIPLE,    drawing::HatchStyle_TRIPLE },
      57             :     { XML_TOKEN_INVALID, 0 }
      58             : };
      59             : 
      60             : // Import
      61             : 
      62         231 : XMLHatchStyleImport::XMLHatchStyleImport( SvXMLImport& rImp )
      63         231 :     : rImport(rImp)
      64             : {
      65         231 : }
      66             : 
      67         231 : XMLHatchStyleImport::~XMLHatchStyleImport()
      68             : {
      69         231 : }
      70             : 
      71         231 : bool XMLHatchStyleImport::importXML(
      72             :     const uno::Reference< xml::sax::XAttributeList >& xAttrList,
      73             :     uno::Any& rValue,
      74             :     OUString& rStrName )
      75             : {
      76             :     static const SvXMLTokenMapEntry aHatchAttrTokenMap[] =
      77             :     {
      78             :         { XML_NAMESPACE_DRAW, XML_NAME, XML_TOK_HATCH_NAME },
      79             :         { XML_NAMESPACE_DRAW, XML_DISPLAY_NAME, XML_TOK_HATCH_DISPLAY_NAME },
      80             :         { XML_NAMESPACE_DRAW, XML_STYLE, XML_TOK_HATCH_STYLE },
      81             :         { XML_NAMESPACE_DRAW, XML_COLOR, XML_TOK_HATCH_COLOR },
      82             :         { XML_NAMESPACE_DRAW, XML_HATCH_DISTANCE, XML_TOK_HATCH_DISTANCE },
      83             :         { XML_NAMESPACE_DRAW, XML_ROTATION, XML_TOK_HATCH_ROTATION },
      84             :         XML_TOKEN_MAP_END
      85             :     };
      86             : 
      87         231 :     bool bHasName  = false;
      88         231 :     bool bHasStyle = false;
      89         231 :     bool bHasColor = false;
      90         231 :     bool bHasDist  = false;
      91         231 :     OUString aDisplayName;
      92             : 
      93         231 :     drawing::Hatch aHatch;
      94         231 :     aHatch.Style = drawing::HatchStyle_SINGLE;
      95         231 :     aHatch.Color = 0;
      96         231 :     aHatch.Distance = 0;
      97         231 :     aHatch.Angle = 0;
      98             : 
      99         462 :     SvXMLTokenMap aTokenMap( aHatchAttrTokenMap );
     100         462 :     SvXMLNamespaceMap rNamespaceMap = rImport.GetNamespaceMap();
     101         231 :     SvXMLUnitConverter& rUnitConverter = rImport.GetMM100UnitConverter();
     102             : 
     103         231 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
     104        1427 :     for( sal_Int16 i=0; i < nAttrCount; i++ )
     105             :     {
     106        1196 :         const OUString& rFullAttrName = xAttrList->getNameByIndex( i );
     107        2392 :         OUString aStrAttrName;
     108        1196 :         sal_uInt16 nPrefix = rNamespaceMap.GetKeyByAttrName( rFullAttrName, &aStrAttrName );
     109        2392 :         const OUString& rStrValue = xAttrList->getValueByIndex( i );
     110             : 
     111        1196 :         switch( aTokenMap.Get( nPrefix, aStrAttrName ) )
     112             :         {
     113             :             case XML_TOK_HATCH_NAME:
     114             :                 {
     115         231 :                     rStrName = rStrValue;
     116         231 :                     bHasName = true;
     117             :                 }
     118         231 :                 break;
     119             :             case XML_TOK_HATCH_DISPLAY_NAME:
     120          41 :                 aDisplayName = rStrValue;
     121          41 :                 break;
     122             :             case XML_TOK_HATCH_STYLE:
     123             :                 {
     124             :                     sal_uInt16 eValue;
     125         231 :                     bHasStyle = SvXMLUnitConverter::convertEnum( eValue, rStrValue, pXML_HatchStyle_Enum );
     126         231 :                     if( bHasStyle )
     127         231 :                         aHatch.Style = (drawing::HatchStyle) eValue;
     128             :                 }
     129         231 :                 break;
     130             :             case XML_TOK_HATCH_COLOR:
     131             :                 {
     132             :                     bHasColor = ::sax::Converter::convertColor(
     133         231 :                             aHatch.Color, rStrValue);
     134             :                 }
     135         231 :                 break;
     136             :             case XML_TOK_HATCH_DISTANCE:
     137             :                 bHasDist = rUnitConverter.convertMeasureToCore(
     138         231 :                         (sal_Int32&)aHatch.Distance, rStrValue );
     139         231 :                 break;
     140             :             case XML_TOK_HATCH_ROTATION:
     141             :                 {
     142             :                     sal_Int32 nValue;
     143         231 :                     ::sax::Converter::convertNumber(nValue, rStrValue, 0, 3600);
     144         231 :                     aHatch.Angle = sal_Int16( nValue );
     145             :                 }
     146         231 :                 break;
     147             : 
     148             :             default:
     149             :                 SAL_INFO("xmloff.style", "Unknown token at import hatch style");
     150             :         }
     151        1196 :     }
     152             : 
     153         231 :     rValue <<= aHatch;
     154             : 
     155         231 :     if( !aDisplayName.isEmpty() )
     156             :     {
     157             :         rImport.AddStyleDisplayName( XML_STYLE_FAMILY_SD_HATCH_ID, rStrName,
     158          41 :                                      aDisplayName );
     159          41 :         rStrName = aDisplayName;
     160             :     }
     161             : 
     162         231 :     bool bRet = bHasName && bHasStyle && bHasColor && bHasDist;
     163             : 
     164         462 :     return bRet;
     165             : }
     166             : 
     167             : // Export
     168             : 
     169         386 : XMLHatchStyleExport::XMLHatchStyleExport( SvXMLExport& rExp )
     170         386 :     : rExport(rExp)
     171             : {
     172         386 : }
     173             : 
     174         386 : XMLHatchStyleExport::~XMLHatchStyleExport()
     175             : {
     176         386 : }
     177             : 
     178           7 : bool XMLHatchStyleExport::exportXML(
     179             :     const OUString& rStrName,
     180             :     const uno::Any& rValue )
     181             : {
     182           7 :     bool bRet = false;
     183           7 :     drawing::Hatch aHatch;
     184             : 
     185           7 :     if( !rStrName.isEmpty() )
     186             :     {
     187           7 :         if( rValue >>= aHatch )
     188             :         {
     189           7 :             OUString aStrValue;
     190          14 :             OUStringBuffer aOut;
     191             : 
     192             :             SvXMLUnitConverter& rUnitConverter =
     193           7 :                 rExport.GetMM100UnitConverter();
     194             : 
     195             :             // Style
     196           7 :             if( !SvXMLUnitConverter::convertEnum( aOut, aHatch.Style, pXML_HatchStyle_Enum ) )
     197             :             {
     198           0 :                 bRet = false;
     199             :             }
     200             :             else
     201             :             {
     202             :                 // Name
     203           7 :                 bool bEncoded = false;
     204             :                 rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_NAME,
     205             :                                       rExport.EncodeStyleName( rStrName,
     206           7 :                                                                 &bEncoded ) );
     207           7 :                 if( bEncoded )
     208             :                     rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_DISPLAY_NAME,
     209           7 :                                             rStrName );
     210             : 
     211           7 :                 aStrValue = aOut.makeStringAndClear();
     212           7 :                 rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_STYLE, aStrValue );
     213             : 
     214             :                 // Color
     215           7 :                 ::sax::Converter::convertColor(aOut, aHatch.Color);
     216           7 :                 aStrValue = aOut.makeStringAndClear();
     217           7 :                 rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_COLOR, aStrValue );
     218             : 
     219             :                 // Distance
     220           7 :                 rUnitConverter.convertMeasureToXML( aOut, aHatch.Distance );
     221           7 :                 aStrValue = aOut.makeStringAndClear();
     222           7 :                 rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_HATCH_DISTANCE, aStrValue );
     223             : 
     224             :                 // Angle
     225           7 :                 ::sax::Converter::convertNumber(aOut, sal_Int32(aHatch.Angle));
     226           7 :                 aStrValue = aOut.makeStringAndClear();
     227           7 :                 rExport.AddAttribute( XML_NAMESPACE_DRAW, XML_ROTATION, aStrValue );
     228             : 
     229             :                 // Do Write
     230             :                 SvXMLElementExport rElem( rExport, XML_NAMESPACE_DRAW, XML_HATCH,
     231           7 :                                           true, false );
     232           7 :             }
     233             :         }
     234             :     }
     235             : 
     236           7 :     return bRet;
     237             : }
     238             : 
     239             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11