xmloff/inc/XMLTextHeaderFooterContext.hxx | 5 +- xmloff/inc/xmloff/XMLTextMasterPageContext.hxx | 7 ++ xmloff/inc/xmloff/XMLTextMasterPageExport.hxx | 4 + xmloff/inc/xmloff/txtimp.hxx | 2 xmloff/inc/xmloff/xmltoken.hxx | 2 xmloff/source/core/xmltoken.cxx | 2 xmloff/source/text/XMLTextHeaderFooterContext.cxx | 53 +++++++++++++++++----- xmloff/source/text/XMLTextMasterPageContext.cxx | 22 +++++++-- xmloff/source/text/XMLTextMasterPageExport.cxx | 50 ++++++++++++++++++++ xmloff/source/text/txtimp.cxx | 2 10 files changed, 131 insertions(+), 18 deletions(-)
New commits: commit 7ac60704206d229b45dd002ca3b9d70c4c64034e Author: Miklos Vajna <vmik...@suse.cz> Date: Thu Jul 5 11:37:26 2012 +0200 xmloff: implement first page header/footer import/export Change-Id: I920c236125ae044fe66cf0eacafdfc94ef81a4fd diff --git a/xmloff/inc/XMLTextHeaderFooterContext.hxx b/xmloff/inc/XMLTextHeaderFooterContext.hxx index 7a7c98f..73102fc 100644 --- a/xmloff/inc/XMLTextHeaderFooterContext.hxx +++ b/xmloff/inc/XMLTextHeaderFooterContext.hxx @@ -36,11 +36,14 @@ class XMLTextHeaderFooterContext: public SvXMLImportContext const ::rtl::OUString sOn; const ::rtl::OUString sShareContent; + const ::rtl::OUString sShareContentFirst; const ::rtl::OUString sText; + const ::rtl::OUString sTextFirst; const ::rtl::OUString sTextLeft; sal_Bool bInsertContent : 1; sal_Bool bLeft : 1; + sal_Bool bFirst : 1; public: TYPEINFO(); @@ -51,7 +54,7 @@ public: ::com::sun::star::xml::sax::XAttributeList > & xAttrList, const ::com::sun::star::uno::Reference < ::com::sun::star::beans::XPropertySet > & rPageStylePropSet, - sal_Bool bFooter, sal_Bool bLft ); + sal_Bool bFooter, sal_Bool bLft, sal_Bool bFrst ); virtual ~XMLTextHeaderFooterContext(); diff --git a/xmloff/inc/xmloff/XMLTextMasterPageContext.hxx b/xmloff/inc/xmloff/XMLTextMasterPageContext.hxx index ff4898f..16ae310 100644 --- a/xmloff/inc/xmloff/XMLTextMasterPageContext.hxx +++ b/xmloff/inc/xmloff/XMLTextMasterPageContext.hxx @@ -43,10 +43,14 @@ class XMLOFF_DLLPUBLIC XMLTextMasterPageContext : public SvXMLStyleContext sal_Bool bInsertFooter; sal_Bool bInsertHeaderLeft; sal_Bool bInsertFooterLeft; + sal_Bool bInsertHeaderFirst; + sal_Bool bInsertFooterFirst; sal_Bool bHeaderInserted; sal_Bool bFooterInserted; sal_Bool bHeaderLeftInserted; sal_Bool bFooterLeftInserted; + sal_Bool bHeaderFirstInserted; + sal_Bool bFooterFirstInserted; SAL_DLLPRIVATE ::com::sun::star::uno::Reference < ::com::sun::star::style::XStyle > Create(); @@ -74,7 +78,8 @@ public: const ::rtl::OUString& rLocalName, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > & xAttrList, const sal_Bool bFooter, - const sal_Bool bLeft ); + const sal_Bool bLeft, + const sal_Bool bFirst ); virtual void Finish( sal_Bool bOverwrite ); }; diff --git a/xmloff/inc/xmloff/XMLTextMasterPageExport.hxx b/xmloff/inc/xmloff/XMLTextMasterPageExport.hxx index d88b85f..02b2b6c 100644 --- a/xmloff/inc/xmloff/XMLTextMasterPageExport.hxx +++ b/xmloff/inc/xmloff/XMLTextMasterPageExport.hxx @@ -35,11 +35,15 @@ class XMLOFF_DLLPUBLIC XMLTextMasterPageExport : public XMLPageExport const ::rtl::OUString sHeaderText; const ::rtl::OUString sHeaderOn; const ::rtl::OUString sHeaderShareContent; + const ::rtl::OUString sHeaderShareContentFirst; + const ::rtl::OUString sHeaderTextFirst; const ::rtl::OUString sHeaderTextLeft; const ::rtl::OUString sFooterText; const ::rtl::OUString sFooterOn; const ::rtl::OUString sFooterShareContent; + const ::rtl::OUString sFooterShareContentFirst; + const ::rtl::OUString sFooterTextFirst; const ::rtl::OUString sFooterTextLeft; protected: diff --git a/xmloff/inc/xmloff/txtimp.hxx b/xmloff/inc/xmloff/txtimp.hxx index f364402..f01c0ec 100644 --- a/xmloff/inc/xmloff/txtimp.hxx +++ b/xmloff/inc/xmloff/txtimp.hxx @@ -343,6 +343,8 @@ enum XMLTextPageMasterElemTokens XML_TOK_TEXT_MP_FOOTER, XML_TOK_TEXT_MP_HEADER_LEFT, XML_TOK_TEXT_MP_FOOTER_LEFT, + XML_TOK_TEXT_MP_HEADER_FIRST, + XML_TOK_TEXT_MP_FOOTER_FIRST, XML_TOK_TEXT_MP_END=XML_TOK_UNKNOWN }; diff --git a/xmloff/inc/xmloff/xmltoken.hxx b/xmloff/inc/xmloff/xmltoken.hxx index e45091e..73dcd95 100644 --- a/xmloff/inc/xmloff/xmltoken.hxx +++ b/xmloff/inc/xmloff/xmltoken.hxx @@ -831,6 +831,7 @@ namespace xmloff { namespace token { XML_FONTWORK_START, XML_FONTWORK_STYLE, XML_FOOTER, + XML_FOOTER_FIRST, XML_FOOTER_LEFT, XML_FOOTER_STYLE, XML_FOOTNOTE, @@ -923,6 +924,7 @@ namespace xmloff { namespace token { XML_HATCHSTYLE_SINGLE, XML_HATCHSTYLE_TRIPLE, XML_HEADER, + XML_HEADER_FIRST, XML_HEADER_LEFT, XML_HEADER_STYLE, XML_HEADERS, diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx index 875d0d9..14c3fb1 100644 --- a/xmloff/source/core/xmltoken.cxx +++ b/xmloff/source/core/xmltoken.cxx @@ -835,6 +835,7 @@ namespace xmloff { namespace token { TOKEN( "fontwork-start", XML_FONTWORK_START ), TOKEN( "fontwork-style", XML_FONTWORK_STYLE ), TOKEN( "footer", XML_FOOTER ), + TOKEN( "footer-first", XML_FOOTER_FIRST ), TOKEN( "footer-left", XML_FOOTER_LEFT ), TOKEN( "footer-style", XML_FOOTER_STYLE ), TOKEN( "footnote", XML_FOOTNOTE ), @@ -927,6 +928,7 @@ namespace xmloff { namespace token { TOKEN( "single", XML_HATCHSTYLE_SINGLE ), TOKEN( "triple", XML_HATCHSTYLE_TRIPLE ), TOKEN( "header", XML_HEADER ), + TOKEN( "header-first", XML_HEADER_FIRST ), TOKEN( "header-left", XML_HEADER_LEFT ), TOKEN( "header-style", XML_HEADER_STYLE ), TOKEN( "headers", XML_HEADERS ), diff --git a/xmloff/source/text/XMLTextHeaderFooterContext.cxx b/xmloff/source/text/XMLTextHeaderFooterContext.cxx index 6c0c721..c69ff1e 100644 --- a/xmloff/source/text/XMLTextHeaderFooterContext.cxx +++ b/xmloff/source/text/XMLTextHeaderFooterContext.cxx @@ -52,19 +52,22 @@ XMLTextHeaderFooterContext::XMLTextHeaderFooterContext( SvXMLImport& rImport, sa const uno::Reference< xml::sax::XAttributeList > &, const Reference < XPropertySet > & rPageStylePropSet, - sal_Bool bFooter, sal_Bool bLft ) : + sal_Bool bFooter, sal_Bool bLft, sal_Bool bFrst ) : SvXMLImportContext( rImport, nPrfx, rLName ), xPropSet( rPageStylePropSet ), sOn( bFooter ? OUString(RTL_CONSTASCII_USTRINGPARAM( "FooterIsOn" )) : OUString(RTL_CONSTASCII_USTRINGPARAM( "HeaderIsOn" )) ), sShareContent( bFooter ? OUString(RTL_CONSTASCII_USTRINGPARAM( "FooterIsShared" )) : OUString(RTL_CONSTASCII_USTRINGPARAM( "HeaderIsShared" )) ), + sShareContentFirst( bFooter ? OUString("FooterIsSharedFirst" ) : OUString( "HeaderIsSharedFirst" ) ), sText( bFooter ? OUString(RTL_CONSTASCII_USTRINGPARAM( "FooterText" )) : OUString(RTL_CONSTASCII_USTRINGPARAM( "HeaderText" )) ), + sTextFirst(bFooter ? OUString("FooterTextFirst") : OUString("HeaderTextFirst")), sTextLeft( bFooter ? OUString(RTL_CONSTASCII_USTRINGPARAM( "FooterTextLeft" )) : OUString(RTL_CONSTASCII_USTRINGPARAM( "HeaderTextLeft" )) ), bInsertContent( sal_True ), - bLeft( bLft ) + bLeft( bLft ), + bFirst( bFrst ) { - if( bLeft ) + if( bLeft || bFirst ) { Any aAny; @@ -73,14 +76,29 @@ XMLTextHeaderFooterContext::XMLTextHeaderFooterContext( SvXMLImport& rImport, sa if( bOn ) { - aAny = xPropSet->getPropertyValue( sShareContent ); - sal_Bool bShared = *(sal_Bool *)aAny.getValue(); - if( bShared ) + if (bLeft) { - // Don't share headers any longer - bShared = sal_False; - aAny.setValue( &bShared, ::getBooleanCppuType() ); - xPropSet->setPropertyValue( sShareContent, aAny ); + aAny = xPropSet->getPropertyValue( sShareContent ); + sal_Bool bShared = *(sal_Bool *)aAny.getValue(); + if( bShared ) + { + // Don't share headers any longer + bShared = sal_False; + aAny.setValue( &bShared, ::getBooleanCppuType() ); + xPropSet->setPropertyValue( sShareContent, aAny ); + } + } + if (bFirst) + { + aAny = xPropSet->getPropertyValue( sShareContentFirst ); + sal_Bool bSharedFirst = *(sal_Bool *)aAny.getValue(); + if( bSharedFirst ) + { + // Don't share first/right headers any longer + bSharedFirst = sal_False; + aAny.setValue( &bSharedFirst, ::getBooleanCppuType() ); + xPropSet->setPropertyValue( sShareContentFirst, aAny ); + } } } else @@ -108,11 +126,14 @@ SvXMLImportContext *XMLTextHeaderFooterContext::CreateChildContext( { sal_Bool bRemoveContent = sal_True; Any aAny; - if( bLeft ) + if( bLeft || bFirst ) { // Headers and footers are switched on already, // and they aren't shared. - aAny = xPropSet->getPropertyValue( sTextLeft ); + if (bLeft) + aAny = xPropSet->getPropertyValue( sTextLeft ); + else + aAny = xPropSet->getPropertyValue( sTextFirst ); } else { @@ -140,6 +161,14 @@ SvXMLImportContext *XMLTextHeaderFooterContext::CreateChildContext( aAny.setValue( &bShared, ::getBooleanCppuType() ); xPropSet->setPropertyValue( sShareContent, aAny ); } + aAny = xPropSet->getPropertyValue( sShareContentFirst ); + sal_Bool bSharedFirst = *(sal_Bool *)aAny.getValue(); + if( !bSharedFirst ) + { + bSharedFirst = sal_True; + aAny.setValue( &bSharedFirst, ::getBooleanCppuType() ); + xPropSet->setPropertyValue( sShareContentFirst, aAny ); + } aAny = xPropSet->getPropertyValue( sText ); } diff --git a/xmloff/source/text/XMLTextMasterPageContext.cxx b/xmloff/source/text/XMLTextMasterPageContext.cxx index 1075079..fa4d2d6 100644 --- a/xmloff/source/text/XMLTextMasterPageContext.cxx +++ b/xmloff/source/text/XMLTextMasterPageContext.cxx @@ -83,10 +83,14 @@ XMLTextMasterPageContext::XMLTextMasterPageContext( SvXMLImport& rImport, , bInsertFooter( sal_False ) , bInsertHeaderLeft( sal_False ) , bInsertFooterLeft( sal_False ) +, bInsertHeaderFirst( sal_False ) +, bInsertFooterFirst( sal_False ) , bHeaderInserted( sal_False ) , bFooterInserted( sal_False ) , bHeaderLeftInserted( sal_False ) , bFooterLeftInserted( sal_False ) +, bHeaderFirstInserted( sal_False ) +, bFooterFirstInserted( sal_False ) { OUString sName, sDisplayName; sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; @@ -173,6 +177,7 @@ XMLTextMasterPageContext::XMLTextMasterPageContext( SvXMLImport& rImport, bInsertHeader = bInsertFooter = sal_True; bInsertHeaderLeft = bInsertFooterLeft = sal_True; + bInsertHeaderFirst = bInsertFooterFirst = sal_True; } } @@ -190,7 +195,7 @@ SvXMLImportContext *XMLTextMasterPageContext::CreateChildContext( const SvXMLTokenMap& rTokenMap = GetImport().GetTextImport()->GetTextMasterPageElemTokenMap(); - sal_Bool bInsert = sal_False, bFooter = sal_False, bLeft = sal_False; + sal_Bool bInsert = sal_False, bFooter = sal_False, bLeft = sal_False, bFirst = sal_False; switch( rTokenMap.Get( nPrefix, rLocalName ) ) { case XML_TOK_TEXT_MP_HEADER: @@ -215,13 +220,21 @@ SvXMLImportContext *XMLTextMasterPageContext::CreateChildContext( if( bInsertFooterLeft && bFooterInserted && !bFooterLeftInserted ) bInsert = bFooter = bLeft = sal_True; break; + case XML_TOK_TEXT_MP_HEADER_FIRST: + if( bInsertHeaderFirst && bHeaderInserted && !bHeaderFirstInserted ) + bInsert = bFirst = sal_True; + break; + case XML_TOK_TEXT_MP_FOOTER_FIRST: + if( bInsertFooterFirst && bFooterInserted && !bFooterFirstInserted ) + bInsert = bFooter = bFirst = sal_True; + break; } if( bInsert && xStyle.is() ) { pContext = CreateHeaderFooterContext( nPrefix, rLocalName, xAttrList, - bFooter, bLeft ); + bFooter, bLeft, bFirst ); } else { @@ -237,14 +250,15 @@ SvXMLImportContext *XMLTextMasterPageContext::CreateHeaderFooterContext( const ::rtl::OUString& rLocalName, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > & xAttrList, const sal_Bool bFooter, - const sal_Bool bLeft ) + const sal_Bool bLeft, + const sal_Bool bFirst ) { Reference < XPropertySet > xPropSet( xStyle, UNO_QUERY ); return new XMLTextHeaderFooterContext( GetImport(), nPrefix, rLocalName, xAttrList, xPropSet, - bFooter, bLeft ); + bFooter, bLeft, bFirst ); } void XMLTextMasterPageContext::Finish( sal_Bool bOverwrite ) diff --git a/xmloff/source/text/XMLTextMasterPageExport.cxx b/xmloff/source/text/XMLTextMasterPageExport.cxx index 71fccc1..2e0a3fe 100644 --- a/xmloff/source/text/XMLTextMasterPageExport.cxx +++ b/xmloff/source/text/XMLTextMasterPageExport.cxx @@ -40,10 +40,14 @@ XMLTextMasterPageExport::XMLTextMasterPageExport( SvXMLExport& rExp ) : sHeaderText( RTL_CONSTASCII_USTRINGPARAM( "HeaderText" ) ), sHeaderOn( RTL_CONSTASCII_USTRINGPARAM( "HeaderIsOn" ) ), sHeaderShareContent( RTL_CONSTASCII_USTRINGPARAM( "HeaderIsShared" ) ), + sHeaderShareContentFirst( "HeaderIsSharedFirst" ), + sHeaderTextFirst( "HeaderTextFirst" ), sHeaderTextLeft( RTL_CONSTASCII_USTRINGPARAM( "HeaderTextLeft" ) ), sFooterText( RTL_CONSTASCII_USTRINGPARAM( "FooterText" ) ), sFooterOn( RTL_CONSTASCII_USTRINGPARAM( "FooterIsOn" ) ), sFooterShareContent( RTL_CONSTASCII_USTRINGPARAM( "FooterIsShared" ) ), + sFooterShareContentFirst( "FooterIsSharedFirst" ), + sFooterTextFirst( "FooterTextFirst" ), sFooterTextLeft( RTL_CONSTASCII_USTRINGPARAM( "FooterTextLeft" ) ) { } @@ -86,6 +90,10 @@ void XMLTextMasterPageExport::exportMasterPageContent( aAny = rPropSet->getPropertyValue( sHeaderText ); aAny >>= xHeaderText; + Reference < XText > xHeaderTextFirst; + aAny = rPropSet->getPropertyValue( sHeaderTextFirst ); + aAny >>= xHeaderTextFirst; + Reference < XText > xHeaderTextLeft; aAny = rPropSet->getPropertyValue( sHeaderTextLeft ); aAny >>= xHeaderTextLeft; @@ -94,6 +102,10 @@ void XMLTextMasterPageExport::exportMasterPageContent( aAny = rPropSet->getPropertyValue( sFooterText ); aAny >>= xFooterText; + Reference < XText > xFooterTextFirst; + aAny = rPropSet->getPropertyValue( sFooterTextFirst ); + aAny >>= xFooterTextFirst; + Reference < XText > xFooterTextLeft; aAny = rPropSet->getPropertyValue( sFooterTextLeft ); aAny >>= xFooterTextLeft; @@ -102,10 +114,14 @@ void XMLTextMasterPageExport::exportMasterPageContent( { if( xHeaderText.is() ) exportHeaderFooterContent( xHeaderText, sal_True ); + if( xHeaderTextFirst.is() && xHeaderTextFirst != xHeaderText ) + exportHeaderFooterContent( xHeaderTextFirst, sal_True ); if( xHeaderTextLeft.is() && xHeaderTextLeft != xHeaderText ) exportHeaderFooterContent( xHeaderTextLeft, sal_True ); if( xFooterText.is() ) exportHeaderFooterContent( xFooterText, sal_True ); + if( xFooterTextFirst.is() && xFooterTextFirst != xFooterText ) + exportHeaderFooterContent( xFooterTextFirst, sal_True ); if( xFooterTextLeft.is() && xFooterTextLeft != xFooterText ) exportHeaderFooterContent( xFooterTextLeft, sal_True ); } @@ -114,6 +130,13 @@ void XMLTextMasterPageExport::exportMasterPageContent( aAny = rPropSet->getPropertyValue( sHeaderOn ); sal_Bool bHeader = *(sal_Bool *)aAny.getValue(); + sal_Bool bHeaderFirst = sal_False; + if( bHeader ) + { + aAny = rPropSet->getPropertyValue( sHeaderShareContentFirst ); + bHeaderFirst = !*(sal_Bool *)aAny.getValue(); + } + sal_Bool bHeaderLeft = sal_False; if( bHeader ) { @@ -131,6 +154,16 @@ void XMLTextMasterPageExport::exportMasterPageContent( exportHeaderFooterContent( xHeaderText, sal_False ); } + if( xHeaderTextFirst.is() && xHeaderTextFirst != xHeaderText ) + { + if( !bHeaderFirst ) + GetExport().AddAttribute( XML_NAMESPACE_STYLE, + XML_DISPLAY, XML_FALSE ); + SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_STYLE, + XML_HEADER_FIRST, sal_True, sal_True ); + exportHeaderFooterContent( xHeaderTextFirst, sal_False ); + } + if( xHeaderTextLeft.is() && xHeaderTextLeft != xHeaderText ) { if( !bHeaderLeft ) @@ -144,6 +177,13 @@ void XMLTextMasterPageExport::exportMasterPageContent( aAny = rPropSet->getPropertyValue( sFooterOn ); sal_Bool bFooter = *(sal_Bool *)aAny.getValue(); + sal_Bool bFooterFirst = sal_False; + if( bFooter ) + { + aAny = rPropSet->getPropertyValue( sFooterShareContentFirst ); + bFooterFirst = !*(sal_Bool *)aAny.getValue(); + } + sal_Bool bFooterLeft = sal_False; if( bFooter ) { @@ -161,6 +201,16 @@ void XMLTextMasterPageExport::exportMasterPageContent( exportHeaderFooterContent( xFooterText, sal_False ); } + if( xFooterTextFirst.is() && xFooterTextFirst != xFooterText ) + { + if( !bFooterFirst ) + GetExport().AddAttribute( XML_NAMESPACE_STYLE, + XML_DISPLAY, XML_FALSE ); + SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_STYLE, + XML_FOOTER_FIRST, sal_True, sal_True ); + exportHeaderFooterContent( xFooterTextFirst, sal_False ); + } + if( xFooterTextLeft.is() && xFooterTextLeft != xFooterText ) { if( !bFooterLeft ) diff --git a/xmloff/source/text/txtimp.cxx b/xmloff/source/text/txtimp.cxx index 1139501..d80ed05 100644 --- a/xmloff/source/text/txtimp.cxx +++ b/xmloff/source/text/txtimp.cxx @@ -438,6 +438,8 @@ static SvXMLTokenMapEntry aTextMasterPageElemTokenMap[] = { XML_NAMESPACE_STYLE, XML_FOOTER, XML_TOK_TEXT_MP_FOOTER }, { XML_NAMESPACE_STYLE, XML_HEADER_LEFT, XML_TOK_TEXT_MP_HEADER_LEFT }, { XML_NAMESPACE_STYLE, XML_FOOTER_LEFT, XML_TOK_TEXT_MP_FOOTER_LEFT }, + { XML_NAMESPACE_STYLE, XML_HEADER_FIRST, XML_TOK_TEXT_MP_HEADER_FIRST }, + { XML_NAMESPACE_STYLE, XML_FOOTER_FIRST, XML_TOK_TEXT_MP_FOOTER_FIRST }, XML_TOKEN_MAP_END }; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits