summaryrefslogtreecommitdiff
path: root/xmloff/source
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@suse.cz>2012-07-05 11:37:26 +0200
committerMiklos Vajna <vmiklos@suse.cz>2012-07-05 11:39:51 +0200
commit7ac60704206d229b45dd002ca3b9d70c4c64034e (patch)
tree2400312478b98c0f34f8a41a1a6857d86b77be96 /xmloff/source
parentc3dc9a3ef3cb9bc28051ef11d8b7fa5afaf819ef (diff)
xmloff: implement first page header/footer import/export
Change-Id: I920c236125ae044fe66cf0eacafdfc94ef81a4fd
Diffstat (limited to 'xmloff/source')
-rw-r--r--xmloff/source/core/xmltoken.cxx2
-rw-r--r--xmloff/source/text/XMLTextHeaderFooterContext.cxx53
-rw-r--r--xmloff/source/text/XMLTextMasterPageContext.cxx22
-rw-r--r--xmloff/source/text/XMLTextMasterPageExport.cxx50
-rw-r--r--xmloff/source/text/txtimp.cxx2
5 files changed, 113 insertions, 16 deletions
diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx
index 875d0d933fb9..14c3fb1d959e 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 6c0c7210ea71..c69ff1eb6e7b 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 1075079e1143..fa4d2d65275f 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 71fccc105ad5..2e0a3fed1cf4 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 11395016a4af..d80ed05f743b 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
};