LCOV - code coverage report
Current view: top level - libreoffice/xmloff/source/draw - ximpstyl.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 460 654 70.3 %
Date: 2012-12-27 Functions: 59 92 64.1 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10