LCOV - code coverage report
Current view: top level - xmloff/source/draw - ximpstyl.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 512 671 76.3 %
Date: 2015-06-13 12:38:46 Functions: 60 93 64.5 %
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 "ximpstyl.hxx"
      21             : #include <xmloff/XMLShapeStyleContext.hxx>
      22             : #include <xmloff/xmlnmspe.hxx>
      23             : #include <xmloff/xmltoken.hxx>
      24             : #include <xmloff/xmluconv.hxx>
      25             : #include "ximpnote.hxx"
      26             : #include <tools/debug.hxx>
      27             : #include <osl/diagnose.h>
      28             : 
      29             : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
      30             : #include <com/sun/star/lang/XSingleServiceFactory.hpp>
      31             : #include <com/sun/star/presentation/XPresentationPage.hpp>
      32             : #include <com/sun/star/drawing/XDrawPages.hpp>
      33             : #include <com/sun/star/container/XNamed.hpp>
      34             : #include <com/sun/star/beans/XPropertySet.hpp>
      35             : #include <com/sun/star/beans/XPropertyState.hpp>
      36             : #include <com/sun/star/presentation/XHandoutMasterSupplier.hpp>
      37             : #include <comphelper/namecontainer.hxx>
      38             : #include <xmloff/xmlprcon.hxx>
      39             : #include <xmloff/families.hxx>
      40             : #include <com/sun/star/container/XNameContainer.hpp>
      41             : #include <svl/zforlist.hxx>
      42             : #include "PropertySetMerger.hxx"
      43             : #include "sdpropls.hxx"
      44             : #include "layerimp.hxx"
      45             : #include <xmloff/XMLGraphicsDefaultStyle.hxx>
      46             : #include "XMLNumberStylesImport.hxx"
      47             : #include <xmloff/xmlerror.hxx>
      48             : 
      49             : using namespace ::com::sun::star;
      50             : using namespace ::com::sun::star::uno;
      51             : using namespace ::com::sun::star::xml::sax;
      52             : using namespace ::xmloff::token;
      53             : 
      54             : class SdXMLDrawingPagePropertySetContext : public SvXMLPropertySetContext
      55             : {
      56             : public:
      57             : 
      58             :     TYPEINFO_OVERRIDE();
      59             : 
      60             :     SdXMLDrawingPagePropertySetContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
      61             :                 const OUString& rLName,
      62             :                  const ::com::sun::star::uno::Reference<
      63             :                          ::com::sun::star::xml::sax::XAttributeList >& xAttrList,
      64             :                  ::std::vector< XMLPropertyState > &rProps,
      65             :                  const rtl::Reference < SvXMLImportPropertyMapper > &rMap );
      66             : 
      67             :     virtual ~SdXMLDrawingPagePropertySetContext();
      68             : 
      69             :     using SvXMLPropertySetContext::CreateChildContext;
      70             :     virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
      71             :                                    const OUString& rLocalName,
      72             :                                    const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList,
      73             :                                    ::std::vector< XMLPropertyState > &rProperties,
      74             :                                    const XMLPropertyState& rProp) SAL_OVERRIDE;
      75             : };
      76             : 
      77           0 : TYPEINIT1( SdXMLDrawingPagePropertySetContext, SvXMLPropertySetContext );
      78             : 
      79         216 : SdXMLDrawingPagePropertySetContext::SdXMLDrawingPagePropertySetContext(
      80             :                  SvXMLImport& rImport, sal_uInt16 nPrfx,
      81             :                  const OUString& rLName,
      82             :                  const uno::Reference< xml::sax::XAttributeList > & xAttrList,
      83             :                  ::std::vector< XMLPropertyState > &rProps,
      84             :                  const rtl::Reference < SvXMLImportPropertyMapper > &rMap ) :
      85             :     SvXMLPropertySetContext( rImport, nPrfx, rLName, xAttrList,
      86         216 :                              XML_TYPE_PROP_DRAWING_PAGE, rProps, rMap )
      87             : {
      88         216 : }
      89             : 
      90         432 : SdXMLDrawingPagePropertySetContext::~SdXMLDrawingPagePropertySetContext()
      91             : {
      92         432 : }
      93             : 
      94           0 : SvXMLImportContext *SdXMLDrawingPagePropertySetContext::CreateChildContext(
      95             :                    sal_uInt16 p_nPrefix,
      96             :                    const OUString& rLocalName,
      97             :                    const uno::Reference< xml::sax::XAttributeList > & xAttrList,
      98             :                    ::std::vector< XMLPropertyState > &rProperties,
      99             :                    const XMLPropertyState& rProp )
     100             : {
     101           0 :     SvXMLImportContext *pContext = 0;
     102             : 
     103           0 :     switch( mxMapper->getPropertySetMapper()->GetEntryContextId( rProp.mnIndex ) )
     104             :     {
     105             :     case CTF_PAGE_SOUND_URL:
     106             :     {
     107           0 :         const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
     108           0 :         for(sal_Int16 i=0; i < nAttrCount; i++)
     109             :         {
     110           0 :             OUString aLocalName;
     111           0 :             sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName(xAttrList->getNameByIndex(i), &aLocalName);
     112             : 
     113           0 :             if( (nPrefix == XML_NAMESPACE_XLINK) && IsXMLToken( aLocalName, XML_HREF ) )
     114             :             {
     115           0 :                 uno::Any aAny( GetImport().GetAbsoluteReference( xAttrList->getValueByIndex(i) ) );
     116           0 :                 XMLPropertyState aPropState( rProp.mnIndex, aAny );
     117           0 :                 rProperties.push_back( aPropState );
     118             :             }
     119           0 :         }
     120           0 :         break;
     121             :     }
     122             :     }
     123             : 
     124           0 :     if( !pContext )
     125             :         pContext = SvXMLPropertySetContext::CreateChildContext( p_nPrefix, rLocalName,
     126             :                                                             xAttrList,
     127           0 :                                                             rProperties, rProp );
     128             : 
     129           0 :     return pContext;
     130             : }
     131             : 
     132             : class SdXMLDrawingPageStyleContext : public XMLPropStyleContext
     133             : {
     134             : public:
     135             :     TYPEINFO_OVERRIDE();
     136             : 
     137             :     SdXMLDrawingPageStyleContext(
     138             :         SvXMLImport& rImport,
     139             :         sal_uInt16 nPrfx,
     140             :         const OUString& rLName,
     141             :         const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList,
     142             :         SvXMLStylesContext& rStyles,
     143             :         sal_uInt16 nFamily = XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID);
     144             :     virtual ~SdXMLDrawingPageStyleContext();
     145             : 
     146             :     SvXMLImportContext * CreateChildContext(
     147             :         sal_uInt16 nPrefix,
     148             :         const OUString& rLocalName,
     149             :         const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > & xAttrList ) SAL_OVERRIDE;
     150             : 
     151             :     virtual void Finish( bool bOverwrite ) SAL_OVERRIDE;
     152             : 
     153             :     // #i35918#
     154             :     virtual void FillPropertySet(
     155             :             const ::com::sun::star::uno::Reference<
     156             :                 ::com::sun::star::beans::XPropertySet > & rPropSet ) SAL_OVERRIDE;
     157             : };
     158             : 
     159        1638 : TYPEINIT1( SdXMLDrawingPageStyleContext, XMLPropStyleContext );
     160             : 
     161         218 : SdXMLDrawingPageStyleContext::SdXMLDrawingPageStyleContext(
     162             :     SvXMLImport& rImport,
     163             :     sal_uInt16 nPrfx,
     164             :     const OUString& rLName,
     165             :     const uno::Reference< xml::sax::XAttributeList >& xAttrList,
     166             :     SvXMLStylesContext& rStyles,
     167             :     sal_uInt16 nFamily)
     168         218 : :   XMLPropStyleContext(rImport, nPrfx, rLName, xAttrList, rStyles, nFamily )
     169             : {
     170         218 : }
     171             : 
     172         436 : SdXMLDrawingPageStyleContext::~SdXMLDrawingPageStyleContext()
     173             : {
     174         436 : }
     175             : 
     176         216 : SvXMLImportContext *SdXMLDrawingPageStyleContext::CreateChildContext(
     177             :         sal_uInt16 nPrefix,
     178             :         const OUString& rLocalName,
     179             :         const uno::Reference< xml::sax::XAttributeList > & xAttrList )
     180             : {
     181         216 :     SvXMLImportContext *pContext = 0;
     182             : 
     183         432 :     if( XML_NAMESPACE_STYLE == nPrefix &&
     184         216 :         IsXMLToken( rLocalName, XML_DRAWING_PAGE_PROPERTIES ) )
     185             :     {
     186             :         rtl::Reference < SvXMLImportPropertyMapper > xImpPrMap =
     187         216 :             GetStyles()->GetImportPropertyMapper( GetFamily() );
     188         216 :         if( xImpPrMap.is() )
     189         216 :             pContext = new SdXMLDrawingPagePropertySetContext( GetImport(), nPrefix,
     190             :                                                     rLocalName, xAttrList,
     191         216 :                                                     GetProperties(),
     192         432 :                                                     xImpPrMap );
     193             :     }
     194             : 
     195         216 :     if( !pContext )
     196             :         pContext = XMLPropStyleContext::CreateChildContext( nPrefix, rLocalName,
     197           0 :                                                           xAttrList );
     198             : 
     199         216 :     return pContext;
     200             : }
     201             : 
     202         218 : void SdXMLDrawingPageStyleContext::Finish( bool bOverwrite )
     203             : {
     204         218 :     XMLPropStyleContext::Finish( bOverwrite );
     205             : 
     206         218 :     ::std::vector< XMLPropertyState > &rProperties = GetProperties();
     207             : 
     208         218 :     const rtl::Reference< XMLPropertySetMapper >& rImpPrMap = GetStyles()->GetImportPropertyMapper( GetFamily() )->getPropertySetMapper();
     209             : 
     210         218 :     ::std::vector< XMLPropertyState >::iterator property = rProperties.begin();
     211         923 :     for(; property != rProperties.end(); ++property)
     212             :     {
     213         705 :         if( property->mnIndex == -1 )
     214           0 :             continue;
     215             : 
     216         705 :         sal_Int16 nContextID = rImpPrMap->GetEntryContextId(property->mnIndex);
     217         705 :         switch( nContextID )
     218             :         {
     219             :             case CTF_DATE_TIME_FORMAT:
     220             :             {
     221           0 :                 OUString sStyleName;
     222           0 :                 (*property).maValue >>= sStyleName;
     223             : 
     224           0 :                 sal_Int32 nStyle = 0;
     225             : 
     226             :                 const SdXMLNumberFormatImportContext* pSdNumStyle =
     227           0 :                     PTR_CAST( SdXMLNumberFormatImportContext,
     228             :                         GetStyles()->FindStyleChildContext( XML_STYLE_FAMILY_DATA_STYLE, sStyleName, true ) );
     229             : 
     230           0 :                 if( pSdNumStyle )
     231           0 :                     nStyle = pSdNumStyle->GetDrawKey();
     232             : 
     233           0 :                 (*property).maValue <<= nStyle;
     234             :             }
     235           0 :             break;
     236             :         }
     237             :     }
     238             : 
     239         218 : }
     240             : 
     241             : // #i35918#
     242         328 : void SdXMLDrawingPageStyleContext::FillPropertySet(
     243             :     const Reference< beans::XPropertySet > & rPropSet )
     244             : {
     245             :     static const sal_uInt16 MAX_SPECIAL_DRAW_STYLES = 7;
     246             :     struct _ContextID_Index_Pair aContextIDs[MAX_SPECIAL_DRAW_STYLES+1] =
     247             :     {
     248             :         { CTF_DASHNAME , -1 },
     249             :         { CTF_LINESTARTNAME , -1 },
     250             :         { CTF_LINEENDNAME , -1 },
     251             :         { CTF_FILLGRADIENTNAME, -1 },
     252             :         { CTF_FILLTRANSNAME , -1 },
     253             :         { CTF_FILLHATCHNAME , -1 },
     254             :         { CTF_FILLBITMAPNAME , -1 },
     255             :         { -1, -1 }
     256         328 :     };
     257             :     static const sal_uInt16 aFamilies[MAX_SPECIAL_DRAW_STYLES] =
     258             :     {
     259             :         XML_STYLE_FAMILY_SD_STROKE_DASH_ID,
     260             :         XML_STYLE_FAMILY_SD_MARKER_ID,
     261             :         XML_STYLE_FAMILY_SD_MARKER_ID,
     262             :         XML_STYLE_FAMILY_SD_GRADIENT_ID,
     263             :         XML_STYLE_FAMILY_SD_GRADIENT_ID,
     264             :         XML_STYLE_FAMILY_SD_HATCH_ID,
     265             :         XML_STYLE_FAMILY_SD_FILL_IMAGE_ID
     266             :     };
     267             : 
     268             :     rtl::Reference < SvXMLImportPropertyMapper > xImpPrMap =
     269         328 :         GetStyles()->GetImportPropertyMapper( GetFamily() );
     270             :     DBG_ASSERT( xImpPrMap.is(), "There is the import prop mapper" );
     271         328 :     if( xImpPrMap.is() )
     272         328 :         xImpPrMap->FillPropertySet( GetProperties(), rPropSet, aContextIDs );
     273             : 
     274         656 :     Reference< beans::XPropertySetInfo > xInfo;
     275        2624 :     for( sal_uInt16 i=0; i<MAX_SPECIAL_DRAW_STYLES; i++ )
     276             :     {
     277        2296 :         sal_Int32 nIndex = aContextIDs[i].nIndex;
     278        2296 :         if( nIndex != -1 )
     279             :         {
     280           1 :             struct XMLPropertyState& rState = GetProperties()[nIndex];
     281           1 :             OUString sStyleName;
     282           1 :             rState.maValue >>= sStyleName;
     283           2 :             sStyleName = GetImport().GetStyleDisplayName( aFamilies[i],
     284           1 :                                                           sStyleName );
     285             :             // get property set mapper
     286             :             rtl::Reference<XMLPropertySetMapper> rPropMapper =
     287           2 :                                         xImpPrMap->getPropertySetMapper();
     288             : 
     289             :             // set property
     290             :             const OUString& rPropertyName =
     291           1 :                     rPropMapper->GetEntryAPIName(rState.mnIndex);
     292           1 :             if( !xInfo.is() )
     293           1 :                 xInfo = rPropSet->getPropertySetInfo();
     294           1 :             if ( xInfo->hasPropertyByName( rPropertyName ) )
     295             :             {
     296           1 :                 rPropSet->setPropertyValue( rPropertyName, Any( sStyleName ) );
     297           1 :             }
     298             :         }
     299         328 :     }
     300         328 : }
     301             : 
     302           0 : TYPEINIT1( SdXMLPageMasterStyleContext, SvXMLStyleContext );
     303             : 
     304         132 : SdXMLPageMasterStyleContext::SdXMLPageMasterStyleContext(
     305             :     SdXMLImport& rImport,
     306             :     sal_uInt16 nPrfx,
     307             :     const OUString& rLName,
     308             :     const uno::Reference< xml::sax::XAttributeList>& xAttrList)
     309             : :   SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList, XML_STYLE_FAMILY_SD_PAGEMASTERSTYLECONEXT_ID),
     310             :     mnBorderBottom( 0L ),
     311             :     mnBorderLeft( 0L ),
     312             :     mnBorderRight( 0L ),
     313             :     mnBorderTop( 0L ),
     314             :     mnWidth( 0L ),
     315             :     mnHeight( 0L ),
     316         132 :     meOrientation(GetSdImport().IsDraw() ? view::PaperOrientation_PORTRAIT : view::PaperOrientation_LANDSCAPE)
     317             : {
     318             :     // set family to something special at SvXMLStyleContext
     319             :     // for differences in search-methods
     320             : 
     321         132 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
     322        1093 :     for(sal_Int16 i=0; i < nAttrCount; i++)
     323             :     {
     324         961 :         OUString sAttrName = xAttrList->getNameByIndex(i);
     325        1922 :         OUString aLocalName;
     326         961 :         sal_uInt16 nPrefix = GetSdImport().GetNamespaceMap().GetKeyByAttrName(sAttrName, &aLocalName);
     327        1922 :         OUString sValue = xAttrList->getValueByIndex(i);
     328         961 :         const SvXMLTokenMap& rAttrTokenMap = GetSdImport().GetPageMasterStyleAttrTokenMap();
     329             : 
     330         961 :         switch(rAttrTokenMap.Get(nPrefix, aLocalName))
     331             :         {
     332             :             case XML_TOK_PAGEMASTERSTYLE_MARGIN_TOP:
     333             :             {
     334         120 :                 GetSdImport().GetMM100UnitConverter().convertMeasureToCore(
     335         240 :                         mnBorderTop, sValue);
     336         120 :                 break;
     337             :             }
     338             :             case XML_TOK_PAGEMASTERSTYLE_MARGIN_BOTTOM:
     339             :             {
     340         120 :                 GetSdImport().GetMM100UnitConverter().convertMeasureToCore(
     341         240 :                         mnBorderBottom, sValue);
     342         120 :                 break;
     343             :             }
     344             :             case XML_TOK_PAGEMASTERSTYLE_MARGIN_LEFT:
     345             :             {
     346         120 :                 GetSdImport().GetMM100UnitConverter().convertMeasureToCore(
     347         240 :                         mnBorderLeft, sValue);
     348         120 :                 break;
     349             :             }
     350             :             case XML_TOK_PAGEMASTERSTYLE_MARGIN_RIGHT:
     351             :             {
     352         120 :                 GetSdImport().GetMM100UnitConverter().convertMeasureToCore(
     353         240 :                         mnBorderRight, sValue);
     354         120 :                 break;
     355             :             }
     356             :             case XML_TOK_PAGEMASTERSTYLE_PAGE_WIDTH:
     357             :             {
     358         132 :                 GetSdImport().GetMM100UnitConverter().convertMeasureToCore(
     359         264 :                         mnWidth, sValue);
     360         132 :                 break;
     361             :             }
     362             :             case XML_TOK_PAGEMASTERSTYLE_PAGE_HEIGHT:
     363             :             {
     364         132 :                 GetSdImport().GetMM100UnitConverter().convertMeasureToCore(
     365         264 :                         mnHeight, sValue);
     366         132 :                 break;
     367             :             }
     368             :             case XML_TOK_PAGEMASTERSTYLE_PAGE_ORIENTATION:
     369             :             {
     370         120 :                 if( IsXMLToken( sValue, XML_PORTRAIT ) )
     371          78 :                     meOrientation = view::PaperOrientation_PORTRAIT;
     372             :                 else
     373          42 :                     meOrientation = view::PaperOrientation_LANDSCAPE;
     374         120 :                 break;
     375             :             }
     376             :         }
     377         961 :     }
     378         132 : }
     379             : 
     380         264 : SdXMLPageMasterStyleContext::~SdXMLPageMasterStyleContext()
     381             : {
     382         264 : }
     383             : 
     384        1108 : TYPEINIT1( SdXMLPageMasterContext, SvXMLStyleContext );
     385             : 
     386         132 : SdXMLPageMasterContext::SdXMLPageMasterContext(
     387             :     SdXMLImport& rImport,
     388             :     sal_uInt16 nPrfx,
     389             :     const OUString& rLName,
     390             :     const uno::Reference< xml::sax::XAttributeList>& xAttrList)
     391             : :   SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList, XML_STYLE_FAMILY_SD_PAGEMASTERCONEXT_ID),
     392         132 :     mpPageMasterStyle( 0L )
     393             : {
     394             :     // set family to something special at SvXMLStyleContext
     395             :     // for differences in search-methods
     396             : 
     397         132 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
     398         264 :     for(sal_Int16 i=0; i < nAttrCount; i++)
     399             :     {
     400         132 :         OUString sAttrName = xAttrList->getNameByIndex(i);
     401         264 :         OUString aLocalName;
     402         132 :         sal_uInt16 nPrefix = GetSdImport().GetNamespaceMap().GetKeyByAttrName(sAttrName, &aLocalName);
     403         264 :         OUString sValue = xAttrList->getValueByIndex(i);
     404         132 :         const SvXMLTokenMap& rAttrTokenMap = GetSdImport().GetPageMasterAttrTokenMap();
     405             : 
     406         132 :         switch(rAttrTokenMap.Get(nPrefix, aLocalName))
     407             :         {
     408             :             case XML_TOK_PAGEMASTER_NAME:
     409             :             {
     410         132 :                 msName = sValue;
     411         132 :                 break;
     412             :             }
     413             :         }
     414         132 :     }
     415         132 : }
     416             : 
     417         396 : SdXMLPageMasterContext::~SdXMLPageMasterContext()
     418             : {
     419             :     // release remembered contexts, they are no longer needed
     420         132 :     if(mpPageMasterStyle)
     421             :     {
     422         132 :         mpPageMasterStyle->ReleaseRef();
     423         132 :         mpPageMasterStyle = 0L;
     424             :     }
     425         264 : }
     426             : 
     427         132 : SvXMLImportContext *SdXMLPageMasterContext::CreateChildContext(
     428             :     sal_uInt16 nPrefix,
     429             :     const OUString& rLocalName,
     430             :     const uno::Reference< xml::sax::XAttributeList >& xAttrList )
     431             : {
     432         132 :     SvXMLImportContext* pContext = 0;
     433             : 
     434         132 :     if(nPrefix == XML_NAMESPACE_STYLE && IsXMLToken( rLocalName, XML_PAGE_LAYOUT_PROPERTIES) )
     435             :     {
     436         132 :         pContext = new SdXMLPageMasterStyleContext(GetSdImport(), nPrefix, rLocalName, xAttrList);
     437             : 
     438             :         // remember SdXMLPresentationPlaceholderContext for later evaluation
     439         132 :         pContext->AddFirstRef();
     440             :         DBG_ASSERT(!mpPageMasterStyle, "PageMasterStyle is set, there seem to be two of them (!)");
     441         132 :         mpPageMasterStyle = static_cast<SdXMLPageMasterStyleContext*>(pContext);
     442             :     }
     443             : 
     444             :     // call base class
     445         132 :     if(!pContext)
     446           0 :         pContext = SvXMLStyleContext::CreateChildContext(nPrefix, rLocalName, xAttrList);
     447             : 
     448         132 :     return pContext;
     449             : }
     450             : 
     451        1879 : TYPEINIT1( SdXMLPresentationPageLayoutContext, SvXMLStyleContext );
     452             : 
     453          94 : SdXMLPresentationPageLayoutContext::SdXMLPresentationPageLayoutContext(
     454             :     SdXMLImport& rImport,
     455             :     sal_uInt16 nPrfx,
     456             :     const OUString& rLName,
     457             :     const uno::Reference< xml::sax::XAttributeList >& xAttrList)
     458             : :   SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList, XML_STYLE_FAMILY_SD_PRESENTATIONPAGELAYOUT_ID),
     459          94 :     mnTypeId( 20 ) // AUTOLAYOUT_NONE
     460             : {
     461             :     // set family to somethiong special at SvXMLStyleContext
     462             :     // for differences in search-methods
     463             : 
     464          94 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
     465         188 :     for( sal_Int16 i=0; i < nAttrCount; i++ )
     466             :     {
     467          94 :         const OUString& rAttrName = xAttrList->getNameByIndex( i );
     468         188 :         OUString aLocalName;
     469          94 :         sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName );
     470             : 
     471          94 :         if(nPrefix == XML_NAMESPACE_STYLE && IsXMLToken( aLocalName, XML_NAME ) )
     472             :         {
     473          94 :             msName = xAttrList->getValueByIndex( i );
     474             :         }
     475          94 :     }
     476          94 : }
     477             : 
     478         188 : SdXMLPresentationPageLayoutContext::~SdXMLPresentationPageLayoutContext()
     479             : {
     480         188 : }
     481             : 
     482         351 : SvXMLImportContext *SdXMLPresentationPageLayoutContext::CreateChildContext(
     483             :     sal_uInt16 nPrefix,
     484             :     const OUString& rLocalName,
     485             :     const uno::Reference< xml::sax::XAttributeList >& xAttrList )
     486             : {
     487         351 :     SvXMLImportContext* pContext = 0;
     488             : 
     489         351 :     if(nPrefix == XML_NAMESPACE_PRESENTATION && IsXMLToken( rLocalName, XML_PLACEHOLDER ) )
     490             :     {
     491             :         // presentation:placeholder inside style:presentation-page-layout context
     492             :         pContext = new SdXMLPresentationPlaceholderContext(
     493         351 :             GetSdImport(), nPrefix, rLocalName, xAttrList);
     494             : 
     495             :         // remember SdXMLPresentationPlaceholderContext for later evaluation
     496         351 :         pContext->AddFirstRef();
     497         351 :         maList.push_back( static_cast<SdXMLPresentationPlaceholderContext*>(pContext) );
     498             :     }
     499             : 
     500             :     // call base class
     501         351 :     if(!pContext)
     502           0 :         pContext = SvXMLStyleContext::CreateChildContext(nPrefix, rLocalName, xAttrList);
     503             : 
     504         351 :     return pContext;
     505             : }
     506             : 
     507          94 : void SdXMLPresentationPageLayoutContext::EndElement()
     508             : {
     509             :     // build presentation page layout type here
     510             :     // calc mnTpeId due to content of maList
     511             :     // at the moment only use number of types used there
     512          94 :     if( !maList.empty() )
     513             :     {
     514          94 :         SdXMLPresentationPlaceholderContext* pObj0 = maList[ 0 ];
     515          94 :         if( pObj0->GetName() == "handout" )
     516             :         {
     517          41 :             switch( maList.size() )
     518             :             {
     519             :             case 1:
     520           0 :                 mnTypeId = 22; // AUTOLAYOUT_HANDOUT1
     521           0 :                 break;
     522             :             case 2:
     523           0 :                 mnTypeId = 23; // AUTOLAYOUT_HANDOUT2
     524           0 :                 break;
     525             :             case 3:
     526           0 :                 mnTypeId = 24; // AUTOLAYOUT_HANDOUT3
     527           0 :                 break;
     528             :             case 4:
     529           0 :                 mnTypeId = 25; // AUTOLAYOUT_HANDOUT4
     530           0 :                 break;
     531             :             case 9:
     532           0 :                 mnTypeId = 31; // AUTOLAYOUT_HANDOUT9
     533           0 :                 break;
     534             :             default:
     535          41 :                 mnTypeId = 26; // AUTOLAYOUT_HANDOUT6
     536             :             }
     537             :         }
     538             :         else
     539             :         {
     540          53 :             switch( maList.size() )
     541             :             {
     542             :                 case 1:
     543             :                 {
     544           1 :                     if( pObj0->GetName() == "title" )
     545             :                     {
     546           1 :                         mnTypeId = 19; // AUTOLAYOUT_ONLY_TITLE
     547             :                     }
     548             :                     else
     549             :                     {
     550           0 :                         mnTypeId = 32; // AUTOLAYOUT_ONLY_TEXT
     551             :                     }
     552           1 :                     break;
     553             :                 }
     554             :                 case 2:
     555             :                 {
     556          52 :                     SdXMLPresentationPlaceholderContext* pObj1 = maList[ 1 ];
     557             : 
     558          52 :                     if( pObj1->GetName() == "subtitle" )
     559             :                     {
     560          35 :                         mnTypeId = 0; // AUTOLAYOUT_TITLE
     561             :                     }
     562          17 :                     else if( pObj1->GetName() == "outline" )
     563             :                     {
     564          17 :                         mnTypeId = 1; // AUTOLAYOUT_ENUM
     565             :                     }
     566           0 :                     else if( pObj1->GetName() == "chart" )
     567             :                     {
     568           0 :                         mnTypeId = 2; // AUTOLAYOUT_CHART
     569             :                     }
     570           0 :                     else if( pObj1->GetName() == "table" )
     571             :                     {
     572           0 :                         mnTypeId = 8; // AUTOLAYOUT_TAB
     573             :                     }
     574           0 :                     else if( pObj1->GetName() == "object" )
     575             :                     {
     576           0 :                         mnTypeId = 11; // AUTOLAYOUT_OBJ
     577             :                     }
     578           0 :                     else if( pObj1->GetName() == "vertical_outline" )
     579             :                     {
     580           0 :                         if( pObj0->GetName() == "vertical_title" )
     581             :                         {
     582             :                             // AUTOLAYOUT_VERTICAL_TITLE_VERTICAL_OUTLINE
     583           0 :                             mnTypeId = 28;
     584             :                         }
     585             :                         else
     586             :                         {
     587             :                             // AUTOLAYOUT_TITLE_VERTICAL_OUTLINE
     588           0 :                             mnTypeId = 29;
     589             :                         }
     590             :                     }
     591             :                     else
     592             :                     {
     593           0 :                         mnTypeId = 21; // AUTOLAYOUT_NOTES
     594             :                     }
     595          52 :                     break;
     596             :                 }
     597             :                 case 3:
     598             :                 {
     599           0 :                     SdXMLPresentationPlaceholderContext* pObj1 = maList[ 1 ];
     600           0 :                     SdXMLPresentationPlaceholderContext* pObj2 = maList[ 2 ];
     601             : 
     602           0 :                     if( pObj1->GetName() == "outline" )
     603             :                     {
     604           0 :                         if( pObj2->GetName() == "outline" )
     605             :                         {
     606           0 :                             mnTypeId = 3; // AUTOLAYOUT_2TEXT
     607             :                         }
     608           0 :                         else if( pObj2->GetName() == "chart" )
     609             :                         {
     610           0 :                             mnTypeId = 4; // AUTOLAYOUT_TEXTCHART
     611             :                         }
     612           0 :                         else if( pObj2->GetName() == "graphic" )
     613             :                         {
     614           0 :                             mnTypeId = 6; // AUTOLAYOUT_TEXTCLIP
     615             :                         }
     616             :                         else
     617             :                         {
     618           0 :                             if(pObj1->GetX() < pObj2->GetX())
     619             :                             {
     620           0 :                                 mnTypeId = 10; // AUTOLAYOUT_TEXTOBJ -> outline left, object right
     621             :                             }
     622             :                             else
     623             :                             {
     624           0 :                                 mnTypeId = 17; // AUTOLAYOUT_TEXTOVEROBJ -> outline top, object right
     625             :                             }
     626             :                         }
     627             :                     }
     628           0 :                     else if( pObj1->GetName() == "chart" )
     629             :                     {
     630           0 :                         mnTypeId = 7; // AUTOLAYOUT_CHARTTEXT
     631             :                     }
     632           0 :                     else if( pObj1->GetName() == "graphic" )
     633             :                     {
     634           0 :                         if( pObj2->GetName() == "vertical_outline" )
     635             :                         {
     636             :                             // AUTOLAYOUT_TITLE_VERTICAL_OUTLINE_CLIPART
     637           0 :                             mnTypeId = 30;
     638             :                         }
     639             :                         else
     640             :                         {
     641           0 :                             mnTypeId = 9; // AUTOLAYOUT_CLIPTEXT
     642             :                         }
     643             :                     }
     644           0 :                     else if( pObj1->GetName() == "vertical_outline" )
     645             :                     {
     646             :                         // AUTOLAYOUT_VERTICAL_TITLE_TEXT_CHART
     647           0 :                         mnTypeId = 27;
     648             :                     }
     649             :                     else
     650             :                     {
     651           0 :                         if(pObj1->GetX() < pObj2->GetX())
     652             :                         {
     653           0 :                             mnTypeId = 13; // AUTOLAYOUT_OBJTEXT -> left, right
     654             :                         }
     655             :                         else
     656             :                         {
     657           0 :                             mnTypeId = 14; // AUTOLAYOUT_OBJOVERTEXT -> top, bottom
     658             :                         }
     659             :                     }
     660           0 :                     break;
     661             :                 }
     662             :                 case 4:
     663             :                 {
     664           0 :                     SdXMLPresentationPlaceholderContext* pObj1 = maList[ 1 ];
     665           0 :                     SdXMLPresentationPlaceholderContext* pObj2 = maList[ 2 ];
     666             : 
     667           0 :                     if( pObj1->GetName() == "object" )
     668             :                     {
     669           0 :                         if(pObj1->GetX() < pObj2->GetX())
     670             :                         {
     671           0 :                             mnTypeId = 16; // AUTOLAYOUT_2OBJOVERTEXT
     672             :                         }
     673             :                         else
     674             :                         {
     675           0 :                             mnTypeId = 15; // AUTOLAYOUT_2OBJTEXT
     676             :                         }
     677             :                     }
     678             :                     else
     679             :                     {
     680           0 :                         mnTypeId = 12; // AUTOLAYOUT_TEXT2OBJ
     681             :                     }
     682           0 :                     break;
     683             :                 }
     684             :                 case 5:
     685             :                 {
     686           0 :                     SdXMLPresentationPlaceholderContext* pObj1 = maList[ 1 ];
     687             : 
     688           0 :                     if( pObj1->GetName() == "object" )
     689             :                     {
     690           0 :                         mnTypeId = 18; // AUTOLAYOUT_4OBJ
     691             :                     }
     692             :                     else
     693             :                     {
     694           0 :                         mnTypeId = 33; // AUTOLAYOUT_4CLIPART
     695             :                     }
     696           0 :                      break;
     697             : 
     698             :                 }
     699             :                 case 7:
     700             :                 {
     701           0 :                     mnTypeId = 33; // AUTOLAYOUT_6CLIPART
     702           0 :                     break;
     703             :                 }
     704             :                 default:
     705             :                 {
     706           0 :                     mnTypeId = 20; // AUTOLAYOUT_NONE
     707           0 :                     break;
     708             :                 }
     709             :             }
     710             :         }
     711             : 
     712             :         // release remembered contexts, they are no longer needed
     713         539 :         for ( size_t i = maList.size(); i > 0; )
     714         351 :             maList[ --i ]->ReleaseRef();
     715          94 :         maList.clear();
     716             :     }
     717          94 : }
     718             : 
     719         351 : SdXMLPresentationPlaceholderContext::SdXMLPresentationPlaceholderContext(
     720             :     SdXMLImport& rImport,
     721             :     sal_uInt16 nPrfx, const
     722             :     OUString& rLName,
     723             :     const uno::Reference< xml::sax::XAttributeList>& xAttrList)
     724             : :   SvXMLImportContext( rImport, nPrfx, rLName),
     725             :     mnX(0L),
     726             :     mnY(0L),
     727             :     mnWidth(1L),
     728         351 :     mnHeight(1L)
     729             : {
     730         351 :     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
     731        2106 :     for(sal_Int16 i=0; i < nAttrCount; i++)
     732             :     {
     733        1755 :         OUString sAttrName = xAttrList->getNameByIndex(i);
     734        3510 :         OUString aLocalName;
     735        1755 :         sal_uInt16 nPrefix = GetSdImport().GetNamespaceMap().GetKeyByAttrName(sAttrName, &aLocalName);
     736        3510 :         OUString sValue = xAttrList->getValueByIndex(i);
     737        1755 :         const SvXMLTokenMap& rAttrTokenMap = GetSdImport().GetPresentationPlaceholderAttrTokenMap();
     738             : 
     739        1755 :         switch(rAttrTokenMap.Get(nPrefix, aLocalName))
     740             :         {
     741             :             case XML_TOK_PRESENTATIONPLACEHOLDER_OBJECTNAME:
     742             :             {
     743         351 :                 msName = sValue;
     744         351 :                 break;
     745             :             }
     746             :             case XML_TOK_PRESENTATIONPLACEHOLDER_X:
     747             :             {
     748         351 :                 GetSdImport().GetMM100UnitConverter().convertMeasureToCore(
     749         702 :                         mnX, sValue);
     750         351 :                 break;
     751             :             }
     752             :             case XML_TOK_PRESENTATIONPLACEHOLDER_Y:
     753             :             {
     754         351 :                 GetSdImport().GetMM100UnitConverter().convertMeasureToCore(
     755         702 :                         mnY, sValue);
     756         351 :                 break;
     757             :             }
     758             :             case XML_TOK_PRESENTATIONPLACEHOLDER_WIDTH:
     759             :             {
     760         351 :                 GetSdImport().GetMM100UnitConverter().convertMeasureToCore(
     761         702 :                         mnWidth, sValue);
     762         351 :                 break;
     763             :             }
     764             :             case XML_TOK_PRESENTATIONPLACEHOLDER_HEIGHT:
     765             :             {
     766         351 :                 GetSdImport().GetMM100UnitConverter().convertMeasureToCore(
     767         702 :                         mnHeight, sValue);
     768         351 :                 break;
     769             :             }
     770             :         }
     771        1755 :     }
     772         351 : }
     773             : 
     774         702 : SdXMLPresentationPlaceholderContext::~SdXMLPresentationPlaceholderContext()
     775             : {
     776         702 : }
     777             : 
     778           0 : TYPEINIT1( SdXMLMasterPageContext, SdXMLGenericPageContext );
     779             : 
     780         136 : SdXMLMasterPageContext::SdXMLMasterPageContext(
     781             :     SdXMLImport& rImport,
     782             :     sal_uInt16 nPrfx,
     783             :     const OUString& rLName,
     784             :     const uno::Reference< xml::sax::XAttributeList>& xAttrList,
     785             :     uno::Reference< drawing::XShapes >& rShapes)
     786         136 : :   SdXMLGenericPageContext( rImport, nPrfx, rLName, xAttrList, rShapes )
     787             : {
     788         136 :     const bool bHandoutMaster = IsXMLToken( rLName, XML_HANDOUT_MASTER );
     789             : 
     790         136 :     const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
     791         549 :     for(sal_Int16 i=0; i < nAttrCount; i++)
     792             :     {
     793         413 :         OUString sAttrName = xAttrList->getNameByIndex( i );
     794         826 :         OUString aLocalName;
     795         413 :         sal_uInt16 nPrefix = GetSdImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName );
     796         826 :         OUString sValue = xAttrList->getValueByIndex( i );
     797         413 :         const SvXMLTokenMap& rAttrTokenMap = GetSdImport().GetMasterPageAttrTokenMap();
     798             : 
     799         413 :         switch(rAttrTokenMap.Get(nPrefix, aLocalName))
     800             :         {
     801             :             case XML_TOK_MASTERPAGE_NAME:
     802             :             {
     803          95 :                 msName = sValue;
     804          95 :                 break;
     805             :             }
     806             :             case XML_TOK_MASTERPAGE_DISPLAY_NAME:
     807             :             {
     808           7 :                 msDisplayName = sValue;
     809           7 :                 break;
     810             :             }
     811             :             case XML_TOK_MASTERPAGE_PAGE_MASTER_NAME:
     812             :             {
     813         136 :                 msPageMasterName = sValue;
     814         136 :                 break;
     815             :             }
     816             :             case XML_TOK_MASTERPAGE_STYLE_NAME:
     817             :             {
     818         134 :                 msStyleName = sValue;
     819         134 :                 break;
     820             :             }
     821             :             case XML_TOK_MASTERPAGE_PAGE_LAYOUT_NAME:
     822             :             {
     823          41 :                 maPageLayoutName = sValue;
     824          41 :                 break;
     825             :             }
     826             :             case XML_TOK_MASTERPAGE_USE_HEADER_NAME:
     827             :             {
     828           0 :                 maUseHeaderDeclName =  sValue;
     829           0 :                 break;
     830             :             }
     831             :             case XML_TOK_MASTERPAGE_USE_FOOTER_NAME:
     832             :             {
     833           0 :                 maUseFooterDeclName =  sValue;
     834           0 :                 break;
     835             :             }
     836             :             case XML_TOK_MASTERPAGE_USE_DATE_TIME_NAME:
     837             :             {
     838           0 :                 maUseDateTimeDeclName =  sValue;
     839           0 :                 break;
     840             :             }
     841             :         }
     842         413 :     }
     843             : 
     844         136 :     if( msDisplayName.isEmpty() )
     845         129 :         msDisplayName = msName;
     846           7 :     else if( msDisplayName != msName )
     847           7 :         GetImport().AddStyleDisplayName( XML_STYLE_FAMILY_MASTER_PAGE, msName, msDisplayName );
     848             : 
     849         136 :     GetImport().GetShapeImport()->startPage( GetLocalShapesContext() );
     850             : 
     851             :     // set page name?
     852         136 :     if(!bHandoutMaster && !msDisplayName.isEmpty() && GetLocalShapesContext().is())
     853             :     {
     854          95 :         uno::Reference < container::XNamed > xNamed(GetLocalShapesContext(), uno::UNO_QUERY);
     855          95 :         if(xNamed.is())
     856          95 :             xNamed->setName(msDisplayName);
     857             :     }
     858             : 
     859             :     // set page-master?
     860         136 :     if(!msPageMasterName.isEmpty())
     861             :     {
     862         136 :         SetPageMaster( msPageMasterName );
     863             :     }
     864             : 
     865         136 :     SetStyle( msStyleName );
     866             : 
     867         136 :     SetLayout();
     868             : 
     869         136 :     DeleteAllShapes();
     870         136 : }
     871             : 
     872         272 : SdXMLMasterPageContext::~SdXMLMasterPageContext()
     873             : {
     874         272 : }
     875             : 
     876         136 : void SdXMLMasterPageContext::EndElement()
     877             : {
     878             :     // set styles on master-page
     879         136 :     if(!msName.isEmpty() && GetSdImport().GetShapeImport()->GetStylesContext())
     880             :     {
     881          95 :         SvXMLImportContext* pContext = GetSdImport().GetShapeImport()->GetStylesContext();
     882          95 :         if( pContext && pContext->ISA( SvXMLStyleContext ) )
     883          95 :             static_cast<SdXMLStylesContext*>(pContext)->SetMasterPageStyles(*this);
     884             :     }
     885             : 
     886         136 :     SdXMLGenericPageContext::EndElement();
     887         136 :     GetImport().GetShapeImport()->endPage(GetLocalShapesContext());
     888         136 : }
     889             : 
     890         664 : SvXMLImportContext* SdXMLMasterPageContext::CreateChildContext(
     891             :     sal_uInt16 nPrefix,
     892             :     const OUString& rLocalName,
     893             :     const uno::Reference< xml::sax::XAttributeList>& xAttrList )
     894             : {
     895         664 :     SvXMLImportContext* pContext = 0;
     896         664 :     const SvXMLTokenMap& rTokenMap = GetSdImport().GetMasterPageElemTokenMap();
     897             : 
     898             :     // some special objects inside style:masterpage context
     899         664 :     switch(rTokenMap.Get(nPrefix, rLocalName))
     900             :     {
     901             :         case XML_TOK_MASTERPAGE_STYLE:
     902             :         {
     903           0 :             if(GetSdImport().GetShapeImport()->GetStylesContext())
     904             :             {
     905             :                 // style:style inside master-page context -> presentation style
     906             :                 XMLShapeStyleContext* pNew = new XMLShapeStyleContext(
     907           0 :                     GetSdImport(), nPrefix, rLocalName, xAttrList,
     908           0 :                     *GetSdImport().GetShapeImport()->GetStylesContext(),
     909           0 :                     XML_STYLE_FAMILY_SD_PRESENTATION_ID);
     910             : 
     911             :                 // add this style to the outer StylesContext class for later processing
     912           0 :                 pContext = pNew;
     913           0 :                 GetSdImport().GetShapeImport()->GetStylesContext()->AddStyle(*pNew);
     914             :             }
     915           0 :             break;
     916             :         }
     917             :         case XML_TOK_MASTERPAGE_NOTES:
     918             :         {
     919          42 :             if( GetSdImport().IsImpress() )
     920             :             {
     921             :                 // get notes page
     922          42 :                 uno::Reference< presentation::XPresentationPage > xPresPage(GetLocalShapesContext(), uno::UNO_QUERY);
     923          42 :                 if(xPresPage.is())
     924             :                 {
     925          42 :                     uno::Reference< drawing::XDrawPage > xNotesDrawPage(xPresPage->getNotesPage(), uno::UNO_QUERY);
     926          42 :                     if(xNotesDrawPage.is())
     927             :                     {
     928          42 :                         uno::Reference< drawing::XShapes > xNewShapes(xNotesDrawPage, uno::UNO_QUERY);
     929          42 :                         if(xNewShapes.is())
     930             :                         {
     931             :                             // presentation:notes inside master-page context
     932          42 :                             pContext = new SdXMLNotesContext( GetSdImport(), nPrefix, rLocalName, xAttrList, xNewShapes);
     933          42 :                         }
     934          42 :                     }
     935          42 :                 }
     936             :             }
     937             :         }
     938             :     }
     939             : 
     940             :     // call base class
     941         664 :     if(!pContext)
     942         622 :         pContext = SdXMLGenericPageContext::CreateChildContext(nPrefix, rLocalName, xAttrList);
     943             : 
     944         664 :     return pContext;
     945             : }
     946             : 
     947        1392 : TYPEINIT1( SdXMLStylesContext, SvXMLStyleContext );
     948             : 
     949         222 : SdXMLStylesContext::SdXMLStylesContext(
     950             :     SdXMLImport& rImport,
     951             :     sal_uInt16 nPrfx,
     952             :     const OUString& rLName,
     953             :     const uno::Reference< xml::sax::XAttributeList >& xAttrList,
     954             :     bool bIsAutoStyle)
     955             : :   SvXMLStylesContext(rImport, nPrfx, rLName, xAttrList),
     956         222 :     mbIsAutoStyle(bIsAutoStyle)
     957             : {
     958         222 :     Reference< uno::XComponentContext > xContext = rImport.GetComponentContext();
     959         222 :     mpNumFormatter = new SvNumberFormatter( xContext, LANGUAGE_SYSTEM );
     960         222 :     mpNumFmtHelper = new SvXMLNumFmtHelper( mpNumFormatter, xContext );
     961         222 : }
     962             : 
     963         666 : SdXMLStylesContext::~SdXMLStylesContext()
     964             : {
     965         222 :     delete mpNumFmtHelper;
     966         222 :     delete mpNumFormatter;
     967         444 : }
     968             : 
     969        3193 : SvXMLStyleContext* SdXMLStylesContext::CreateStyleChildContext(
     970             :     sal_uInt16 nPrefix,
     971             :     const OUString& rLocalName,
     972             :     const uno::Reference< xml::sax::XAttributeList >& xAttrList)
     973             : {
     974        3193 :     SvXMLStyleContext* pContext = 0;
     975        3193 :     const SvXMLTokenMap& rStyleTokenMap = GetSdImport().GetStylesElemTokenMap();
     976             : 
     977        3193 :     switch(rStyleTokenMap.Get(nPrefix, rLocalName))
     978             :     {
     979             :         case XML_TOK_STYLES_PAGE_MASTER:
     980             :         {
     981             :             // style:page-master inside office:styles context
     982         132 :             pContext = new SdXMLPageMasterContext(GetSdImport(), nPrefix, rLocalName, xAttrList);
     983         132 :             break;
     984             :         }
     985             :         case XML_TOK_STYLES_PRESENTATION_PAGE_LAYOUT:
     986             :         {
     987             :             // style:presentation-page-layout inside office:styles context
     988          94 :             pContext = new SdXMLPresentationPageLayoutContext(GetSdImport(), nPrefix, rLocalName, xAttrList);
     989          94 :             break;
     990             :         }
     991             :     }
     992             : 
     993        3193 :     if(!pContext)
     994             :     {
     995        2967 :         const SvXMLTokenMap& rTokenMap = mpNumFmtHelper->GetStylesElemTokenMap();
     996        2967 :         sal_uInt16 nToken = rTokenMap.Get( nPrefix, rLocalName );
     997        2967 :         switch (nToken)
     998             :         {
     999             :             case XML_TOK_STYLES_DATE_STYLE:
    1000             :             case XML_TOK_STYLES_TIME_STYLE:
    1001             :                 // number:date-style or number:time-style
    1002           2 :                 pContext = new SdXMLNumberFormatImportContext( GetSdImport(), nPrefix, rLocalName, mpNumFmtHelper->getData(), nToken, xAttrList, *this );
    1003           2 :                 break;
    1004             : 
    1005             :             case XML_TOK_STYLES_NUMBER_STYLE:
    1006             :             case XML_TOK_STYLES_CURRENCY_STYLE:
    1007             :             case XML_TOK_STYLES_PERCENTAGE_STYLE:
    1008             :             case XML_TOK_STYLES_BOOLEAN_STYLE:
    1009             :             case XML_TOK_STYLES_TEXT_STYLE:
    1010           0 :                 pContext = new SvXMLNumFormatContext( GetSdImport(), nPrefix, rLocalName,
    1011           0 :                                                         mpNumFmtHelper->getData(), nToken, xAttrList, *this );
    1012           0 :                 break;
    1013             :         }
    1014             :     }
    1015             : 
    1016        3193 :     if(!pContext && nPrefix == XML_NAMESPACE_PRESENTATION )
    1017             :     {
    1018           0 :         if( IsXMLToken( rLocalName, XML_HEADER_DECL ) ||
    1019           0 :             IsXMLToken( rLocalName, XML_FOOTER_DECL ) ||
    1020           0 :             IsXMLToken( rLocalName, XML_DATE_TIME_DECL ) )
    1021             :         {
    1022           0 :             pContext = new SdXMLHeaderFooterDeclContext( GetImport(), nPrefix, rLocalName, xAttrList );
    1023             :         }
    1024             :     }
    1025             : 
    1026        3193 :     if(!pContext && (nPrefix == XML_NAMESPACE_TABLE) && IsXMLToken( rLocalName, XML_TABLE_TEMPLATE ) )
    1027             :     {
    1028           3 :         pContext = GetImport().GetShapeImport()->GetShapeTableImport()->CreateTableTemplateContext(nPrefix, rLocalName, xAttrList );
    1029             :     }
    1030             : 
    1031             :     // call base class
    1032        3193 :     if(!pContext)
    1033        2962 :         pContext = SvXMLStylesContext::CreateStyleChildContext(nPrefix, rLocalName, xAttrList);
    1034             : 
    1035        3193 :     return pContext;
    1036             : }
    1037             : 
    1038        2665 : SvXMLStyleContext* SdXMLStylesContext::CreateStyleStyleChildContext(
    1039             :     sal_uInt16 nFamily,
    1040             :     sal_uInt16 nPrefix,
    1041             :     const OUString& rLocalName,
    1042             :     const uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList)
    1043             : {
    1044        2665 :     SvXMLStyleContext* pContext = 0;
    1045             : 
    1046        2665 :     switch( nFamily )
    1047             :     {
    1048             :     case XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID:
    1049         218 :         pContext = new SdXMLDrawingPageStyleContext(GetSdImport(), nPrefix, rLocalName, xAttrList, *this );
    1050         218 :         break;
    1051             :     case XML_STYLE_FAMILY_TABLE_CELL:
    1052             :     case XML_STYLE_FAMILY_TABLE_COLUMN:
    1053             :     case XML_STYLE_FAMILY_TABLE_ROW:
    1054          43 :         pContext = new XMLShapeStyleContext( GetSdImport(), nPrefix, rLocalName, xAttrList, *this, nFamily );
    1055          43 :         break;
    1056             :     }
    1057             : 
    1058             :     // call base class
    1059        2665 :     if(!pContext)
    1060        2404 :         pContext = SvXMLStylesContext::CreateStyleStyleChildContext(nFamily, nPrefix, rLocalName, xAttrList);
    1061             : 
    1062        2665 :     return pContext;
    1063             : }
    1064             : 
    1065          44 : SvXMLStyleContext* SdXMLStylesContext::CreateDefaultStyleStyleChildContext(
    1066             :     sal_uInt16 nFamily,
    1067             :     sal_uInt16 nPrefix,
    1068             :     const OUString& rLocalName,
    1069             :     const Reference< XAttributeList > & xAttrList )
    1070             : {
    1071          44 :     SvXMLStyleContext* pContext = 0;
    1072             : 
    1073          44 :     switch( nFamily )
    1074             :     {
    1075             :     case XML_STYLE_FAMILY_SD_GRAPHICS_ID:
    1076          44 :         pContext = new XMLGraphicsDefaultStyle(GetSdImport(), nPrefix, rLocalName, xAttrList, *this );
    1077          44 :         break;
    1078             :     }
    1079             : 
    1080             :     // call base class
    1081          44 :     if(!pContext)
    1082           0 :         pContext = SvXMLStylesContext::CreateDefaultStyleStyleChildContext(nFamily, nPrefix, rLocalName, xAttrList);
    1083             : 
    1084          44 :     return pContext;
    1085             : }
    1086             : 
    1087        2709 : sal_uInt16 SdXMLStylesContext::GetFamily( const OUString& rFamily ) const
    1088             : {
    1089             :     // call base class
    1090        2709 :     return SvXMLStylesContext::GetFamily(rFamily);
    1091             : }
    1092             : 
    1093       15532 : rtl::Reference< SvXMLImportPropertyMapper > SdXMLStylesContext::GetImportPropertyMapper(
    1094             :     sal_uInt16 nFamily) const
    1095             : {
    1096       15532 :     rtl::Reference < SvXMLImportPropertyMapper > xMapper;
    1097             : 
    1098       15532 :     switch( nFamily )
    1099             :     {
    1100             :     case XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID:
    1101             :     {
    1102         762 :         if(!xPresImpPropMapper.is())
    1103             :         {
    1104         130 :             rtl::Reference< XMLShapeImportHelper > aImpHelper = ((SvXMLImport&)GetImport()).GetShapeImport();
    1105         130 :             const_cast<SdXMLStylesContext*>(this)->xPresImpPropMapper =
    1106         130 :                 aImpHelper->GetPresPagePropsMapper();
    1107             :         }
    1108         762 :         xMapper = xPresImpPropMapper;
    1109         762 :         break;
    1110             :     }
    1111             : 
    1112             :     case XML_STYLE_FAMILY_TABLE_COLUMN:
    1113             :     case XML_STYLE_FAMILY_TABLE_ROW:
    1114             :     case XML_STYLE_FAMILY_TABLE_CELL:
    1115             :     {
    1116         203 :         const rtl::Reference< XMLTableImport >& xTableImport( const_cast< SvXMLImport& >( GetImport() ).GetShapeImport()->GetShapeTableImport() );
    1117             : 
    1118         203 :         switch( nFamily )
    1119             :         {
    1120          32 :         case XML_STYLE_FAMILY_TABLE_COLUMN: xMapper = xTableImport->GetColumnImportPropertySetMapper().get(); break;
    1121          45 :         case XML_STYLE_FAMILY_TABLE_ROW: xMapper = xTableImport->GetRowImportPropertySetMapper().get(); break;
    1122         126 :         case XML_STYLE_FAMILY_TABLE_CELL: xMapper = xTableImport->GetCellImportPropertySetMapper().get(); break;
    1123             :         }
    1124         203 :         break;
    1125             :     }
    1126             :     }
    1127             : 
    1128             :     // call base class
    1129       15532 :     if( !xMapper.is() )
    1130       14567 :         xMapper = SvXMLStylesContext::GetImportPropertyMapper(nFamily);
    1131       15532 :     return xMapper;
    1132             : }
    1133             : 
    1134             : // Process all style and object info
    1135             : 
    1136         222 : void SdXMLStylesContext::EndElement()
    1137             : {
    1138         222 :     if(mbIsAutoStyle)
    1139             :     {
    1140             :         // AutoStyles for text import
    1141         133 :         GetImport().GetTextImport()->SetAutoStyles( this );
    1142             : 
    1143             :         // AutoStyles for chart
    1144         133 :         GetImport().GetChartImport()->SetAutoStylesContext( this );
    1145             : 
    1146             :         // AutoStyles for forms
    1147         133 :         GetImport().GetFormImport()->setAutoStyleContext( this );
    1148             : 
    1149             :         // associate AutoStyles with styles in preparation to setting Styles on shapes
    1150        1733 :         for(sal_uInt32 a(0L); a < GetStyleCount(); a++)
    1151             :         {
    1152        1600 :             const SvXMLStyleContext* pStyle = GetStyle(a);
    1153        1600 :             if(pStyle && pStyle->ISA(XMLShapeStyleContext))
    1154             :             {
    1155         697 :                 const XMLShapeStyleContext* pDocStyle = static_cast<const XMLShapeStyleContext*>(pStyle);
    1156             : 
    1157         697 :                 SvXMLStylesContext* pStylesContext = GetSdImport().GetShapeImport()->GetStylesContext();
    1158         697 :                 if( pStylesContext )
    1159             :                 {
    1160         466 :                     pStyle = pStylesContext->FindStyleChildContext(pStyle->GetFamily(), pStyle->GetParentName());
    1161             : 
    1162         466 :                     if(pStyle && pStyle->ISA(XMLShapeStyleContext))
    1163             :                     {
    1164         221 :                         const XMLShapeStyleContext* pParentStyle = static_cast<const XMLShapeStyleContext*>(pStyle);
    1165         221 :                         if(pParentStyle->GetStyle().is())
    1166             :                         {
    1167          98 :                             const_cast<XMLShapeStyleContext*>(pDocStyle)->SetStyle(pParentStyle->GetStyle());
    1168             :                         }
    1169             :                     }
    1170             :                 }
    1171             :             }
    1172             :         }
    1173             : 
    1174         133 :         FinishStyles( false );
    1175             :     }
    1176             :     else
    1177             :     {
    1178             :         // Process styles list
    1179          89 :         ImpSetGraphicStyles();
    1180          89 :         ImpSetCellStyles();
    1181          89 :         GetImport().GetShapeImport()->GetShapeTableImport()->finishStyles();
    1182             : 
    1183             :         // put style infos in the info set for other components ( content import f.e. )
    1184          89 :         uno::Reference< beans::XPropertySet > xInfoSet( GetImport().getImportInfo() );
    1185          89 :         if( xInfoSet.is() )
    1186             :         {
    1187          46 :             uno::Reference< beans::XPropertySetInfo > xInfoSetInfo( xInfoSet->getPropertySetInfo() );
    1188             : 
    1189          46 :             if( xInfoSetInfo->hasPropertyByName("PageLayouts") )
    1190          44 :                 xInfoSet->setPropertyValue("PageLayouts", uno::makeAny( getPageLayouts() ) );
    1191          89 :         }
    1192             : 
    1193             :     }
    1194         222 : }
    1195             : 
    1196             : // set master-page styles (all with family="presentation" and a special
    1197             : // prefix) on given master-page.
    1198             : 
    1199          95 : void SdXMLStylesContext::SetMasterPageStyles(SdXMLMasterPageContext& rMaster) const
    1200             : {
    1201             :     const uno::Reference<container::XNameAccess>& rStyleFamilies =
    1202          95 :         GetSdImport().GetLocalDocStyleFamilies();
    1203             : 
    1204          95 :     if (!rStyleFamilies.is())
    1205           0 :         return;
    1206             : 
    1207          95 :     if (!rStyleFamilies->hasByName(rMaster.GetDisplayName()))
    1208           0 :         return;
    1209             : 
    1210             :     try
    1211             :     {
    1212          95 :         uno::Reference< container::XNameAccess > xMasterPageStyles( rStyleFamilies->getByName(rMaster.GetDisplayName()), UNO_QUERY_THROW );
    1213         190 :         OUString sPrefix(rMaster.GetDisplayName());
    1214          95 :         sPrefix += "-";
    1215         190 :         ImpSetGraphicStyles(xMasterPageStyles, XML_STYLE_FAMILY_SD_PRESENTATION_ID, sPrefix);
    1216             :     }
    1217           0 :     catch (const uno::Exception&)
    1218             :     {
    1219             :         OSL_FAIL( "xmloff::SdXMLStylesContext::SetMasterPageStyles(), exception caught!" );
    1220             :     }
    1221             : }
    1222             : 
    1223             : // Process styles list:
    1224             : // set graphic styles (all with family="graphics"). Remember xStyle at list element.
    1225             : 
    1226          89 : void SdXMLStylesContext::ImpSetGraphicStyles() const
    1227             : {
    1228          89 :     if(GetSdImport().GetLocalDocStyleFamilies().is()) try
    1229             :     {
    1230          89 :         const OUString sGraphicStyleName("graphics");
    1231         178 :         uno::Reference< container::XNameAccess > xGraphicPageStyles( GetSdImport().GetLocalDocStyleFamilies()->getByName(sGraphicStyleName), uno::UNO_QUERY_THROW );
    1232             : 
    1233         178 :         ImpSetGraphicStyles(xGraphicPageStyles, XML_STYLE_FAMILY_SD_GRAPHICS_ID, OUString());
    1234             :     }
    1235           0 :     catch( uno::Exception& )
    1236             :     {
    1237             :         OSL_FAIL( "xmloff::SdXMLStylesContext::ImpSetGraphicStyles(), exception caught!" );
    1238             :     }
    1239          89 : }
    1240             : 
    1241          89 : void SdXMLStylesContext::ImpSetCellStyles() const
    1242             : {
    1243          89 :     if(GetSdImport().GetLocalDocStyleFamilies().is()) try
    1244             :     {
    1245          89 :         const OUString sCellStyleName("cell");
    1246         178 :         uno::Reference< container::XNameAccess > xGraphicPageStyles( GetSdImport().GetLocalDocStyleFamilies()->getByName(sCellStyleName), uno::UNO_QUERY_THROW );
    1247             : 
    1248         178 :         ImpSetGraphicStyles(xGraphicPageStyles, XML_STYLE_FAMILY_TABLE_CELL, OUString());
    1249             :     }
    1250           0 :     catch( uno::Exception& )
    1251             :     {
    1252             :         OSL_FAIL( "xmloff::SdXMLStylesContext::ImpSetCellStyles(), exception caught!" );
    1253             :     }
    1254          89 : }
    1255             : 
    1256             : //Resolves: fdo#34987 if the style's auto height before and after is the same
    1257             : //then don't reset it back to the underlying default of true for the small
    1258             : //period before its going to be reset to false again. Doing this avoids the
    1259             : //master page shapes from resizing themselves due to autoheight becoming
    1260             : //enabled before having autoheight turned off again and getting stuck on that
    1261             : //autosized height
    1262       11706 : static bool canSkipReset(const OUString &rName, const XMLPropStyleContext* pPropStyle,
    1263             :     const uno::Reference< beans::XPropertySet > &rPropSet, const rtl::Reference < XMLPropertySetMapper >& rPrMap)
    1264             : {
    1265       11706 :     bool bCanSkipReset = false;
    1266       11706 :     if (pPropStyle && rName == "TextAutoGrowHeight")
    1267             :     {
    1268          42 :         bool bOldStyleTextAutoGrowHeight(false);
    1269          42 :         rPropSet->getPropertyValue("TextAutoGrowHeight") >>= bOldStyleTextAutoGrowHeight;
    1270             : 
    1271          42 :         sal_Int32 nIndexStyle = rPrMap->GetEntryIndex(XML_NAMESPACE_DRAW, "auto-grow-height", 0);
    1272          42 :         if (nIndexStyle != -1)
    1273             :         {
    1274          42 :             const ::std::vector< XMLPropertyState > &rProperties = pPropStyle->GetProperties();
    1275          42 :             ::std::vector< XMLPropertyState >::const_iterator property = rProperties.begin();
    1276         131 :             for(; property != rProperties.end(); ++property)
    1277             :             {
    1278         131 :                 sal_Int32 nIdx = property->mnIndex;
    1279         131 :                 if (nIdx == nIndexStyle)
    1280             :                 {
    1281          42 :                     bool bNewStyleTextAutoGrowHeight(false);
    1282          42 :                     property->maValue >>= bNewStyleTextAutoGrowHeight;
    1283          42 :                     if (bNewStyleTextAutoGrowHeight == bOldStyleTextAutoGrowHeight)
    1284          42 :                         bCanSkipReset = true;;
    1285          42 :                     break;
    1286             :                 }
    1287             :             }
    1288             :         }
    1289             :     }
    1290       11706 :     return bCanSkipReset;
    1291             : }
    1292             : 
    1293             : // help function used by ImpSetGraphicStyles() and ImpSetMasterPageStyles()
    1294             : 
    1295         273 : void SdXMLStylesContext::ImpSetGraphicStyles( uno::Reference< container::XNameAccess >& xPageStyles,  sal_uInt16 nFamily,  const OUString& rPrefix) const
    1296             : {
    1297         273 :     sal_Int32 nPrefLen(rPrefix.getLength());
    1298             : 
    1299             :     sal_uInt32 a;
    1300             : 
    1301             :     // set defaults
    1302        4632 :     for( a = 0; a < GetStyleCount(); a++)
    1303             :     {
    1304        4359 :         const SvXMLStyleContext* pStyle = GetStyle(a);
    1305             : 
    1306        4359 :         if(nFamily == pStyle->GetFamily() && pStyle->IsDefaultStyle())
    1307             :         {
    1308          44 :             const_cast<SvXMLStyleContext*>(pStyle)->SetDefaults();
    1309             :         }
    1310             :     }
    1311             : 
    1312             :     // create all styles and set properties
    1313        4632 :     for( a = 0; a < GetStyleCount(); a++)
    1314             :     {
    1315             :         try
    1316             :         {
    1317        4359 :             const SvXMLStyleContext* pStyle = GetStyle(a);
    1318        4359 :             if(nFamily == pStyle->GetFamily() && !pStyle->IsDefaultStyle())
    1319             :             {
    1320        1322 :                 OUString aStyleName(pStyle->GetDisplayName());
    1321             : 
    1322        1322 :                 if( nPrefLen )
    1323             :                 {
    1324         619 :                     sal_Int32 nStylePrefLen = aStyleName.lastIndexOf( '-' ) + 1;
    1325         619 :                     if( (nPrefLen != nStylePrefLen) ||  (aStyleName.compareTo( rPrefix, nPrefLen ) != 0) )
    1326          28 :                         continue;
    1327             : 
    1328         591 :                     aStyleName = aStyleName.copy( nPrefLen );
    1329             :                 }
    1330             : 
    1331        1294 :                 XMLPropStyleContext* pPropStyle = dynamic_cast< XMLPropStyleContext* >(const_cast< SvXMLStyleContext* >( pStyle ) );
    1332             : 
    1333        2588 :                 uno::Reference< style::XStyle > xStyle;
    1334        1294 :                 if(xPageStyles->hasByName(aStyleName))
    1335             :                 {
    1336        1291 :                     xPageStyles->getByName(aStyleName) >>= xStyle;
    1337             : 
    1338             :                     // set properties of existing styles to default
    1339        1291 :                     uno::Reference< beans::XPropertySet > xPropSet( xStyle, uno::UNO_QUERY );
    1340        2582 :                     uno::Reference< beans::XPropertySetInfo > xPropSetInfo;
    1341        1291 :                     if( xPropSet.is() )
    1342        1291 :                         xPropSetInfo = xPropSet->getPropertySetInfo();
    1343             : 
    1344        2582 :                     uno::Reference< beans::XPropertyState > xPropState( xStyle, uno::UNO_QUERY );
    1345             : 
    1346        1291 :                     if( xPropState.is() )
    1347             :                     {
    1348        1291 :                         rtl::Reference < XMLPropertySetMapper > xPrMap;
    1349        2582 :                         rtl::Reference < SvXMLImportPropertyMapper > xImpPrMap = GetImportPropertyMapper( nFamily );
    1350             :                         DBG_ASSERT( xImpPrMap.is(), "There is the import prop mapper" );
    1351        1291 :                         if( xImpPrMap.is() )
    1352        1291 :                             xPrMap = xImpPrMap->getPropertySetMapper();
    1353        1291 :                         if( xPrMap.is() )
    1354             :                         {
    1355        1291 :                             const sal_Int32 nCount = xPrMap->GetEntryCount();
    1356      703849 :                             for( sal_Int32 i = 0; i < nCount; i++ )
    1357             :                             {
    1358      702558 :                                 const OUString& rName = xPrMap->GetEntryAPIName( i );
    1359      702558 :                                 if( xPropSetInfo->hasPropertyByName( rName ) && beans::PropertyState_DIRECT_VALUE == xPropState->getPropertyState( rName ) )
    1360             :                                 {
    1361       11706 :                                     bool bCanSkipReset = canSkipReset(rName, pPropStyle, xPropSet, xPrMap);
    1362       11706 :                                     if (bCanSkipReset)
    1363          42 :                                         continue;
    1364       11664 :                                     xPropState->setPropertyToDefault( rName );
    1365             :                                 }
    1366             :                             }
    1367        1291 :                         }
    1368        1291 :                     }
    1369             :                 }
    1370             :                 else
    1371             :                 {
    1372             :                     // graphics style does not exist, create and add it
    1373           3 :                     uno::Reference< lang::XSingleServiceFactory > xServiceFact(xPageStyles, uno::UNO_QUERY);
    1374           3 :                     if(xServiceFact.is())
    1375             :                     {
    1376           3 :                         uno::Reference< style::XStyle > xNewStyle( xServiceFact->createInstance(), uno::UNO_QUERY);
    1377             : 
    1378           3 :                         if(xNewStyle.is())
    1379             :                         {
    1380             :                             // remember style
    1381           3 :                             xStyle = xNewStyle;
    1382             : 
    1383             :                             // add new style to graphics style pool
    1384           3 :                             uno::Reference< container::XNameContainer > xInsertContainer(xPageStyles, uno::UNO_QUERY);
    1385           3 :                             if(xInsertContainer.is())
    1386           3 :                                 xInsertContainer->insertByName(aStyleName, uno::Any( xStyle ) );
    1387           3 :                         }
    1388           3 :                     }
    1389             :                 }
    1390             : 
    1391        1294 :                 if(xStyle.is())
    1392             :                 {
    1393             :                     // set properties at style
    1394        1294 :                     uno::Reference< beans::XPropertySet > xPropSet(xStyle, uno::UNO_QUERY);
    1395        1294 :                     if(xPropSet.is() && pPropStyle)
    1396             :                     {
    1397        1294 :                         pPropStyle->FillPropertySet(xPropSet);
    1398        1294 :                         pPropStyle->SetStyle(xStyle);
    1399        1294 :                     }
    1400        1294 :                 }
    1401             :             }
    1402             :         }
    1403           0 :         catch(const Exception& e)
    1404             :         {
    1405           0 :             uno::Sequence<OUString> aSeq(0);
    1406           0 :             const_cast<SdXMLImport*>(&GetSdImport())->SetError( XMLERROR_FLAG_WARNING | XMLERROR_API, aSeq, e.Message, NULL );
    1407             :         }
    1408             :     }
    1409             : 
    1410             :     // now set parents for all styles (when necessary)
    1411        4632 :     for(a = 0L; a < GetStyleCount(); a++)
    1412             :     {
    1413        4359 :         const SvXMLStyleContext* pStyle = GetStyle(a);
    1414             : 
    1415        4359 :         if(pStyle && !pStyle->GetDisplayName().isEmpty() && (nFamily == pStyle->GetFamily())) try
    1416             :         {
    1417        1322 :             OUString aStyleName(pStyle->GetDisplayName());
    1418        1322 :             if( nPrefLen )
    1419             :             {
    1420         619 :                 sal_Int32 nStylePrefLen = aStyleName.lastIndexOf( '-' ) + 1;
    1421         619 :                 if( (nPrefLen != nStylePrefLen) ||  (aStyleName.compareTo( rPrefix, nPrefLen ) != 0) )
    1422          28 :                     continue;
    1423             : 
    1424         591 :                 aStyleName = aStyleName.copy( nPrefLen );
    1425             :             }
    1426             : 
    1427        2333 :             uno::Reference< style::XStyle > xStyle( xPageStyles->getByName(aStyleName), UNO_QUERY );
    1428        1294 :             if(xStyle.is())
    1429             :             {
    1430             :                 // set parent style name
    1431        1294 :                 OUString sParentStyleDisplayName( GetImport().GetStyleDisplayName( pStyle->GetFamily(), pStyle->GetParentName() ) );
    1432        1294 :                 if( nPrefLen )
    1433             :                 {
    1434         591 :                     sal_Int32 nStylePrefLen = sParentStyleDisplayName.lastIndexOf( '-' ) + 1;
    1435         591 :                     if( (nPrefLen != nStylePrefLen) || (sParentStyleDisplayName.compareTo( rPrefix, nPrefLen ) != 0) )
    1436         255 :                         continue;
    1437             : 
    1438         336 :                     sParentStyleDisplayName = sParentStyleDisplayName.copy( nPrefLen );
    1439             :                 }
    1440        1039 :                 xStyle->setParentStyle( sParentStyleDisplayName );
    1441        1039 :             }
    1442             :         }
    1443           0 :         catch( const Exception& e )
    1444             :         {
    1445           0 :             uno::Sequence<OUString> aSeq(0);
    1446           0 :             const_cast<SdXMLImport*>(&GetSdImport())->SetError( XMLERROR_FLAG_WARNING | XMLERROR_API, aSeq, e.Message, NULL );
    1447             :         }
    1448             :     }
    1449         273 : }
    1450             : 
    1451             : // helper function to create the uno component that hold the mappings from
    1452             : // xml auto layout name to internal autolayout id
    1453             : 
    1454          44 : uno::Reference< container::XNameAccess > SdXMLStylesContext::getPageLayouts() const
    1455             : {
    1456          44 :     uno::Reference< container::XNameContainer > xLayouts( comphelper::NameContainer_createInstance( ::cppu::UnoType<sal_Int32>::get()) );
    1457             : 
    1458        1477 :     for(sal_uInt32 a(0L); a < GetStyleCount(); a++)
    1459             :     {
    1460        1433 :         const SvXMLStyleContext* pStyle = GetStyle(a);
    1461        1433 :         if(pStyle && pStyle->ISA(SdXMLPresentationPageLayoutContext))
    1462             :         {
    1463         188 :             xLayouts->insertByName( pStyle->GetName(), uno::makeAny(
    1464         188 :             (sal_Int32)static_cast<const SdXMLPresentationPageLayoutContext*>(pStyle)->GetTypeId() ) );
    1465             :         }
    1466             :     }
    1467             : 
    1468          44 :     return uno::Reference< container::XNameAccess >::query( xLayouts );
    1469             : }
    1470             : 
    1471             : 
    1472           0 : TYPEINIT1( SdXMLMasterStylesContext, SvXMLImportContext );
    1473             : 
    1474          89 : SdXMLMasterStylesContext::SdXMLMasterStylesContext(
    1475             :     SdXMLImport& rImport,
    1476             :     sal_uInt16 nPrfx,
    1477             :     const OUString& rLName)
    1478          89 : :   SvXMLImportContext( rImport, nPrfx, rLName)
    1479             : {
    1480          89 : }
    1481             : 
    1482         267 : SdXMLMasterStylesContext::~SdXMLMasterStylesContext()
    1483             : {
    1484         273 :     for ( size_t i = maMasterPageList.size(); i > 0; )
    1485          95 :         maMasterPageList[ --i ]->ReleaseRef();
    1486          89 :     maMasterPageList.clear();
    1487         178 : }
    1488             : 
    1489         182 : SvXMLImportContext* SdXMLMasterStylesContext::CreateChildContext(
    1490             :     sal_uInt16 nPrefix,
    1491             :     const OUString& rLocalName,
    1492             :     const uno::Reference< xml::sax::XAttributeList >& xAttrList)
    1493             : {
    1494         182 :     SvXMLImportContext* pContext = 0;
    1495             : 
    1496         182 :     if(nPrefix == XML_NAMESPACE_STYLE
    1497         182 :        && IsXMLToken( rLocalName, XML_MASTER_PAGE ) )
    1498             :     {
    1499             :         // style:masterpage inside office:styles context
    1500          95 :         uno::Reference< drawing::XDrawPage > xNewMasterPage;
    1501         190 :         uno::Reference< drawing::XDrawPages > xMasterPages(GetSdImport().GetLocalMasterPages(), uno::UNO_QUERY);
    1502             : 
    1503          95 :         if( xMasterPages.is() )
    1504             :         {
    1505          95 :             if(GetSdImport().GetNewMasterPageCount() + 1 > xMasterPages->getCount())
    1506             :             {
    1507             :                 // new page, create and insert
    1508           7 :                 xNewMasterPage = xMasterPages->insertNewByIndex(xMasterPages->getCount());
    1509             :             }
    1510             :             else
    1511             :             {
    1512             :                 // existing page, use it
    1513          88 :                 xMasterPages->getByIndex(GetSdImport().GetNewMasterPageCount()) >>= xNewMasterPage;
    1514             :             }
    1515             : 
    1516             :             // increment global import page counter
    1517          95 :             GetSdImport().IncrementNewMasterPageCount();
    1518             : 
    1519          95 :             if(xNewMasterPage.is())
    1520             :             {
    1521          95 :                 uno::Reference< drawing::XShapes > xNewShapes(xNewMasterPage, uno::UNO_QUERY);
    1522          95 :                 if(xNewShapes.is() && GetSdImport().GetShapeImport()->GetStylesContext())
    1523             :                 {
    1524             :                     pContext = new SdXMLMasterPageContext(GetSdImport(),
    1525          95 :                         nPrefix, rLocalName, xAttrList, xNewShapes);
    1526             : 
    1527          95 :                     pContext->AddFirstRef();
    1528          95 :                     maMasterPageList.push_back( static_cast<SdXMLMasterPageContext*>(pContext) );
    1529          95 :                 }
    1530             :             }
    1531          95 :         }
    1532             :     }
    1533          87 :     else    if(nPrefix == XML_NAMESPACE_STYLE
    1534          87 :         && IsXMLToken( rLocalName, XML_HANDOUT_MASTER ) )
    1535             :     {
    1536          41 :         uno::Reference< presentation::XHandoutMasterSupplier > xHandoutSupp( GetSdImport().GetModel(), uno::UNO_QUERY );
    1537          41 :         if( xHandoutSupp.is() )
    1538             :         {
    1539          41 :             uno::Reference< drawing::XShapes > xHandoutPage( xHandoutSupp->getHandoutMasterPage(), uno::UNO_QUERY );
    1540          41 :             if(xHandoutPage.is() && GetSdImport().GetShapeImport()->GetStylesContext())
    1541             :             {
    1542             :                 pContext = new SdXMLMasterPageContext(GetSdImport(),
    1543          41 :                     nPrefix, rLocalName, xAttrList, xHandoutPage);
    1544          41 :             }
    1545          41 :         }
    1546             :     }
    1547          46 :     else if( (nPrefix == XML_NAMESPACE_DRAW )&& IsXMLToken( rLocalName, XML_LAYER_SET ) )
    1548             :     {
    1549          46 :         pContext = new SdXMLLayerSetContext( GetImport(), nPrefix, rLocalName, xAttrList );
    1550             :     }
    1551             : 
    1552             :     // call base class
    1553         182 :     if(!pContext)
    1554           0 :         pContext = SvXMLImportContext::CreateChildContext(nPrefix, rLocalName, xAttrList);
    1555             : 
    1556         182 :     return pContext;
    1557             : }
    1558             : 
    1559           0 : SdXMLHeaderFooterDeclContext::SdXMLHeaderFooterDeclContext(SvXMLImport& rImport,
    1560             :     sal_uInt16 nPrfx, const OUString& rLName,
    1561             :     const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList)
    1562             :     : SvXMLStyleContext( rImport, nPrfx, rLName, xAttrList)
    1563           0 :     , mbFixed(false)
    1564             : {
    1565           0 :     const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
    1566           0 :     for(sal_Int16 i=0; i < nAttrCount; i++)
    1567             :     {
    1568           0 :         OUString aLocalName;
    1569           0 :         const OUString aValue( xAttrList->getValueByIndex(i) );
    1570           0 :         sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName(xAttrList->getNameByIndex(i), &aLocalName);
    1571             : 
    1572           0 :         if( nPrefix == XML_NAMESPACE_PRESENTATION )
    1573             :         {
    1574           0 :             if( IsXMLToken( aLocalName, XML_NAME ) )
    1575             :             {
    1576           0 :                 maStrName = aValue;
    1577             :             }
    1578           0 :             else if( IsXMLToken( aLocalName, XML_SOURCE ) )
    1579             :             {
    1580           0 :                 mbFixed = IsXMLToken( aValue, XML_FIXED );
    1581             :             }
    1582             :         }
    1583           0 :         else if( nPrefix == XML_NAMESPACE_STYLE )
    1584             :         {
    1585           0 :             if( IsXMLToken( aLocalName, XML_DATA_STYLE_NAME ) )
    1586             :             {
    1587           0 :                 maStrDateTimeFormat = aValue;
    1588             :             }
    1589             :         }
    1590           0 :     }
    1591           0 : }
    1592             : 
    1593           0 : bool SdXMLHeaderFooterDeclContext::IsTransient() const
    1594             : {
    1595           0 :     return true;
    1596             : }
    1597             : 
    1598           0 : void SdXMLHeaderFooterDeclContext::EndElement()
    1599             : {
    1600           0 :     SdXMLImport& rImport = dynamic_cast<SdXMLImport&>(GetImport());
    1601           0 :     if( IsXMLToken( GetLocalName(), XML_HEADER_DECL ) )
    1602             :     {
    1603           0 :         rImport.AddHeaderDecl( maStrName, maStrText );
    1604             :     }
    1605           0 :     else if( IsXMLToken( GetLocalName(), XML_FOOTER_DECL ) )
    1606             :     {
    1607           0 :         rImport.AddFooterDecl( maStrName, maStrText );
    1608             :     }
    1609           0 :     else if( IsXMLToken( GetLocalName(), XML_DATE_TIME_DECL ) )
    1610             :     {
    1611           0 :         rImport.AddDateTimeDecl( maStrName, maStrText, mbFixed, maStrDateTimeFormat );
    1612             :     }
    1613           0 : }
    1614             : 
    1615           0 : void SdXMLHeaderFooterDeclContext::Characters( const OUString& rChars )
    1616             : {
    1617           0 :     maStrText += rChars;
    1618           0 : }
    1619             : 
    1620             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11