| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_xmloff.hxx" |
| |
| |
| #include "ximpstyl.hxx" |
| #include <xmloff/XMLShapeStyleContext.hxx> |
| #include "xmloff/xmlnmspe.hxx" |
| #include <xmloff/xmltoken.hxx> |
| #include <xmloff/xmluconv.hxx> |
| #include "ximpnote.hxx" |
| #include <tools/debug.hxx> |
| |
| #include <com/sun/star/lang/XMultiServiceFactory.hpp> |
| #include <com/sun/star/lang/XSingleServiceFactory.hpp> |
| #include <com/sun/star/presentation/XPresentationPage.hpp> |
| #include <com/sun/star/drawing/XDrawPages.hpp> |
| #include <com/sun/star/container/XNamed.hpp> |
| #include <com/sun/star/beans/XPropertySet.hpp> |
| #include <com/sun/star/beans/XPropertyState.hpp> |
| #include <com/sun/star/presentation/XHandoutMasterSupplier.hpp> |
| #include <comphelper/namecontainer.hxx> |
| #include <xmloff/xmlprcon.hxx> |
| #include <xmloff/families.hxx> |
| #include <com/sun/star/container/XNameContainer.hpp> |
| #include <svl/zforlist.hxx> |
| #include "PropertySetMerger.hxx" |
| #include "sdpropls.hxx" |
| #include "layerimp.hxx" |
| #include <xmloff/XMLGraphicsDefaultStyle.hxx> |
| #include "XMLNumberStylesImport.hxx" |
| #include "xmloff/xmlerror.hxx" |
| |
| using ::rtl::OUString; |
| using ::rtl::OUStringBuffer; |
| |
| using namespace ::com::sun::star; |
| using namespace ::com::sun::star::uno; |
| using namespace ::com::sun::star::xml::sax; |
| using namespace ::xmloff::token; |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| class SdXMLDrawingPagePropertySetContext : public SvXMLPropertySetContext |
| { |
| public: |
| |
| TYPEINFO(); |
| |
| SdXMLDrawingPagePropertySetContext( SvXMLImport& rImport, sal_uInt16 nPrfx, |
| const ::rtl::OUString& rLName, |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::xml::sax::XAttributeList >& xAttrList, |
| ::std::vector< XMLPropertyState > &rProps, |
| const UniReference < SvXMLImportPropertyMapper > &rMap ); |
| |
| virtual ~SdXMLDrawingPagePropertySetContext(); |
| |
| using SvXMLPropertySetContext::CreateChildContext; |
| virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix, |
| const ::rtl::OUString& rLocalName, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList, |
| ::std::vector< XMLPropertyState > &rProperties, |
| const XMLPropertyState& rProp); |
| }; |
| |
| TYPEINIT1( SdXMLDrawingPagePropertySetContext, SvXMLPropertySetContext ); |
| |
| SdXMLDrawingPagePropertySetContext::SdXMLDrawingPagePropertySetContext( |
| SvXMLImport& rImport, sal_uInt16 nPrfx, |
| const OUString& rLName, |
| const uno::Reference< xml::sax::XAttributeList > & xAttrList, |
| ::std::vector< XMLPropertyState > &rProps, |
| const UniReference < SvXMLImportPropertyMapper > &rMap ) : |
| SvXMLPropertySetContext( rImport, nPrfx, rLName, xAttrList, |
| XML_TYPE_PROP_DRAWING_PAGE, rProps, rMap ) |
| { |
| } |
| |
| SdXMLDrawingPagePropertySetContext::~SdXMLDrawingPagePropertySetContext() |
| { |
| } |
| |
| SvXMLImportContext *SdXMLDrawingPagePropertySetContext::CreateChildContext( |
| sal_uInt16 p_nPrefix, |
| const OUString& rLocalName, |
| const uno::Reference< xml::sax::XAttributeList > & xAttrList, |
| ::std::vector< XMLPropertyState > &rProperties, |
| const XMLPropertyState& rProp ) |
| { |
| SvXMLImportContext *pContext = 0; |
| |
| switch( mxMapper->getPropertySetMapper()->GetEntryContextId( rProp.mnIndex ) ) |
| { |
| case CTF_PAGE_SOUND_URL: |
| { |
| const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; |
| for(sal_Int16 i=0; i < nAttrCount; i++) |
| { |
| OUString aLocalName; |
| sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName(xAttrList->getNameByIndex(i), &aLocalName); |
| |
| if( (nPrefix == XML_NAMESPACE_XLINK) && IsXMLToken( aLocalName, XML_HREF ) ) |
| { |
| uno::Any aAny( GetImport().GetAbsoluteReference( xAttrList->getValueByIndex(i) ) ); |
| XMLPropertyState aPropState( rProp.mnIndex, aAny ); |
| rProperties.push_back( aPropState ); |
| } |
| } |
| break; |
| } |
| } |
| |
| if( !pContext ) |
| pContext = SvXMLPropertySetContext::CreateChildContext( p_nPrefix, rLocalName, |
| xAttrList, |
| rProperties, rProp ); |
| |
| return pContext; |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| class SdXMLDrawingPageStyleContext : public XMLPropStyleContext |
| { |
| public: |
| TYPEINFO(); |
| |
| SdXMLDrawingPageStyleContext( |
| SvXMLImport& rImport, |
| sal_uInt16 nPrfx, |
| const rtl::OUString& rLName, |
| const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList, |
| SvXMLStylesContext& rStyles, |
| sal_uInt16 nFamily = XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID); |
| virtual ~SdXMLDrawingPageStyleContext(); |
| |
| SvXMLImportContext * CreateChildContext( |
| sal_uInt16 nPrefix, |
| const ::rtl::OUString& rLocalName, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > & xAttrList ); |
| |
| virtual void Finish( sal_Bool bOverwrite ); |
| |
| // #i35918# |
| virtual void FillPropertySet( |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::beans::XPropertySet > & rPropSet ); |
| }; |
| |
| TYPEINIT1( SdXMLDrawingPageStyleContext, XMLPropStyleContext ); |
| |
| SdXMLDrawingPageStyleContext::SdXMLDrawingPageStyleContext( |
| SvXMLImport& rImport, |
| sal_uInt16 nPrfx, |
| const OUString& rLName, |
| const uno::Reference< xml::sax::XAttributeList >& xAttrList, |
| SvXMLStylesContext& rStyles, |
| sal_uInt16 nFamily) |
| : XMLPropStyleContext(rImport, nPrfx, rLName, xAttrList, rStyles, nFamily ) |
| { |
| } |
| |
| SdXMLDrawingPageStyleContext::~SdXMLDrawingPageStyleContext() |
| { |
| } |
| |
| SvXMLImportContext *SdXMLDrawingPageStyleContext::CreateChildContext( |
| sal_uInt16 nPrefix, |
| const OUString& rLocalName, |
| const uno::Reference< xml::sax::XAttributeList > & xAttrList ) |
| { |
| SvXMLImportContext *pContext = 0; |
| |
| if( XML_NAMESPACE_STYLE == nPrefix && |
| IsXMLToken( rLocalName, XML_DRAWING_PAGE_PROPERTIES ) ) |
| { |
| UniReference < SvXMLImportPropertyMapper > xImpPrMap = |
| GetStyles()->GetImportPropertyMapper( GetFamily() ); |
| if( xImpPrMap.is() ) |
| pContext = new SdXMLDrawingPagePropertySetContext( GetImport(), nPrefix, |
| rLocalName, xAttrList, |
| GetProperties(), |
| xImpPrMap ); |
| } |
| |
| if( !pContext ) |
| pContext = XMLPropStyleContext::CreateChildContext( nPrefix, rLocalName, |
| xAttrList ); |
| |
| return pContext; |
| } |
| |
| void SdXMLDrawingPageStyleContext::Finish( sal_Bool bOverwrite ) |
| { |
| XMLPropStyleContext::Finish( bOverwrite ); |
| |
| ::std::vector< XMLPropertyState > &rProperties = GetProperties(); |
| |
| const UniReference< XMLPropertySetMapper >& rImpPrMap = GetStyles()->GetImportPropertyMapper( GetFamily() )->getPropertySetMapper(); |
| |
| ::std::vector< XMLPropertyState >::iterator property = rProperties.begin(); |
| for(; property != rProperties.end(); property++) |
| { |
| if( property->mnIndex == -1 ) |
| continue; |
| |
| sal_Int16 nContextID = rImpPrMap->GetEntryContextId(property->mnIndex); |
| switch( nContextID ) |
| { |
| case CTF_DATE_TIME_FORMAT: |
| { |
| OUString sStyleName; |
| (*property).maValue >>= sStyleName; |
| |
| sal_Int32 nStyle = 0; |
| |
| SdXMLNumberFormatImportContext* pSdNumStyle = |
| PTR_CAST( SdXMLNumberFormatImportContext, |
| GetStyles()->FindStyleChildContext( XML_STYLE_FAMILY_DATA_STYLE, sStyleName, sal_True ) ); |
| |
| if( pSdNumStyle ) |
| nStyle = pSdNumStyle->GetDrawKey(); |
| |
| (*property).maValue <<= nStyle; |
| } |
| break; |
| } |
| } |
| |
| } |
| |
| // #i35918# |
| void SdXMLDrawingPageStyleContext::FillPropertySet( |
| const Reference< beans::XPropertySet > & rPropSet ) |
| { |
| const sal_uInt16 MAX_SPECIAL_DRAW_STYLES = 7; |
| struct _ContextID_Index_Pair aContextIDs[MAX_SPECIAL_DRAW_STYLES+1] = |
| { |
| { CTF_DASHNAME , -1 }, |
| { CTF_LINESTARTNAME , -1 }, |
| { CTF_LINEENDNAME , -1 }, |
| { CTF_FILLGRADIENTNAME, -1 }, |
| { CTF_FILLTRANSNAME , -1 }, |
| { CTF_FILLHATCHNAME , -1 }, |
| { CTF_FILLBITMAPNAME , -1 }, |
| { -1, -1 } |
| }; |
| static sal_uInt16 aFamilies[MAX_SPECIAL_DRAW_STYLES] = |
| { |
| XML_STYLE_FAMILY_SD_STROKE_DASH_ID, |
| XML_STYLE_FAMILY_SD_MARKER_ID, |
| XML_STYLE_FAMILY_SD_MARKER_ID, |
| XML_STYLE_FAMILY_SD_GRADIENT_ID, |
| XML_STYLE_FAMILY_SD_GRADIENT_ID, |
| XML_STYLE_FAMILY_SD_HATCH_ID, |
| XML_STYLE_FAMILY_SD_FILL_IMAGE_ID |
| }; |
| |
| UniReference < SvXMLImportPropertyMapper > xImpPrMap = |
| GetStyles()->GetImportPropertyMapper( GetFamily() ); |
| DBG_ASSERT( xImpPrMap.is(), "There is the import prop mapper" ); |
| if( xImpPrMap.is() ) |
| xImpPrMap->FillPropertySet( GetProperties(), rPropSet, aContextIDs ); |
| |
| Reference< beans::XPropertySetInfo > xInfo; |
| for( sal_uInt16 i=0; i<MAX_SPECIAL_DRAW_STYLES; i++ ) |
| { |
| sal_Int32 nIndex = aContextIDs[i].nIndex; |
| if( nIndex != -1 ) |
| { |
| struct XMLPropertyState& rState = GetProperties()[nIndex]; |
| OUString sStyleName; |
| rState.maValue >>= sStyleName; |
| sStyleName = GetImport().GetStyleDisplayName( aFamilies[i], |
| sStyleName ); |
| // get property set mapper |
| UniReference<XMLPropertySetMapper> rPropMapper = |
| xImpPrMap->getPropertySetMapper(); |
| |
| // set property |
| const OUString& rPropertyName = |
| rPropMapper->GetEntryAPIName(rState.mnIndex); |
| if( !xInfo.is() ) |
| xInfo = rPropSet->getPropertySetInfo(); |
| if ( xInfo->hasPropertyByName( rPropertyName ) ) |
| { |
| rPropSet->setPropertyValue( rPropertyName, Any( sStyleName ) ); |
| } |
| } |
| } |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| TYPEINIT1( SdXMLPageMasterStyleContext, SvXMLStyleContext ); |
| |
| SdXMLPageMasterStyleContext::SdXMLPageMasterStyleContext( |
| SdXMLImport& rImport, |
| sal_uInt16 nPrfx, |
| const OUString& rLName, |
| const uno::Reference< xml::sax::XAttributeList>& xAttrList) |
| : SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList, XML_STYLE_FAMILY_SD_PAGEMASTERSTYLECONEXT_ID), |
| mnBorderBottom( 0L ), |
| mnBorderLeft( 0L ), |
| mnBorderRight( 0L ), |
| mnBorderTop( 0L ), |
| mnWidth( 0L ), |
| mnHeight( 0L ), |
| meOrientation(GetSdImport().IsDraw() ? view::PaperOrientation_PORTRAIT : view::PaperOrientation_LANDSCAPE) |
| { |
| // set family to something special at SvXMLStyleContext |
| // for differences in search-methods |
| |
| sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; |
| for(sal_Int16 i=0; i < nAttrCount; i++) |
| { |
| OUString sAttrName = xAttrList->getNameByIndex(i); |
| OUString aLocalName; |
| sal_uInt16 nPrefix = GetSdImport().GetNamespaceMap().GetKeyByAttrName(sAttrName, &aLocalName); |
| OUString sValue = xAttrList->getValueByIndex(i); |
| const SvXMLTokenMap& rAttrTokenMap = GetSdImport().GetPageMasterStyleAttrTokenMap(); |
| |
| switch(rAttrTokenMap.Get(nPrefix, aLocalName)) |
| { |
| case XML_TOK_PAGEMASTERSTYLE_MARGIN_TOP: |
| { |
| GetSdImport().GetMM100UnitConverter().convertMeasure(mnBorderTop, sValue); |
| break; |
| } |
| case XML_TOK_PAGEMASTERSTYLE_MARGIN_BOTTOM: |
| { |
| GetSdImport().GetMM100UnitConverter().convertMeasure(mnBorderBottom, sValue); |
| break; |
| } |
| case XML_TOK_PAGEMASTERSTYLE_MARGIN_LEFT: |
| { |
| GetSdImport().GetMM100UnitConverter().convertMeasure(mnBorderLeft, sValue); |
| break; |
| } |
| case XML_TOK_PAGEMASTERSTYLE_MARGIN_RIGHT: |
| { |
| GetSdImport().GetMM100UnitConverter().convertMeasure(mnBorderRight, sValue); |
| break; |
| } |
| case XML_TOK_PAGEMASTERSTYLE_PAGE_WIDTH: |
| { |
| GetSdImport().GetMM100UnitConverter().convertMeasure(mnWidth, sValue); |
| break; |
| } |
| case XML_TOK_PAGEMASTERSTYLE_PAGE_HEIGHT: |
| { |
| GetSdImport().GetMM100UnitConverter().convertMeasure(mnHeight, sValue); |
| break; |
| } |
| case XML_TOK_PAGEMASTERSTYLE_PAGE_ORIENTATION: |
| { |
| if( IsXMLToken( sValue, XML_PORTRAIT ) ) |
| meOrientation = view::PaperOrientation_PORTRAIT; |
| else |
| meOrientation = view::PaperOrientation_LANDSCAPE; |
| break; |
| } |
| } |
| } |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| SdXMLPageMasterStyleContext::~SdXMLPageMasterStyleContext() |
| { |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| TYPEINIT1( SdXMLPageMasterContext, SvXMLStyleContext ); |
| |
| SdXMLPageMasterContext::SdXMLPageMasterContext( |
| SdXMLImport& rImport, |
| sal_uInt16 nPrfx, |
| const OUString& rLName, |
| const uno::Reference< xml::sax::XAttributeList>& xAttrList) |
| : SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList, XML_STYLE_FAMILY_SD_PAGEMASTERCONEXT_ID), |
| mpPageMasterStyle( 0L ) |
| { |
| // set family to something special at SvXMLStyleContext |
| // for differences in search-methods |
| |
| sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; |
| for(sal_Int16 i=0; i < nAttrCount; i++) |
| { |
| OUString sAttrName = xAttrList->getNameByIndex(i); |
| OUString aLocalName; |
| sal_uInt16 nPrefix = GetSdImport().GetNamespaceMap().GetKeyByAttrName(sAttrName, &aLocalName); |
| OUString sValue = xAttrList->getValueByIndex(i); |
| const SvXMLTokenMap& rAttrTokenMap = GetSdImport().GetPageMasterAttrTokenMap(); |
| |
| switch(rAttrTokenMap.Get(nPrefix, aLocalName)) |
| { |
| case XML_TOK_PAGEMASTER_NAME: |
| { |
| msName = sValue; |
| break; |
| } |
| } |
| } |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| SdXMLPageMasterContext::~SdXMLPageMasterContext() |
| { |
| // release remembered contexts, they are no longer needed |
| if(mpPageMasterStyle) |
| { |
| mpPageMasterStyle->ReleaseRef(); |
| mpPageMasterStyle = 0L; |
| } |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| SvXMLImportContext *SdXMLPageMasterContext::CreateChildContext( |
| sal_uInt16 nPrefix, |
| const OUString& rLocalName, |
| const uno::Reference< xml::sax::XAttributeList >& xAttrList ) |
| { |
| SvXMLImportContext* pContext = 0; |
| |
| if(nPrefix == XML_NAMESPACE_STYLE && IsXMLToken( rLocalName, XML_PAGE_LAYOUT_PROPERTIES) ) |
| { |
| pContext = new SdXMLPageMasterStyleContext(GetSdImport(), nPrefix, rLocalName, xAttrList); |
| |
| // remember SdXMLPresentationPlaceholderContext for later evaluation |
| if(pContext) |
| { |
| pContext->AddRef(); |
| DBG_ASSERT(!mpPageMasterStyle, "PageMasterStyle is set, there seem to be two of them (!)"); |
| mpPageMasterStyle = (SdXMLPageMasterStyleContext*)pContext; |
| } |
| } |
| |
| // call base class |
| if(!pContext) |
| pContext = SvXMLStyleContext::CreateChildContext(nPrefix, rLocalName, xAttrList); |
| |
| return pContext; |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| TYPEINIT1( SdXMLPresentationPageLayoutContext, SvXMLStyleContext ); |
| |
| SdXMLPresentationPageLayoutContext::SdXMLPresentationPageLayoutContext( |
| SdXMLImport& rImport, |
| sal_uInt16 nPrfx, |
| const OUString& rLName, |
| const uno::Reference< xml::sax::XAttributeList >& xAttrList) |
| : SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList, XML_STYLE_FAMILY_SD_PRESENTATIONPAGELAYOUT_ID), |
| mnTypeId( 20 ) // AUTOLAYOUT_NONE |
| { |
| // set family to somethiong special at SvXMLStyleContext |
| // for differences in search-methods |
| |
| sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; |
| for( sal_Int16 i=0; i < nAttrCount; i++ ) |
| { |
| const OUString& rAttrName = xAttrList->getNameByIndex( i ); |
| OUString aLocalName; |
| sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName ); |
| |
| if(nPrefix == XML_NAMESPACE_STYLE && IsXMLToken( aLocalName, XML_NAME ) ) |
| { |
| msName = xAttrList->getValueByIndex( i ); |
| } |
| } |
| } |
| |
| SdXMLPresentationPageLayoutContext::~SdXMLPresentationPageLayoutContext() |
| { |
| } |
| |
| SvXMLImportContext *SdXMLPresentationPageLayoutContext::CreateChildContext( |
| sal_uInt16 nPrefix, |
| const OUString& rLocalName, |
| const uno::Reference< xml::sax::XAttributeList >& xAttrList ) |
| { |
| SvXMLImportContext* pContext = 0; |
| |
| if(nPrefix == XML_NAMESPACE_PRESENTATION && IsXMLToken( rLocalName, XML_PLACEHOLDER ) ) |
| { |
| // presentation:placeholder inside style:presentation-page-layout context |
| pContext = new SdXMLPresentationPlaceholderContext( |
| GetSdImport(), nPrefix, rLocalName, xAttrList); |
| |
| // remember SdXMLPresentationPlaceholderContext for later evaluation |
| if(pContext) |
| { |
| pContext->AddRef(); |
| maList.Insert((SdXMLPresentationPlaceholderContext*)pContext, LIST_APPEND); |
| } |
| } |
| |
| // call base class |
| if(!pContext) |
| pContext = SvXMLStyleContext::CreateChildContext(nPrefix, rLocalName, xAttrList); |
| |
| return pContext; |
| } |
| |
| void SdXMLPresentationPageLayoutContext::EndElement() |
| { |
| // build presentation page layout type here |
| // calc mnTpeId due to content of maList |
| // at the moment only use number of types used there |
| if(maList.Count()) |
| { |
| SdXMLPresentationPlaceholderContext* pObj0 = maList.GetObject(0); |
| if(pObj0->GetName().equals(OUString(RTL_CONSTASCII_USTRINGPARAM("handout")))) |
| { |
| switch( maList.Count() ) |
| { |
| case 1: |
| mnTypeId = 22; // AUTOLAYOUT_HANDOUT1 |
| break; |
| case 2: |
| mnTypeId = 23; // AUTOLAYOUT_HANDOUT2 |
| break; |
| case 3: |
| mnTypeId = 24; // AUTOLAYOUT_HANDOUT3 |
| break; |
| case 4: |
| mnTypeId = 25; // AUTOLAYOUT_HANDOUT4 |
| break; |
| case 9: |
| mnTypeId = 31; // AUTOLAYOUT_HANDOUT9 |
| break; |
| default: |
| mnTypeId = 26; // AUTOLAYOUT_HANDOUT6 |
| } |
| } |
| else |
| { |
| switch(maList.Count()) |
| { |
| case 1: |
| { |
| if(pObj0->GetName().equals(OUString(RTL_CONSTASCII_USTRINGPARAM("title")))) |
| { |
| mnTypeId = 19; // AUTOLAYOUT_ONLY_TITLE |
| } |
| else |
| { |
| mnTypeId = 32; // AUTOLAYOUT_ONLY_TEXT |
| } |
| break; |
| } |
| case 2: |
| { |
| SdXMLPresentationPlaceholderContext* pObj1 = maList.GetObject(1); |
| |
| if(pObj1->GetName().equals( |
| OUString(RTL_CONSTASCII_USTRINGPARAM("subtitle")))) |
| { |
| mnTypeId = 0; // AUTOLAYOUT_TITLE |
| } |
| else if(pObj1->GetName().equals( |
| OUString(RTL_CONSTASCII_USTRINGPARAM("outline")))) |
| { |
| mnTypeId = 1; // AUTOLAYOUT_ENUM |
| } |
| else if(pObj1->GetName().equals( |
| OUString(RTL_CONSTASCII_USTRINGPARAM("chart")))) |
| { |
| mnTypeId = 2; // AUTOLAYOUT_CHART |
| } |
| else if(pObj1->GetName().equals( |
| OUString(RTL_CONSTASCII_USTRINGPARAM("table")))) |
| { |
| mnTypeId = 8; // AUTOLAYOUT_TAB |
| } |
| else if(pObj1->GetName().equals( |
| OUString(RTL_CONSTASCII_USTRINGPARAM("object")))) |
| { |
| mnTypeId = 11; // AUTOLAYOUT_OBJ |
| } |
| else if(pObj1->GetName().equals( |
| OUString(RTL_CONSTASCII_USTRINGPARAM("vertical_outline")))) |
| { |
| if(pObj0->GetName().equals(OUString(RTL_CONSTASCII_USTRINGPARAM("vertical_title")))) |
| { |
| // AUTOLAYOUT_VERTICAL_TITLE_VERTICAL_OUTLINE |
| mnTypeId = 28; |
| } |
| else |
| { |
| // AUTOLAYOUT_TITLE_VERTICAL_OUTLINE |
| mnTypeId = 29; |
| } |
| } |
| else |
| { |
| mnTypeId = 21; // AUTOLAYOUT_NOTES |
| } |
| break; |
| } |
| case 3: |
| { |
| SdXMLPresentationPlaceholderContext* pObj1 = maList.GetObject(1); |
| SdXMLPresentationPlaceholderContext* pObj2 = maList.GetObject(2); |
| |
| if(pObj1->GetName().equals( |
| OUString(RTL_CONSTASCII_USTRINGPARAM("outline")))) |
| { |
| if(pObj2->GetName().equals( |
| OUString(RTL_CONSTASCII_USTRINGPARAM("outline")))) |
| { |
| mnTypeId = 3; // AUTOLAYOUT_2TEXT |
| } |
| else if(pObj2->GetName().equals( |
| OUString(RTL_CONSTASCII_USTRINGPARAM("chart")))) |
| { |
| mnTypeId = 4; // AUTOLAYOUT_TEXTCHART |
| } |
| else if(pObj2->GetName().equals( |
| OUString(RTL_CONSTASCII_USTRINGPARAM("graphic")))) |
| { |
| mnTypeId = 6; // AUTOLAYOUT_TEXTCLIP |
| } |
| else |
| { |
| if(pObj1->GetX() < pObj2->GetX()) |
| { |
| mnTypeId = 10; // AUTOLAYOUT_TEXTOBJ -> outline left, object right |
| } |
| else |
| { |
| mnTypeId = 17; // AUTOLAYOUT_TEXTOVEROBJ -> outline top, object right |
| } |
| } |
| } |
| else if(pObj1->GetName().equals( |
| OUString(RTL_CONSTASCII_USTRINGPARAM("chart")))) |
| { |
| mnTypeId = 7; // AUTOLAYOUT_CHARTTEXT |
| } |
| else if(pObj1->GetName().equals( |
| OUString(RTL_CONSTASCII_USTRINGPARAM("graphic")))) |
| { |
| if(pObj2->GetName().equals(OUString(RTL_CONSTASCII_USTRINGPARAM("vertical_outline")))) |
| { |
| // AUTOLAYOUT_TITLE_VERTICAL_OUTLINE_CLIPART |
| mnTypeId = 30; |
| } |
| else |
| { |
| mnTypeId = 9; // AUTOLAYOUT_CLIPTEXT |
| } |
| } |
| else if(pObj1->GetName().equals( |
| OUString(RTL_CONSTASCII_USTRINGPARAM("vertical_outline")))) |
| { |
| // AUTOLAYOUT_VERTICAL_TITLE_TEXT_CHART |
| mnTypeId = 27; |
| } |
| else |
| { |
| if(pObj1->GetX() < pObj2->GetX()) |
| { |
| mnTypeId = 13; // AUTOLAYOUT_OBJTEXT -> left, right |
| } |
| else |
| { |
| mnTypeId = 14; // AUTOLAYOUT_OBJOVERTEXT -> top, bottom |
| } |
| } |
| break; |
| } |
| case 4: |
| { |
| SdXMLPresentationPlaceholderContext* pObj1 = maList.GetObject(1); |
| SdXMLPresentationPlaceholderContext* pObj2 = maList.GetObject(2); |
| |
| if(pObj1->GetName().equals( |
| OUString(RTL_CONSTASCII_USTRINGPARAM("object")))) |
| { |
| if(pObj1->GetX() < pObj2->GetX()) |
| { |
| mnTypeId = 16; // AUTOLAYOUT_2OBJOVERTEXT |
| } |
| else |
| { |
| mnTypeId = 15; // AUTOLAYOUT_2OBJTEXT |
| } |
| } |
| else |
| { |
| mnTypeId = 12; // AUTOLAYOUT_TEXT2OBJ |
| } |
| break; |
| } |
| case 5: |
| { |
| SdXMLPresentationPlaceholderContext* pObj1 = maList.GetObject(1); |
| |
| if(pObj1->GetName().equals( |
| OUString(RTL_CONSTASCII_USTRINGPARAM("object")))) |
| { |
| mnTypeId = 18; // AUTOLAYOUT_4OBJ |
| } |
| else |
| { |
| mnTypeId = 33; // AUTOLAYOUT_4CLIPART |
| } |
| break; |
| |
| } |
| case 7: |
| { |
| mnTypeId = 33; // AUTOLAYOUT_6CLIPART |
| break; |
| } |
| default: |
| { |
| mnTypeId = 20; // AUTOLAYOUT_NONE |
| break; |
| } |
| } |
| } |
| |
| // release remembered contexts, they are no longer needed |
| while(maList.Count()) |
| maList.Remove(maList.Count() - 1)->ReleaseRef(); |
| } |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| SdXMLPresentationPlaceholderContext::SdXMLPresentationPlaceholderContext( |
| SdXMLImport& rImport, |
| sal_uInt16 nPrfx, const |
| OUString& rLName, |
| const uno::Reference< xml::sax::XAttributeList>& xAttrList) |
| : SvXMLImportContext( rImport, nPrfx, rLName), |
| mnX(0L), |
| mnY(0L), |
| mnWidth(1L), |
| mnHeight(1L) |
| { |
| sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; |
| for(sal_Int16 i=0; i < nAttrCount; i++) |
| { |
| OUString sAttrName = xAttrList->getNameByIndex(i); |
| OUString aLocalName; |
| sal_uInt16 nPrefix = GetSdImport().GetNamespaceMap().GetKeyByAttrName(sAttrName, &aLocalName); |
| OUString sValue = xAttrList->getValueByIndex(i); |
| const SvXMLTokenMap& rAttrTokenMap = GetSdImport().GetPresentationPlaceholderAttrTokenMap(); |
| |
| switch(rAttrTokenMap.Get(nPrefix, aLocalName)) |
| { |
| case XML_TOK_PRESENTATIONPLACEHOLDER_OBJECTNAME: |
| { |
| msName = sValue; |
| break; |
| } |
| case XML_TOK_PRESENTATIONPLACEHOLDER_X: |
| { |
| GetSdImport().GetMM100UnitConverter().convertMeasure(mnX, sValue); |
| break; |
| } |
| case XML_TOK_PRESENTATIONPLACEHOLDER_Y: |
| { |
| GetSdImport().GetMM100UnitConverter().convertMeasure(mnY, sValue); |
| break; |
| } |
| case XML_TOK_PRESENTATIONPLACEHOLDER_WIDTH: |
| { |
| GetSdImport().GetMM100UnitConverter().convertMeasure(mnWidth, sValue); |
| break; |
| } |
| case XML_TOK_PRESENTATIONPLACEHOLDER_HEIGHT: |
| { |
| GetSdImport().GetMM100UnitConverter().convertMeasure(mnHeight, sValue); |
| break; |
| } |
| } |
| } |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| SdXMLPresentationPlaceholderContext::~SdXMLPresentationPlaceholderContext() |
| { |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| TYPEINIT1( SdXMLMasterPageContext, SdXMLGenericPageContext ); |
| |
| SdXMLMasterPageContext::SdXMLMasterPageContext( |
| SdXMLImport& rImport, |
| sal_uInt16 nPrfx, |
| const OUString& rLName, |
| const uno::Reference< xml::sax::XAttributeList>& xAttrList, |
| uno::Reference< drawing::XShapes >& rShapes) |
| : SdXMLGenericPageContext( rImport, nPrfx, rLName, xAttrList, rShapes ) |
| { |
| const sal_Bool bHandoutMaster = IsXMLToken( rLName, XML_HANDOUT_MASTER ); |
| |
| const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; |
| for(sal_Int16 i=0; i < nAttrCount; i++) |
| { |
| OUString sAttrName = xAttrList->getNameByIndex( i ); |
| OUString aLocalName; |
| sal_uInt16 nPrefix = GetSdImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName ); |
| OUString sValue = xAttrList->getValueByIndex( i ); |
| const SvXMLTokenMap& rAttrTokenMap = GetSdImport().GetMasterPageAttrTokenMap(); |
| |
| switch(rAttrTokenMap.Get(nPrefix, aLocalName)) |
| { |
| case XML_TOK_MASTERPAGE_NAME: |
| { |
| msName = sValue; |
| break; |
| } |
| case XML_TOK_MASTERPAGE_DISPLAY_NAME: |
| { |
| msDisplayName = sValue; |
| break; |
| } |
| case XML_TOK_MASTERPAGE_PAGE_MASTER_NAME: |
| { |
| msPageMasterName = sValue; |
| break; |
| } |
| case XML_TOK_MASTERPAGE_STYLE_NAME: |
| { |
| msStyleName = sValue; |
| break; |
| } |
| case XML_TOK_MASTERPAGE_PAGE_LAYOUT_NAME: |
| { |
| maPageLayoutName = sValue; |
| break; |
| } |
| case XML_TOK_MASTERPAGE_USE_HEADER_NAME: |
| { |
| maUseHeaderDeclName = sValue; |
| break; |
| } |
| case XML_TOK_MASTERPAGE_USE_FOOTER_NAME: |
| { |
| maUseFooterDeclName = sValue; |
| break; |
| } |
| case XML_TOK_MASTERPAGE_USE_DATE_TIME_NAME: |
| { |
| maUseDateTimeDeclName = sValue; |
| break; |
| } |
| } |
| } |
| |
| if( !msDisplayName.getLength() ) |
| msDisplayName = msName; |
| else if( msDisplayName != msName ) |
| GetImport().AddStyleDisplayName( XML_STYLE_FAMILY_MASTER_PAGE, msName, msDisplayName ); |
| |
| GetImport().GetShapeImport()->startPage( GetLocalShapesContext() ); |
| |
| // set page name? |
| if(!bHandoutMaster && msDisplayName.getLength() && GetLocalShapesContext().is()) |
| { |
| uno::Reference < container::XNamed > xNamed(GetLocalShapesContext(), uno::UNO_QUERY); |
| if(xNamed.is()) |
| xNamed->setName(msDisplayName); |
| } |
| |
| // set page-master? |
| if(msPageMasterName.getLength()) |
| { |
| SetPageMaster( msPageMasterName ); |
| } |
| |
| SetStyle( msStyleName ); |
| |
| SetLayout(); |
| |
| DeleteAllShapes(); |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| SdXMLMasterPageContext::~SdXMLMasterPageContext() |
| { |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| void SdXMLMasterPageContext::EndElement() |
| { |
| // set styles on master-page |
| if(msName.getLength() && GetSdImport().GetShapeImport()->GetStylesContext()) |
| { |
| SvXMLImportContext* pContext = GetSdImport().GetShapeImport()->GetStylesContext(); |
| if( pContext && pContext->ISA( SvXMLStyleContext ) ) |
| ((SdXMLStylesContext*)pContext)->SetMasterPageStyles(*this); |
| } |
| |
| SdXMLGenericPageContext::EndElement(); |
| GetImport().GetShapeImport()->endPage(GetLocalShapesContext()); |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| SvXMLImportContext* SdXMLMasterPageContext::CreateChildContext( |
| sal_uInt16 nPrefix, |
| const OUString& rLocalName, |
| const uno::Reference< xml::sax::XAttributeList>& xAttrList ) |
| { |
| SvXMLImportContext* pContext = 0; |
| const SvXMLTokenMap& rTokenMap = GetSdImport().GetMasterPageElemTokenMap(); |
| |
| // some special objects inside style:masterpage context |
| switch(rTokenMap.Get(nPrefix, rLocalName)) |
| { |
| case XML_TOK_MASTERPAGE_STYLE: |
| { |
| if(GetSdImport().GetShapeImport()->GetStylesContext()) |
| { |
| // style:style inside master-page context -> presentation style |
| XMLShapeStyleContext* pNew = new XMLShapeStyleContext( |
| GetSdImport(), nPrefix, rLocalName, xAttrList, |
| *GetSdImport().GetShapeImport()->GetStylesContext(), |
| XML_STYLE_FAMILY_SD_PRESENTATION_ID); |
| |
| // add this style to the outer StylesContext class for later processing |
| if(pNew) |
| { |
| pContext = pNew; |
| GetSdImport().GetShapeImport()->GetStylesContext()->AddStyle(*pNew); |
| } |
| } |
| break; |
| } |
| case XML_TOK_MASTERPAGE_NOTES: |
| { |
| if( GetSdImport().IsImpress() ) |
| { |
| // get notes page |
| uno::Reference< presentation::XPresentationPage > xPresPage(GetLocalShapesContext(), uno::UNO_QUERY); |
| if(xPresPage.is()) |
| { |
| uno::Reference< drawing::XDrawPage > xNotesDrawPage(xPresPage->getNotesPage(), uno::UNO_QUERY); |
| if(xNotesDrawPage.is()) |
| { |
| uno::Reference< drawing::XShapes > xNewShapes(xNotesDrawPage, uno::UNO_QUERY); |
| if(xNewShapes.is()) |
| { |
| // presentation:notes inside master-page context |
| pContext = new SdXMLNotesContext( GetSdImport(), nPrefix, rLocalName, xAttrList, xNewShapes); |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| // call base class |
| if(!pContext) |
| pContext = SdXMLGenericPageContext::CreateChildContext(nPrefix, rLocalName, xAttrList); |
| |
| return pContext; |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| TYPEINIT1( SdXMLStylesContext, SvXMLStyleContext ); |
| |
| SdXMLStylesContext::SdXMLStylesContext( |
| SdXMLImport& rImport, |
| sal_uInt16 nPrfx, |
| const OUString& rLName, |
| const uno::Reference< xml::sax::XAttributeList >& xAttrList, |
| sal_Bool bIsAutoStyle) |
| : SvXMLStylesContext(rImport, nPrfx, rLName, xAttrList), |
| mbIsAutoStyle(bIsAutoStyle) |
| { |
| // #110680# |
| // Reference< lang::XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory(); |
| Reference< lang::XMultiServiceFactory > xMSF = rImport.getServiceFactory(); |
| |
| mpNumFormatter = new SvNumberFormatter( xMSF, LANGUAGE_SYSTEM ); |
| |
| // #110680# |
| // mpNumFmtHelper = new SvXMLNumFmtHelper( mpNumFormatter ); |
| mpNumFmtHelper = new SvXMLNumFmtHelper( mpNumFormatter, xMSF ); |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| SdXMLStylesContext::~SdXMLStylesContext() |
| { |
| delete mpNumFmtHelper; |
| delete mpNumFormatter; |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| SvXMLStyleContext* SdXMLStylesContext::CreateStyleChildContext( |
| sal_uInt16 nPrefix, |
| const OUString& rLocalName, |
| const uno::Reference< xml::sax::XAttributeList >& xAttrList) |
| { |
| SvXMLStyleContext* pContext = 0; |
| const SvXMLTokenMap& rStyleTokenMap = GetSdImport().GetStylesElemTokenMap(); |
| |
| switch(rStyleTokenMap.Get(nPrefix, rLocalName)) |
| { |
| case XML_TOK_STYLES_PAGE_MASTER: |
| { |
| // style:page-master inside office:styles context |
| pContext = new SdXMLPageMasterContext(GetSdImport(), nPrefix, rLocalName, xAttrList); |
| break; |
| } |
| case XML_TOK_STYLES_PRESENTATION_PAGE_LAYOUT: |
| { |
| // style:presentation-page-layout inside office:styles context |
| pContext = new SdXMLPresentationPageLayoutContext(GetSdImport(), nPrefix, rLocalName, xAttrList); |
| break; |
| } |
| } |
| |
| if(!pContext) |
| { |
| const SvXMLTokenMap& rTokenMap = mpNumFmtHelper->GetStylesElemTokenMap(); |
| sal_uInt16 nToken = rTokenMap.Get( nPrefix, rLocalName ); |
| switch (nToken) |
| { |
| case XML_TOK_STYLES_DATE_STYLE: |
| case XML_TOK_STYLES_TIME_STYLE: |
| // number:date-style or number:time-style |
| pContext = new SdXMLNumberFormatImportContext( GetSdImport(), nPrefix, rLocalName, mpNumFmtHelper->getData(), nToken, xAttrList, *this ); |
| break; |
| |
| case XML_TOK_STYLES_NUMBER_STYLE: |
| case XML_TOK_STYLES_CURRENCY_STYLE: |
| case XML_TOK_STYLES_PERCENTAGE_STYLE: |
| case XML_TOK_STYLES_BOOLEAN_STYLE: |
| case XML_TOK_STYLES_TEXT_STYLE: |
| pContext = new SvXMLNumFormatContext( GetSdImport(), nPrefix, rLocalName, |
| mpNumFmtHelper->getData(), nToken, xAttrList, *this ); |
| break; |
| } |
| } |
| |
| if(!pContext && nPrefix == XML_NAMESPACE_PRESENTATION ) |
| { |
| if( IsXMLToken( rLocalName, XML_HEADER_DECL ) || |
| IsXMLToken( rLocalName, XML_FOOTER_DECL ) || |
| IsXMLToken( rLocalName, XML_DATE_TIME_DECL ) ) |
| { |
| pContext = new SdXMLHeaderFooterDeclContext( GetImport(), nPrefix, rLocalName, xAttrList ); |
| } |
| } |
| |
| if(!pContext && (nPrefix == XML_NAMESPACE_TABLE) && IsXMLToken( rLocalName, XML_TABLE_TEMPLATE ) ) |
| { |
| pContext = GetImport().GetShapeImport()->GetShapeTableImport()->CreateTableTemplateContext(nPrefix, rLocalName, xAttrList ); |
| } |
| |
| // call base class |
| if(!pContext) |
| pContext = SvXMLStylesContext::CreateStyleChildContext(nPrefix, rLocalName, xAttrList); |
| |
| return pContext; |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| SvXMLStyleContext* SdXMLStylesContext::CreateStyleStyleChildContext( |
| sal_uInt16 nFamily, |
| sal_uInt16 nPrefix, |
| const OUString& rLocalName, |
| const uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList) |
| { |
| SvXMLStyleContext* pContext = 0; |
| |
| switch( nFamily ) |
| { |
| case XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID: |
| pContext = new SdXMLDrawingPageStyleContext(GetSdImport(), nPrefix, rLocalName, xAttrList, *this ); |
| break; |
| case XML_STYLE_FAMILY_TABLE_CELL: |
| case XML_STYLE_FAMILY_TABLE_COLUMN: |
| case XML_STYLE_FAMILY_TABLE_ROW: |
| pContext = new XMLShapeStyleContext( GetSdImport(), nPrefix, rLocalName, xAttrList, *this, nFamily ); |
| break; |
| } |
| |
| // call base class |
| if(!pContext) |
| pContext = SvXMLStylesContext::CreateStyleStyleChildContext(nFamily, nPrefix, rLocalName, xAttrList); |
| |
| return pContext; |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| SvXMLStyleContext* SdXMLStylesContext::CreateDefaultStyleStyleChildContext( |
| sal_uInt16 nFamily, |
| sal_uInt16 nPrefix, |
| const OUString& rLocalName, |
| const Reference< XAttributeList > & xAttrList ) |
| { |
| SvXMLStyleContext* pContext = 0; |
| |
| switch( nFamily ) |
| { |
| case XML_STYLE_FAMILY_SD_GRAPHICS_ID: |
| pContext = new XMLGraphicsDefaultStyle(GetSdImport(), nPrefix, rLocalName, xAttrList, *this ); |
| break; |
| } |
| |
| // call base class |
| if(!pContext) |
| pContext = SvXMLStylesContext::CreateDefaultStyleStyleChildContext(nFamily, nPrefix, rLocalName, xAttrList); |
| |
| return pContext; |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| sal_uInt16 SdXMLStylesContext::GetFamily( const OUString& rFamily ) const |
| { |
| // if(rFamily.getLength()) |
| // { |
| // if(rFamily.equals(OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_GRAPHICS_NAME)))) |
| // return XML_STYLE_FAMILY_SD_GRAPHICS_ID; |
| // |
| // if(rFamily.equals(OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_PRESENTATION_NAME)))) |
| // return XML_STYLE_FAMILY_SD_PRESENTATION_ID; |
| // |
| // if(rFamily.equals(OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_POOL_NAME)))) |
| // return XML_STYLE_FAMILY_SD_POOL_ID; |
| // |
| // if(rFamily.equals(OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STYLE_FAMILY_SD_DRAWINGPAGE_NAME)))) |
| // return XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID; |
| // } |
| |
| // call base class |
| return SvXMLStylesContext::GetFamily(rFamily); |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| |
| UniReference< SvXMLImportPropertyMapper > SdXMLStylesContext::GetImportPropertyMapper( |
| sal_uInt16 nFamily) const |
| { |
| UniReference < SvXMLImportPropertyMapper > xMapper; |
| |
| // if(XML_STYLE_FAMILY_SD_GRAPHICS_ID == nFamily |
| // || XML_STYLE_FAMILY_SD_PRESENTATION_ID == nFamily |
| // || XML_STYLE_FAMILY_SD_POOL_ID == nFamily) |
| // { |
| // if(!xPropImpPropMapper.is()) |
| // { |
| // UniReference< XMLShapeImportHelper > aImpHelper = ((SvXMLImport&)GetImport()).GetShapeImport(); |
| // ((SdXMLStylesContext*)this)->xPropImpPropMapper = |
| // new SvXMLImportPropertyMapper(aImpHelper->GetPropertySetMapper()); |
| // } |
| // xMapper = xPropImpPropMapper; |
| // return xMapper; |
| // } |
| |
| switch( nFamily ) |
| { |
| case XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID: |
| { |
| if(!xPresImpPropMapper.is()) |
| { |
| UniReference< XMLShapeImportHelper > aImpHelper = ((SvXMLImport&)GetImport()).GetShapeImport(); |
| ((SdXMLStylesContext*)this)->xPresImpPropMapper = |
| aImpHelper->GetPresPagePropsMapper(); |
| } |
| xMapper = xPresImpPropMapper; |
| break; |
| } |
| |
| case XML_STYLE_FAMILY_TABLE_COLUMN: |
| case XML_STYLE_FAMILY_TABLE_ROW: |
| case XML_STYLE_FAMILY_TABLE_CELL: |
| { |
| const rtl::Reference< XMLTableImport >& xTableImport( const_cast< SvXMLImport& >( GetImport() ).GetShapeImport()->GetShapeTableImport() ); |
| |
| switch( nFamily ) |
| { |
| case XML_STYLE_FAMILY_TABLE_COLUMN: xMapper = xTableImport->GetColumnImportPropertySetMapper().get(); break; |
| case XML_STYLE_FAMILY_TABLE_ROW: xMapper = xTableImport->GetRowImportPropertySetMapper().get(); break; |
| case XML_STYLE_FAMILY_TABLE_CELL: xMapper = xTableImport->GetCellImportPropertySetMapper().get(); break; |
| } |
| break; |
| } |
| } |
| |
| // call base class |
| if( !xMapper.is() ) |
| xMapper = SvXMLStylesContext::GetImportPropertyMapper(nFamily); |
| return xMapper; |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| // Process all style and object info |
| // |
| void SdXMLStylesContext::EndElement() |
| { |
| if(mbIsAutoStyle) |
| { |
| // AutoStyles for text import |
| GetImport().GetTextImport()->SetAutoStyles( this ); |
| |
| // AutoStyles for chart |
| GetImport().GetChartImport()->SetAutoStylesContext( this ); |
| |
| // AutoStyles for forms |
| GetImport().GetFormImport()->setAutoStyleContext( this ); |
| |
| // associate AutoStyles with styles in preparation to setting Styles on shapes |
| for(sal_uInt32 a(0L); a < GetStyleCount(); a++) |
| { |
| const SvXMLStyleContext* pStyle = GetStyle(a); |
| if(pStyle && pStyle->ISA(XMLShapeStyleContext)) |
| { |
| XMLShapeStyleContext* pDocStyle = (XMLShapeStyleContext*)pStyle; |
| // pDocStyle->Filter(); |
| |
| SvXMLStylesContext* pStylesContext = GetSdImport().GetShapeImport()->GetStylesContext(); |
| if( pStylesContext ) |
| { |
| pStyle = pStylesContext->FindStyleChildContext(pStyle->GetFamily(), pStyle->GetParentName()); |
| |
| if(pStyle && pStyle->ISA(XMLShapeStyleContext)) |
| { |
| XMLShapeStyleContext* pParentStyle = (XMLShapeStyleContext*)pStyle; |
| if(pParentStyle->GetStyle().is()) |
| { |
| pDocStyle->SetStyle(pParentStyle->GetStyle()); |
| } |
| } |
| } |
| } |
| } |
| |
| FinishStyles( false ); |
| } |
| else |
| { |
| // Process styles list |
| ImpSetGraphicStyles(); |
| ImpSetCellStyles(); |
| GetImport().GetShapeImport()->GetShapeTableImport()->finishStyles(); |
| |
| // put style infos in the info set for other components ( content import f.e. ) |
| uno::Reference< beans::XPropertySet > xInfoSet( GetImport().getImportInfo() ); |
| if( xInfoSet.is() ) |
| { |
| uno::Reference< beans::XPropertySetInfo > xInfoSetInfo( xInfoSet->getPropertySetInfo() ); |
| |
| if( xInfoSetInfo->hasPropertyByName( OUString( RTL_CONSTASCII_USTRINGPARAM( "PageLayouts" ) ) ) ) |
| xInfoSet->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "PageLayouts" ) ), uno::makeAny( getPageLayouts() ) ); |
| } |
| |
| } |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| // set master-page styles (all with family="presentation" and a special |
| // prefix) on given master-page. |
| // |
| void SdXMLStylesContext::SetMasterPageStyles(SdXMLMasterPageContext& rMaster) const |
| { |
| UniString sPrefix( rMaster.GetDisplayName()); |
| sPrefix += sal_Unicode('-'); |
| |
| if(GetSdImport().GetLocalDocStyleFamilies().is() && GetSdImport().GetLocalDocStyleFamilies()->hasByName(rMaster.GetDisplayName())) try |
| { |
| uno::Reference< container::XNameAccess > xMasterPageStyles( GetSdImport().GetLocalDocStyleFamilies()->getByName(rMaster.GetDisplayName()), UNO_QUERY_THROW ); |
| ImpSetGraphicStyles(xMasterPageStyles, XML_STYLE_FAMILY_SD_PRESENTATION_ID, sPrefix); |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERROR( "xmloff::SdXMLStylesContext::SetMasterPageStyles(), exception caught!" ); |
| } |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| // Process styles list: |
| // set graphic styles (all with family="graphics"). Remember xStyle at list element. |
| // |
| void SdXMLStylesContext::ImpSetGraphicStyles() const |
| { |
| if(GetSdImport().GetLocalDocStyleFamilies().is()) try |
| { |
| const OUString sGraphicStyleName(OUString(RTL_CONSTASCII_USTRINGPARAM("graphics"))); |
| uno::Reference< container::XNameAccess > xGraphicPageStyles( GetSdImport().GetLocalDocStyleFamilies()->getByName(sGraphicStyleName), uno::UNO_QUERY_THROW ); |
| |
| UniString aPrefix; |
| ImpSetGraphicStyles(xGraphicPageStyles, XML_STYLE_FAMILY_SD_GRAPHICS_ID, aPrefix); |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERROR( "xmloff::SdXMLStylesContext::ImpSetGraphicStyles(), exception caught!" ); |
| } |
| } |
| |
| void SdXMLStylesContext::ImpSetCellStyles() const |
| { |
| if(GetSdImport().GetLocalDocStyleFamilies().is()) try |
| { |
| const OUString sCellStyleName(OUString(RTL_CONSTASCII_USTRINGPARAM("cell"))); |
| uno::Reference< container::XNameAccess > xGraphicPageStyles( GetSdImport().GetLocalDocStyleFamilies()->getByName(sCellStyleName), uno::UNO_QUERY_THROW ); |
| |
| UniString aPrefix; |
| ImpSetGraphicStyles(xGraphicPageStyles, XML_STYLE_FAMILY_TABLE_CELL, aPrefix); |
| } |
| catch( uno::Exception& ) |
| { |
| DBG_ERROR( "xmloff::SdXMLStylesContext::ImpSetCellStyles(), exception caught!" ); |
| } |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////// |
| // help function used by ImpSetGraphicStyles() and ImpSetMasterPageStyles() |
| // |
| void SdXMLStylesContext::ImpSetGraphicStyles( uno::Reference< container::XNameAccess >& xPageStyles, sal_uInt16 nFamily, const UniString& rPrefix) const |
| { |
| xub_StrLen nPrefLen(rPrefix.Len()); |
| |
| sal_uInt32 a; |
| |
| // set defaults |
| for( a = 0; a < GetStyleCount(); a++) |
| { |
| const SvXMLStyleContext* pStyle = GetStyle(a); |
| |
| if(nFamily == pStyle->GetFamily() && pStyle->IsDefaultStyle()) |
| { |
| ((SvXMLStyleContext*)pStyle)->SetDefaults(); |
| } |
| } |
| |
| // create all styles and set properties |
| for( a = 0; a < GetStyleCount(); a++) |
| { |
| try |
| { |
| const SvXMLStyleContext* pStyle = GetStyle(a); |
| if(nFamily == pStyle->GetFamily() && !pStyle->IsDefaultStyle()) |
| { |
| OUString aStyleName(pStyle->GetDisplayName()); |
| if( nPrefLen ) |
| { |
| sal_Int32 nStylePrefLen = aStyleName.lastIndexOf( sal_Unicode('-') ) + 1; |
| if( (nPrefLen != nStylePrefLen) || (aStyleName.compareTo( rPrefix, nPrefLen ) != 0) ) |
| continue; |
| |
| aStyleName = aStyleName.copy( nPrefLen ); |
| } |
| |
| uno::Reference< style::XStyle > xStyle; |
| if(xPageStyles->hasByName(aStyleName)) |
| { |
| xPageStyles->getByName(aStyleName) >>= xStyle; |
| |
| // set properties of existing styles to default |
| uno::Reference< beans::XPropertySet > xPropSet( xStyle, uno::UNO_QUERY ); |
| uno::Reference< beans::XPropertySetInfo > xPropSetInfo; |
| if( xPropSet.is() ) |
| xPropSetInfo = xPropSet->getPropertySetInfo(); |
| |
| uno::Reference< beans::XPropertyState > xPropState( xStyle, uno::UNO_QUERY ); |
| |
| if( xPropState.is() ) |
| { |
| UniReference < XMLPropertySetMapper > xPrMap; |
| UniReference < SvXMLImportPropertyMapper > xImpPrMap = GetImportPropertyMapper( nFamily ); |
| DBG_ASSERT( xImpPrMap.is(), "There is the import prop mapper" ); |
| if( xImpPrMap.is() ) |
| xPrMap = xImpPrMap->getPropertySetMapper(); |
| if( xPrMap.is() ) |
| { |
| const sal_Int32 nCount = xPrMap->GetEntryCount(); |
| for( sal_Int32 i = 0; i < nCount; i++ ) |
| { |
| const OUString& rName = xPrMap->GetEntryAPIName( i ); |
| if( xPropSetInfo->hasPropertyByName( rName ) && beans::PropertyState_DIRECT_VALUE == xPropState->getPropertyState( rName ) ) |
| { |
| xPropState->setPropertyToDefault( rName ); |
| } |
| } |
| } |
| } |
| } |
| else |
| { |
| // graphics style does not exist, create and add it |
| uno::Reference< lang::XSingleServiceFactory > xServiceFact(xPageStyles, uno::UNO_QUERY); |
| if(xServiceFact.is()) |
| { |
| uno::Reference< style::XStyle > xNewStyle( xServiceFact->createInstance(), uno::UNO_QUERY); |
| |
| if(xNewStyle.is()) |
| { |
| // remember style |
| xStyle = xNewStyle; |
| |
| // add new style to graphics style pool |
| uno::Reference< container::XNameContainer > xInsertContainer(xPageStyles, uno::UNO_QUERY); |
| if(xInsertContainer.is()) |
| xInsertContainer->insertByName(aStyleName, uno::Any( xStyle ) ); |
| } |
| } |
| } |
| |
| if(xStyle.is()) |
| { |
| // set properties at style |
| XMLPropStyleContext* pPropStyle = dynamic_cast< XMLPropStyleContext* >( const_cast< SvXMLStyleContext* >( pStyle ) ); |
| uno::Reference< beans::XPropertySet > xPropSet(xStyle, uno::UNO_QUERY); |
| |
| if(xPropSet.is() && pPropStyle) |
| { |
| pPropStyle->FillPropertySet(xPropSet); |
| pPropStyle->SetStyle(xStyle); |
| } |
| } |
| } |
| } |
| catch( Exception& e) |
| { |
| uno::Sequence<OUString> aSeq(0); |
| const_cast<SdXMLImport*>(&GetSdImport())->SetError( XMLERROR_FLAG_WARNING | XMLERROR_API, aSeq, e.Message, NULL ); |
| } |
| } |
| |
| // now set parents for all styles (when necessary) |
| for(a = 0L; a < GetStyleCount(); a++) |
| { |
| const SvXMLStyleContext* pStyle = GetStyle(a); |
| |
| if(pStyle && pStyle->GetName().getLength() && (nFamily == pStyle->GetFamily())) try |
| { |
| OUString aStyleName(pStyle->GetDisplayName()); |
| if( nPrefLen ) |
| { |
| sal_Int32 nStylePrefLen = aStyleName.lastIndexOf( sal_Unicode('-') ) + 1; |
| if( (nPrefLen != nStylePrefLen) || (aStyleName.compareTo( rPrefix, nPrefLen ) != 0) ) |
| continue; |
| |
| aStyleName = aStyleName.copy( nPrefLen ); |
| } |
| |
| uno::Reference< style::XStyle > xStyle( xPageStyles->getByName(aStyleName), UNO_QUERY ); |
| if(xStyle.is()) |
| { |
| // set parent style name |
| ::rtl::OUString sParentStyleDisplayName( const_cast< SvXMLImport& >( GetImport() ).GetStyleDisplayName( pStyle->GetFamily(), pStyle->GetParentName() ) ); |
| if( nPrefLen ) |
| { |
| sal_Int32 nStylePrefLen = sParentStyleDisplayName.lastIndexOf( sal_Unicode('-') ) + 1; |
| if( (nPrefLen != nStylePrefLen) || (sParentStyleDisplayName.compareTo( rPrefix, nPrefLen ) != 0) ) |
| continue; |
| |
| sParentStyleDisplayName = sParentStyleDisplayName.copy( nPrefLen ); |
| } |
| xStyle->setParentStyle( sParentStyleDisplayName ); |
| } |
| } |
| catch( Exception& e ) |
| { |
| uno::Sequence<OUString> aSeq(0); |
| const_cast<SdXMLImport*>(&GetSdImport())->SetError( XMLERROR_FLAG_WARNING | XMLERROR_API, aSeq, e.Message, NULL ); |
| } |
| } |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // helper function to create the uno component that hold the mappings from |
| // xml auto layout name to internal autolayout id |
| |
| uno::Reference< container::XNameAccess > SdXMLStylesContext::getPageLayouts() const |
| { |
| uno::Reference< container::XNameContainer > xLayouts( comphelper::NameContainer_createInstance( ::getCppuType((const sal_Int32*)0)) ); |
| |
| for(sal_uInt32 a(0L); a < GetStyleCount(); a++) |
| { |
| const SvXMLStyleContext* pStyle = GetStyle(a); |
| if(pStyle && pStyle->ISA(SdXMLPresentationPageLayoutContext)) |
| { |
| xLayouts->insertByName( pStyle->GetName(), uno::makeAny( |
| (sal_Int32)((SdXMLPresentationPageLayoutContext*)pStyle)->GetTypeId() ) ); |
| } |
| } |
| |
| return uno::Reference< container::XNameAccess >::query( xLayouts ); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////// |
| // |
| TYPEINIT1( SdXMLMasterStylesContext, SvXMLImportContext ); |
| |
| SdXMLMasterStylesContext::SdXMLMasterStylesContext( |
| SdXMLImport& rImport, |
| sal_uInt16 nPrfx, |
| const rtl::OUString& rLName) |
| : SvXMLImportContext( rImport, nPrfx, rLName) |
| { |
| } |
| |
| SdXMLMasterStylesContext::~SdXMLMasterStylesContext() |
| { |
| while(maMasterPageList.Count()) |
| maMasterPageList.Remove(maMasterPageList.Count() - 1)->ReleaseRef(); |
| } |
| |
| SvXMLImportContext* SdXMLMasterStylesContext::CreateChildContext( |
| sal_uInt16 nPrefix, |
| const rtl::OUString& rLocalName, |
| const uno::Reference< xml::sax::XAttributeList >& xAttrList) |
| { |
| SvXMLImportContext* pContext = 0; |
| |
| if(nPrefix == XML_NAMESPACE_STYLE |
| && IsXMLToken( rLocalName, XML_MASTER_PAGE ) ) |
| { |
| // style:masterpage inside office:styles context |
| uno::Reference< drawing::XDrawPage > xNewMasterPage; |
| uno::Reference< drawing::XDrawPages > xMasterPages(GetSdImport().GetLocalMasterPages(), uno::UNO_QUERY); |
| |
| if( xMasterPages.is() ) |
| { |
| if(GetSdImport().GetNewMasterPageCount() + 1 > xMasterPages->getCount()) |
| { |
| // new page, create and insert |
| xNewMasterPage = xMasterPages->insertNewByIndex(xMasterPages->getCount()); |
| } |
| else |
| { |
| // existing page, use it |
| xMasterPages->getByIndex(GetSdImport().GetNewMasterPageCount()) >>= xNewMasterPage; |
| } |
| |
| // increment global import page counter |
| GetSdImport().IncrementNewMasterPageCount(); |
| |
| if(xNewMasterPage.is()) |
| { |
| uno::Reference< drawing::XShapes > xNewShapes(xNewMasterPage, uno::UNO_QUERY); |
| if(xNewShapes.is() && GetSdImport().GetShapeImport()->GetStylesContext()) |
| { |
| pContext = new SdXMLMasterPageContext(GetSdImport(), |
| nPrefix, rLocalName, xAttrList, xNewShapes); |
| |
| if(pContext) |
| { |
| pContext->AddRef(); |
| maMasterPageList.Insert((SdXMLMasterPageContext*)pContext, LIST_APPEND); |
| } |
| } |
| } |
| } |
| } |
| else if(nPrefix == XML_NAMESPACE_STYLE |
| && IsXMLToken( rLocalName, XML_HANDOUT_MASTER ) ) |
| { |
| uno::Reference< presentation::XHandoutMasterSupplier > xHandoutSupp( GetSdImport().GetModel(), uno::UNO_QUERY ); |
| if( xHandoutSupp.is() ) |
| { |
| uno::Reference< drawing::XShapes > xHandoutPage( xHandoutSupp->getHandoutMasterPage(), uno::UNO_QUERY ); |
| if(xHandoutPage.is() && GetSdImport().GetShapeImport()->GetStylesContext()) |
| { |
| pContext = new SdXMLMasterPageContext(GetSdImport(), |
| nPrefix, rLocalName, xAttrList, xHandoutPage); |
| } |
| } |
| } |
| else if( (nPrefix == XML_NAMESPACE_DRAW )&& IsXMLToken( rLocalName, XML_LAYER_SET ) ) |
| { |
| pContext = new SdXMLLayerSetContext( GetImport(), nPrefix, rLocalName, xAttrList ); |
| } |
| |
| // call base class |
| if(!pContext) |
| pContext = SvXMLImportContext::CreateChildContext(nPrefix, rLocalName, xAttrList); |
| |
| return pContext; |
| } |
| |
| /////////////////////////////////////////////////////////////////////// |
| |
| SdXMLHeaderFooterDeclContext::SdXMLHeaderFooterDeclContext( SvXMLImport& rImport, sal_uInt16 nPrfx, |
| const ::rtl::OUString& rLName, |
| const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList ) |
| : SvXMLStyleContext( rImport, nPrfx, rLName, xAttrList ) |
| { |
| const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; |
| for(sal_Int16 i=0; i < nAttrCount; i++) |
| { |
| OUString aLocalName; |
| const OUString aValue( xAttrList->getValueByIndex(i) ); |
| sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName(xAttrList->getNameByIndex(i), &aLocalName); |
| |
| if( nPrefix == XML_NAMESPACE_PRESENTATION ) |
| { |
| if( IsXMLToken( aLocalName, XML_NAME ) ) |
| { |
| maStrName = aValue; |
| } |
| else if( IsXMLToken( aLocalName, XML_SOURCE ) ) |
| { |
| mbFixed = IsXMLToken( aValue, XML_FIXED ); |
| } |
| } |
| else if( nPrefix == XML_NAMESPACE_STYLE ) |
| { |
| if( IsXMLToken( aLocalName, XML_DATA_STYLE_NAME ) ) |
| { |
| maStrDateTimeFormat = aValue; |
| } |
| } |
| } |
| } |
| |
| sal_Bool SdXMLHeaderFooterDeclContext::IsTransient() const |
| { |
| return sal_True; |
| } |
| |
| void SdXMLHeaderFooterDeclContext::EndElement() |
| { |
| SdXMLImport& rImport = *dynamic_cast< SdXMLImport* >( &GetImport() ); |
| if( IsXMLToken( GetLocalName(), XML_HEADER_DECL ) ) |
| { |
| rImport.AddHeaderDecl( maStrName, maStrText ); |
| } |
| else if( IsXMLToken( GetLocalName(), XML_FOOTER_DECL ) ) |
| { |
| rImport.AddFooterDecl( maStrName, maStrText ); |
| } |
| else if( IsXMLToken( GetLocalName(), XML_DATE_TIME_DECL ) ) |
| { |
| rImport.AddDateTimeDecl( maStrName, maStrText, mbFixed, maStrDateTimeFormat ); |
| } |
| } |
| |
| void SdXMLHeaderFooterDeclContext::Characters( const ::rtl::OUString& rChars ) |
| { |
| maStrText += rChars; |
| } |
| |