1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_xmloff.hxx"
26*b1cdbd2cSJim Jagielski #include "PageMasterExportPropMapper.hxx"
27*b1cdbd2cSJim Jagielski #include <xmloff/xmltoken.hxx>
28*b1cdbd2cSJim Jagielski #include <comphelper/types.hxx>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/table/BorderLine.hpp>
30*b1cdbd2cSJim Jagielski #include <xmloff/PageMasterStyleMap.hxx>
31*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
32*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
33*b1cdbd2cSJim Jagielski #include <comphelper/extract.hxx>
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
36*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
37*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
38*b1cdbd2cSJim Jagielski using namespace ::comphelper;
39*b1cdbd2cSJim Jagielski using namespace ::xmloff::token;
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski //______________________________________________________________________________
43*b1cdbd2cSJim Jagielski 
lcl_HasSameLineWidth(const table::BorderLine & rLine1,const table::BorderLine & rLine2)44*b1cdbd2cSJim Jagielski inline sal_Bool lcl_HasSameLineWidth( const table::BorderLine& rLine1, const table::BorderLine& rLine2 )
45*b1cdbd2cSJim Jagielski {
46*b1cdbd2cSJim Jagielski 	return	(rLine1.InnerLineWidth == rLine2.InnerLineWidth) &&
47*b1cdbd2cSJim Jagielski 			(rLine1.OuterLineWidth == rLine2.OuterLineWidth) &&
48*b1cdbd2cSJim Jagielski 			(rLine1.LineDistance == rLine2.LineDistance);
49*b1cdbd2cSJim Jagielski }
50*b1cdbd2cSJim Jagielski 
operator ==(const table::BorderLine & rLine1,const table::BorderLine & rLine2)51*b1cdbd2cSJim Jagielski inline sal_Bool operator==( const table::BorderLine& rLine1, const table::BorderLine& rLine2 )
52*b1cdbd2cSJim Jagielski {
53*b1cdbd2cSJim Jagielski 	return	(rLine1.Color == rLine2.Color) &&
54*b1cdbd2cSJim Jagielski 			lcl_HasSameLineWidth( rLine1, rLine2 );
55*b1cdbd2cSJim Jagielski }
56*b1cdbd2cSJim Jagielski 
lcl_RemoveState(XMLPropertyState * pState)57*b1cdbd2cSJim Jagielski inline void lcl_RemoveState( XMLPropertyState* pState )
58*b1cdbd2cSJim Jagielski {
59*b1cdbd2cSJim Jagielski 	pState->mnIndex = -1;
60*b1cdbd2cSJim Jagielski 	pState->maValue.clear();
61*b1cdbd2cSJim Jagielski }
62*b1cdbd2cSJim Jagielski 
lcl_RemoveStateIfZero16(XMLPropertyState * pState)63*b1cdbd2cSJim Jagielski void lcl_RemoveStateIfZero16( XMLPropertyState* pState )
64*b1cdbd2cSJim Jagielski {
65*b1cdbd2cSJim Jagielski 	sal_Int16	nValue = sal_Int16();
66*b1cdbd2cSJim Jagielski 	if( (pState->maValue >>= nValue) && !nValue )
67*b1cdbd2cSJim Jagielski 		lcl_RemoveState( pState );
68*b1cdbd2cSJim Jagielski }
69*b1cdbd2cSJim Jagielski 
lcl_AddState(::std::vector<XMLPropertyState> & rPropState,sal_Int32 nIndex,const rtl::OUString & rProperty,uno::Reference<beans::XPropertySet> & xProps)70*b1cdbd2cSJim Jagielski void lcl_AddState(::std::vector< XMLPropertyState >& rPropState, sal_Int32 nIndex, const rtl::OUString& rProperty, uno::Reference< beans::XPropertySet >& xProps)
71*b1cdbd2cSJim Jagielski {
72*b1cdbd2cSJim Jagielski     if(::cppu::any2bool(xProps->getPropertyValue(rProperty)))
73*b1cdbd2cSJim Jagielski         rPropState.push_back(XMLPropertyState (nIndex, cppu::bool2any(sal_True)));
74*b1cdbd2cSJim Jagielski }
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski //______________________________________________________________________________
77*b1cdbd2cSJim Jagielski // helper struct to handle equal XMLPropertyState's for page, header and footer
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski struct XMLPropertyStateBuffer
80*b1cdbd2cSJim Jagielski {
81*b1cdbd2cSJim Jagielski     XMLPropertyState*       pPMMarginAll;
82*b1cdbd2cSJim Jagielski     XMLPropertyState*       pPMMarginTop;
83*b1cdbd2cSJim Jagielski     XMLPropertyState*       pPMMarginBottom;
84*b1cdbd2cSJim Jagielski     XMLPropertyState*       pPMMarginLeft;
85*b1cdbd2cSJim Jagielski     XMLPropertyState*       pPMMarginRight;
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMBorderAll;
88*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMBorderTop;
89*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMBorderBottom;
90*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMBorderLeft;
91*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMBorderRight;
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMBorderWidthAll;
94*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMBorderWidthTop;
95*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMBorderWidthBottom;
96*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMBorderWidthLeft;
97*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMBorderWidthRight;
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMPaddingAll;
100*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMPaddingTop;
101*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMPaddingBottom;
102*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMPaddingLeft;
103*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMPaddingRight;
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski 							XMLPropertyStateBuffer();
106*b1cdbd2cSJim Jagielski 	void					ContextFilter( ::std::vector< XMLPropertyState >& rPropState );
107*b1cdbd2cSJim Jagielski };
108*b1cdbd2cSJim Jagielski 
XMLPropertyStateBuffer()109*b1cdbd2cSJim Jagielski XMLPropertyStateBuffer::XMLPropertyStateBuffer()
110*b1cdbd2cSJim Jagielski     :   pPMMarginAll( NULL )
111*b1cdbd2cSJim Jagielski     ,   pPMMarginTop( NULL )
112*b1cdbd2cSJim Jagielski     ,   pPMMarginBottom( NULL )
113*b1cdbd2cSJim Jagielski     ,   pPMMarginLeft( NULL )
114*b1cdbd2cSJim Jagielski     ,   pPMMarginRight( NULL )
115*b1cdbd2cSJim Jagielski     ,
116*b1cdbd2cSJim Jagielski 		pPMBorderAll( NULL ),
117*b1cdbd2cSJim Jagielski 		pPMBorderTop( NULL ),
118*b1cdbd2cSJim Jagielski 		pPMBorderBottom( NULL ),
119*b1cdbd2cSJim Jagielski 		pPMBorderLeft( NULL ),
120*b1cdbd2cSJim Jagielski 		pPMBorderRight( NULL ),
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski 		pPMBorderWidthAll( NULL ),
123*b1cdbd2cSJim Jagielski 		pPMBorderWidthTop( NULL ),
124*b1cdbd2cSJim Jagielski 		pPMBorderWidthBottom( NULL ),
125*b1cdbd2cSJim Jagielski 		pPMBorderWidthLeft( NULL ),
126*b1cdbd2cSJim Jagielski 		pPMBorderWidthRight( NULL ),
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski 		pPMPaddingAll( NULL ),
129*b1cdbd2cSJim Jagielski 		pPMPaddingTop( NULL ),
130*b1cdbd2cSJim Jagielski 		pPMPaddingBottom( NULL ),
131*b1cdbd2cSJim Jagielski 		pPMPaddingLeft( NULL ),
132*b1cdbd2cSJim Jagielski 		pPMPaddingRight( NULL )
133*b1cdbd2cSJim Jagielski {
134*b1cdbd2cSJim Jagielski }
135*b1cdbd2cSJim Jagielski 
ContextFilter(::std::vector<XMLPropertyState> &)136*b1cdbd2cSJim Jagielski void XMLPropertyStateBuffer::ContextFilter( ::std::vector< XMLPropertyState >& )
137*b1cdbd2cSJim Jagielski {
138*b1cdbd2cSJim Jagielski     if (pPMMarginAll)
139*b1cdbd2cSJim Jagielski     {
140*b1cdbd2cSJim Jagielski         lcl_RemoveState(pPMMarginAll); // #i117696# do not write fo:margin
141*b1cdbd2cSJim Jagielski     }
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski 	if( pPMBorderAll )
144*b1cdbd2cSJim Jagielski 	{
145*b1cdbd2cSJim Jagielski 		if( pPMBorderTop && pPMBorderBottom && pPMBorderLeft && pPMBorderRight )
146*b1cdbd2cSJim Jagielski 		{
147*b1cdbd2cSJim Jagielski 			table::BorderLine aLineTop, aLineBottom, aLineLeft, aLineRight;
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski 			pPMBorderTop->maValue >>= aLineTop;
150*b1cdbd2cSJim Jagielski 			pPMBorderBottom->maValue >>= aLineBottom;
151*b1cdbd2cSJim Jagielski 			pPMBorderLeft->maValue >>= aLineLeft;
152*b1cdbd2cSJim Jagielski 			pPMBorderRight->maValue >>= aLineRight;
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski 			if( (aLineTop == aLineBottom) && (aLineBottom == aLineLeft) && (aLineLeft == aLineRight) )
155*b1cdbd2cSJim Jagielski 			{
156*b1cdbd2cSJim Jagielski 				lcl_RemoveState( pPMBorderTop );
157*b1cdbd2cSJim Jagielski 				lcl_RemoveState( pPMBorderBottom );
158*b1cdbd2cSJim Jagielski 				lcl_RemoveState( pPMBorderLeft );
159*b1cdbd2cSJim Jagielski 				lcl_RemoveState( pPMBorderRight );
160*b1cdbd2cSJim Jagielski 			}
161*b1cdbd2cSJim Jagielski 			else
162*b1cdbd2cSJim Jagielski 				lcl_RemoveState( pPMBorderAll );
163*b1cdbd2cSJim Jagielski 		}
164*b1cdbd2cSJim Jagielski 		else
165*b1cdbd2cSJim Jagielski 			lcl_RemoveState( pPMBorderAll );
166*b1cdbd2cSJim Jagielski 	}
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski 	if( pPMBorderWidthAll )
169*b1cdbd2cSJim Jagielski 	{
170*b1cdbd2cSJim Jagielski 		if( pPMBorderWidthTop && pPMBorderWidthBottom && pPMBorderWidthLeft && pPMBorderWidthRight )
171*b1cdbd2cSJim Jagielski 		{
172*b1cdbd2cSJim Jagielski 			table::BorderLine aLineTop, aLineBottom, aLineLeft, aLineRight;
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski 			pPMBorderWidthTop->maValue >>= aLineTop;
175*b1cdbd2cSJim Jagielski 			pPMBorderWidthBottom->maValue >>= aLineBottom;
176*b1cdbd2cSJim Jagielski 			pPMBorderWidthLeft->maValue >>= aLineLeft;
177*b1cdbd2cSJim Jagielski 			pPMBorderWidthRight->maValue >>= aLineRight;
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski 			if( lcl_HasSameLineWidth( aLineTop, aLineBottom ) &&
180*b1cdbd2cSJim Jagielski 				lcl_HasSameLineWidth( aLineBottom, aLineLeft ) &&
181*b1cdbd2cSJim Jagielski 				lcl_HasSameLineWidth( aLineLeft, aLineRight ) )
182*b1cdbd2cSJim Jagielski 			{
183*b1cdbd2cSJim Jagielski 				lcl_RemoveState( pPMBorderWidthTop );
184*b1cdbd2cSJim Jagielski 				lcl_RemoveState( pPMBorderWidthBottom );
185*b1cdbd2cSJim Jagielski 				lcl_RemoveState( pPMBorderWidthLeft );
186*b1cdbd2cSJim Jagielski 				lcl_RemoveState( pPMBorderWidthRight );
187*b1cdbd2cSJim Jagielski 			}
188*b1cdbd2cSJim Jagielski 			else
189*b1cdbd2cSJim Jagielski 				lcl_RemoveState( pPMBorderWidthAll );
190*b1cdbd2cSJim Jagielski 		}
191*b1cdbd2cSJim Jagielski 		else
192*b1cdbd2cSJim Jagielski 			lcl_RemoveState( pPMBorderWidthAll );
193*b1cdbd2cSJim Jagielski 	}
194*b1cdbd2cSJim Jagielski 
195*b1cdbd2cSJim Jagielski 	if( pPMPaddingAll )
196*b1cdbd2cSJim Jagielski 	{
197*b1cdbd2cSJim Jagielski 		if( pPMPaddingTop && pPMPaddingBottom && pPMPaddingLeft && pPMPaddingRight )
198*b1cdbd2cSJim Jagielski 		{
199*b1cdbd2cSJim Jagielski 			sal_Int32 nTop = 0, nBottom = 0, nLeft = 0, nRight = 0;
200*b1cdbd2cSJim Jagielski 
201*b1cdbd2cSJim Jagielski 			pPMPaddingTop->maValue >>= nTop;
202*b1cdbd2cSJim Jagielski 			pPMPaddingBottom->maValue >>= nBottom;
203*b1cdbd2cSJim Jagielski 			pPMPaddingLeft->maValue >>= nLeft;
204*b1cdbd2cSJim Jagielski 			pPMPaddingRight->maValue >>= nRight;
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski 			if( (nTop == nBottom) && (nBottom == nLeft) && (nLeft == nRight) )
207*b1cdbd2cSJim Jagielski 			{
208*b1cdbd2cSJim Jagielski 				lcl_RemoveState( pPMPaddingTop );
209*b1cdbd2cSJim Jagielski 				lcl_RemoveState( pPMPaddingBottom );
210*b1cdbd2cSJim Jagielski 				lcl_RemoveState( pPMPaddingLeft );
211*b1cdbd2cSJim Jagielski 				lcl_RemoveState( pPMPaddingRight );
212*b1cdbd2cSJim Jagielski 			}
213*b1cdbd2cSJim Jagielski 			else
214*b1cdbd2cSJim Jagielski 				lcl_RemoveState( pPMPaddingAll );
215*b1cdbd2cSJim Jagielski 		}
216*b1cdbd2cSJim Jagielski 		else
217*b1cdbd2cSJim Jagielski 			lcl_RemoveState( pPMPaddingAll );
218*b1cdbd2cSJim Jagielski 	}
219*b1cdbd2cSJim Jagielski }
220*b1cdbd2cSJim Jagielski 
221*b1cdbd2cSJim Jagielski //______________________________________________________________________________
222*b1cdbd2cSJim Jagielski 
XMLPageMasterExportPropMapper(const UniReference<XMLPropertySetMapper> & rMapper,SvXMLExport & rExport)223*b1cdbd2cSJim Jagielski XMLPageMasterExportPropMapper::XMLPageMasterExportPropMapper(
224*b1cdbd2cSJim Jagielski 		const UniReference< XMLPropertySetMapper >& rMapper,
225*b1cdbd2cSJim Jagielski 		SvXMLExport& rExport ) :
226*b1cdbd2cSJim Jagielski 	SvXMLExportPropertyMapper( rMapper ),
227*b1cdbd2cSJim Jagielski 	aBackgroundImageExport( rExport ),
228*b1cdbd2cSJim Jagielski 	aTextColumnsExport( rExport ),
229*b1cdbd2cSJim Jagielski 	aFootnoteSeparatorExport( rExport )
230*b1cdbd2cSJim Jagielski {
231*b1cdbd2cSJim Jagielski }
232*b1cdbd2cSJim Jagielski 
~XMLPageMasterExportPropMapper()233*b1cdbd2cSJim Jagielski XMLPageMasterExportPropMapper::~XMLPageMasterExportPropMapper()
234*b1cdbd2cSJim Jagielski {
235*b1cdbd2cSJim Jagielski }
236*b1cdbd2cSJim Jagielski 
handleElementItem(SvXMLExport &,const XMLPropertyState & rProperty,sal_uInt16,const::std::vector<XMLPropertyState> * pProperties,sal_uInt32 nIdx) const237*b1cdbd2cSJim Jagielski void XMLPageMasterExportPropMapper::handleElementItem(
238*b1cdbd2cSJim Jagielski         SvXMLExport&,
239*b1cdbd2cSJim Jagielski 		const XMLPropertyState& rProperty,
240*b1cdbd2cSJim Jagielski 		sal_uInt16 /*nFlags*/,
241*b1cdbd2cSJim Jagielski 		const ::std::vector< XMLPropertyState >* pProperties,
242*b1cdbd2cSJim Jagielski 		sal_uInt32 nIdx ) const
243*b1cdbd2cSJim Jagielski {
244*b1cdbd2cSJim Jagielski 	XMLPageMasterExportPropMapper* pThis = (XMLPageMasterExportPropMapper*) this;
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski 	sal_uInt32 nContextId = getPropertySetMapper()->GetEntryContextId( rProperty.mnIndex );
247*b1cdbd2cSJim Jagielski 	switch( nContextId )
248*b1cdbd2cSJim Jagielski 	{
249*b1cdbd2cSJim Jagielski 		case CTF_PM_GRAPHICURL:
250*b1cdbd2cSJim Jagielski 		case CTF_PM_HEADERGRAPHICURL:
251*b1cdbd2cSJim Jagielski 		case CTF_PM_FOOTERGRAPHICURL:
252*b1cdbd2cSJim Jagielski 			{
253*b1cdbd2cSJim Jagielski 				DBG_ASSERT( pProperties && (nIdx >= 2), "property vector missing" );
254*b1cdbd2cSJim Jagielski 				sal_Int32 nPos;
255*b1cdbd2cSJim Jagielski 				sal_Int32 nFilter;
256*b1cdbd2cSJim Jagielski 				switch( nContextId  )
257*b1cdbd2cSJim Jagielski 				{
258*b1cdbd2cSJim Jagielski 				case CTF_PM_GRAPHICURL:
259*b1cdbd2cSJim Jagielski 					nPos = CTF_PM_GRAPHICPOSITION;
260*b1cdbd2cSJim Jagielski 					nFilter = CTF_PM_GRAPHICFILTER;
261*b1cdbd2cSJim Jagielski 					break;
262*b1cdbd2cSJim Jagielski 				case CTF_PM_HEADERGRAPHICURL:
263*b1cdbd2cSJim Jagielski 					nPos = CTF_PM_HEADERGRAPHICPOSITION;
264*b1cdbd2cSJim Jagielski 					nFilter = CTF_PM_HEADERGRAPHICFILTER;
265*b1cdbd2cSJim Jagielski 					break;
266*b1cdbd2cSJim Jagielski 				case CTF_PM_FOOTERGRAPHICURL:
267*b1cdbd2cSJim Jagielski 					nPos = CTF_PM_FOOTERGRAPHICPOSITION;
268*b1cdbd2cSJim Jagielski 					nFilter = CTF_PM_FOOTERGRAPHICFILTER;
269*b1cdbd2cSJim Jagielski 					break;
270*b1cdbd2cSJim Jagielski 				default:
271*b1cdbd2cSJim Jagielski 					nPos = 0;  // TODO What values should this be?
272*b1cdbd2cSJim Jagielski 					nFilter = 0;
273*b1cdbd2cSJim Jagielski 				}
274*b1cdbd2cSJim Jagielski 				const Any*	pPos	= NULL;
275*b1cdbd2cSJim Jagielski 				const Any*	pFilter	= NULL;
276*b1cdbd2cSJim Jagielski 				if( pProperties && (nIdx >= 2) )
277*b1cdbd2cSJim Jagielski 				{
278*b1cdbd2cSJim Jagielski 					const XMLPropertyState& rPos = (*pProperties)[nIdx - 2];
279*b1cdbd2cSJim Jagielski 					DBG_ASSERT( getPropertySetMapper()->GetEntryContextId( rPos.mnIndex ) == nPos,
280*b1cdbd2cSJim Jagielski 								"invalid property map: pos expected" );
281*b1cdbd2cSJim Jagielski 					if( getPropertySetMapper()->GetEntryContextId( rPos.mnIndex ) == nPos )
282*b1cdbd2cSJim Jagielski 						pPos = &rPos.maValue;
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski 					const XMLPropertyState& rFilter = (*pProperties)[nIdx - 1];
285*b1cdbd2cSJim Jagielski 					DBG_ASSERT( getPropertySetMapper()->GetEntryContextId( rFilter.mnIndex ) == nFilter,
286*b1cdbd2cSJim Jagielski 								"invalid property map: filter expected" );
287*b1cdbd2cSJim Jagielski 					if( getPropertySetMapper()->GetEntryContextId( rFilter.mnIndex ) == nFilter )
288*b1cdbd2cSJim Jagielski 						pFilter = &rFilter.maValue;
289*b1cdbd2cSJim Jagielski 				}
290*b1cdbd2cSJim Jagielski 				sal_uInt32 nPropIndex = rProperty.mnIndex;
291*b1cdbd2cSJim Jagielski 				pThis->aBackgroundImageExport.exportXML( rProperty.maValue, pPos, pFilter, NULL,
292*b1cdbd2cSJim Jagielski 					getPropertySetMapper()->GetEntryNameSpace( nPropIndex ),
293*b1cdbd2cSJim Jagielski 					getPropertySetMapper()->GetEntryXMLName( nPropIndex ) );
294*b1cdbd2cSJim Jagielski 			}
295*b1cdbd2cSJim Jagielski 			break;
296*b1cdbd2cSJim Jagielski 		case CTF_PM_TEXTCOLUMNS:
297*b1cdbd2cSJim Jagielski 			pThis->aTextColumnsExport.exportXML( rProperty.maValue );
298*b1cdbd2cSJim Jagielski 			break;
299*b1cdbd2cSJim Jagielski 		case CTF_PM_FTN_LINE_WEIGTH:
300*b1cdbd2cSJim Jagielski 			pThis->aFootnoteSeparatorExport.exportXML( pProperties, nIdx,
301*b1cdbd2cSJim Jagielski 													   getPropertySetMapper());
302*b1cdbd2cSJim Jagielski 			break;
303*b1cdbd2cSJim Jagielski 	}
304*b1cdbd2cSJim Jagielski }
305*b1cdbd2cSJim Jagielski 
handleSpecialItem(SvXMLAttributeList &,const XMLPropertyState &,const SvXMLUnitConverter &,const SvXMLNamespaceMap &,const::std::vector<XMLPropertyState> *,sal_uInt32) const306*b1cdbd2cSJim Jagielski void XMLPageMasterExportPropMapper::handleSpecialItem(
307*b1cdbd2cSJim Jagielski 		SvXMLAttributeList&,
308*b1cdbd2cSJim Jagielski 		const XMLPropertyState&,
309*b1cdbd2cSJim Jagielski 		const SvXMLUnitConverter&,
310*b1cdbd2cSJim Jagielski 		const SvXMLNamespaceMap&,
311*b1cdbd2cSJim Jagielski 		const ::std::vector< XMLPropertyState >*,
312*b1cdbd2cSJim Jagielski 		sal_uInt32 /*nIdx*/) const
313*b1cdbd2cSJim Jagielski {
314*b1cdbd2cSJim Jagielski }
315*b1cdbd2cSJim Jagielski 
ContextFilter(::std::vector<XMLPropertyState> & rPropState,Reference<XPropertySet> rPropSet) const316*b1cdbd2cSJim Jagielski void XMLPageMasterExportPropMapper::ContextFilter(
317*b1cdbd2cSJim Jagielski 		::std::vector< XMLPropertyState >& rPropState,
318*b1cdbd2cSJim Jagielski 		Reference< XPropertySet > rPropSet ) const
319*b1cdbd2cSJim Jagielski {
320*b1cdbd2cSJim Jagielski 	XMLPropertyStateBuffer	aPageBuffer;
321*b1cdbd2cSJim Jagielski 	XMLPropertyStateBuffer	aHeaderBuffer;
322*b1cdbd2cSJim Jagielski 	XMLPropertyStateBuffer	aFooterBuffer;
323*b1cdbd2cSJim Jagielski 
324*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMHeaderHeight		= NULL;
325*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMHeaderMinHeight	= NULL;
326*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMHeaderDynamic	= NULL;
327*b1cdbd2cSJim Jagielski 
328*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMFooterHeight		= NULL;
329*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMFooterMinHeight	= NULL;
330*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMFooterDynamic	= NULL;
331*b1cdbd2cSJim Jagielski 
332*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMScaleTo			= NULL;
333*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMScaleToPages		= NULL;
334*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMScaleToX 		= NULL;
335*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMScaleToY	    	= NULL;
336*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMStandardMode    	= NULL;
337*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMGridBaseWidth   	= NULL;
338*b1cdbd2cSJim Jagielski 	XMLPropertyState*		pPMGridSnapToChars 	= NULL;
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski     XMLPropertyState*       pPrint              = NULL;
341*b1cdbd2cSJim Jagielski 
342*b1cdbd2cSJim Jagielski     UniReference < XMLPropertySetMapper > aPropMapper(getPropertySetMapper());
343*b1cdbd2cSJim Jagielski 
344*b1cdbd2cSJim Jagielski 	for( ::std::vector< XMLPropertyState >::iterator aIter = rPropState.begin(); aIter != rPropState.end(); ++aIter )
345*b1cdbd2cSJim Jagielski 	{
346*b1cdbd2cSJim Jagielski         XMLPropertyState *pProp = &(*aIter);
347*b1cdbd2cSJim Jagielski 		sal_Int16 nContextId	= aPropMapper->GetEntryContextId( pProp->mnIndex );
348*b1cdbd2cSJim Jagielski 		sal_Int16 nFlag			= nContextId & CTF_PM_FLAGMASK;
349*b1cdbd2cSJim Jagielski 		sal_Int16 nSimpleId		= nContextId & (~CTF_PM_FLAGMASK | XML_PM_CTF_START);
350*b1cdbd2cSJim Jagielski         sal_Int16 nPrintId      = nContextId & CTF_PM_PRINTMASK;
351*b1cdbd2cSJim Jagielski 
352*b1cdbd2cSJim Jagielski 		XMLPropertyStateBuffer* pBuffer;
353*b1cdbd2cSJim Jagielski 		switch( nFlag )
354*b1cdbd2cSJim Jagielski 		{
355*b1cdbd2cSJim Jagielski 			case CTF_PM_HEADERFLAG:			pBuffer = &aHeaderBuffer;	break;
356*b1cdbd2cSJim Jagielski 			case CTF_PM_FOOTERFLAG:			pBuffer = &aFooterBuffer;	break;
357*b1cdbd2cSJim Jagielski 			default:						pBuffer = &aPageBuffer;		break;
358*b1cdbd2cSJim Jagielski 		}
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski 		switch( nSimpleId )
361*b1cdbd2cSJim Jagielski 		{
362*b1cdbd2cSJim Jagielski             case CTF_PM_MARGINALL:          pBuffer->pPMMarginAll           = pProp;    break;
363*b1cdbd2cSJim Jagielski             case CTF_PM_MARGINTOP:          pBuffer->pPMMarginTop           = pProp;    break;
364*b1cdbd2cSJim Jagielski             case CTF_PM_MARGINBOTTOM:       pBuffer->pPMMarginBottom        = pProp;    break;
365*b1cdbd2cSJim Jagielski             case CTF_PM_MARGINLEFT:         pBuffer->pPMMarginLeft          = pProp;    break;
366*b1cdbd2cSJim Jagielski             case CTF_PM_MARGINRIGHT:        pBuffer->pPMMarginRight         = pProp;    break;
367*b1cdbd2cSJim Jagielski 			case CTF_PM_BORDERALL:			pBuffer->pPMBorderAll			= pProp;	break;
368*b1cdbd2cSJim Jagielski 			case CTF_PM_BORDERTOP:			pBuffer->pPMBorderTop			= pProp;	break;
369*b1cdbd2cSJim Jagielski 			case CTF_PM_BORDERBOTTOM:		pBuffer->pPMBorderBottom		= pProp;	break;
370*b1cdbd2cSJim Jagielski 			case CTF_PM_BORDERLEFT:			pBuffer->pPMBorderLeft			= pProp;	break;
371*b1cdbd2cSJim Jagielski 			case CTF_PM_BORDERRIGHT:		pBuffer->pPMBorderRight			= pProp;	break;
372*b1cdbd2cSJim Jagielski 			case CTF_PM_BORDERWIDTHALL:		pBuffer->pPMBorderWidthAll		= pProp;	break;
373*b1cdbd2cSJim Jagielski 			case CTF_PM_BORDERWIDTHTOP:		pBuffer->pPMBorderWidthTop		= pProp;	break;
374*b1cdbd2cSJim Jagielski 			case CTF_PM_BORDERWIDTHBOTTOM:	pBuffer->pPMBorderWidthBottom	= pProp;	break;
375*b1cdbd2cSJim Jagielski 			case CTF_PM_BORDERWIDTHLEFT:	pBuffer->pPMBorderWidthLeft		= pProp;	break;
376*b1cdbd2cSJim Jagielski 			case CTF_PM_BORDERWIDTHRIGHT:	pBuffer->pPMBorderWidthRight	= pProp;	break;
377*b1cdbd2cSJim Jagielski 			case CTF_PM_PADDINGALL:			pBuffer->pPMPaddingAll			= pProp;	break;
378*b1cdbd2cSJim Jagielski 			case CTF_PM_PADDINGTOP:			pBuffer->pPMPaddingTop			= pProp;	break;
379*b1cdbd2cSJim Jagielski 			case CTF_PM_PADDINGBOTTOM:		pBuffer->pPMPaddingBottom		= pProp;	break;
380*b1cdbd2cSJim Jagielski 			case CTF_PM_PADDINGLEFT:		pBuffer->pPMPaddingLeft			= pProp;	break;
381*b1cdbd2cSJim Jagielski 			case CTF_PM_PADDINGRIGHT:		pBuffer->pPMPaddingRight		= pProp;	break;
382*b1cdbd2cSJim Jagielski 		}
383*b1cdbd2cSJim Jagielski 
384*b1cdbd2cSJim Jagielski 		switch( nContextId )
385*b1cdbd2cSJim Jagielski 		{
386*b1cdbd2cSJim Jagielski 			case CTF_PM_HEADERHEIGHT:		pPMHeaderHeight		= pProp;	break;
387*b1cdbd2cSJim Jagielski 			case CTF_PM_HEADERMINHEIGHT:	pPMHeaderMinHeight	= pProp;	break;
388*b1cdbd2cSJim Jagielski 			case CTF_PM_HEADERDYNAMIC:		pPMHeaderDynamic	= pProp;	break;
389*b1cdbd2cSJim Jagielski 			case CTF_PM_FOOTERHEIGHT:		pPMFooterHeight		= pProp;	break;
390*b1cdbd2cSJim Jagielski 			case CTF_PM_FOOTERMINHEIGHT:	pPMFooterMinHeight	= pProp;	break;
391*b1cdbd2cSJim Jagielski 			case CTF_PM_FOOTERDYNAMIC:		pPMFooterDynamic	= pProp;	break;
392*b1cdbd2cSJim Jagielski 			case CTF_PM_SCALETO:			pPMScaleTo			= pProp;	break;
393*b1cdbd2cSJim Jagielski 			case CTF_PM_SCALETOPAGES:		pPMScaleToPages		= pProp;	break;
394*b1cdbd2cSJim Jagielski             case CTF_PM_SCALETOX:   		pPMScaleToX 		= pProp;	break;
395*b1cdbd2cSJim Jagielski             case CTF_PM_SCALETOY:   		pPMScaleToY 		= pProp;	break;
396*b1cdbd2cSJim Jagielski             case CTF_PM_STANDARD_MODE:		pPMStandardMode		= pProp;	break;
397*b1cdbd2cSJim Jagielski             case CTP_PM_GRID_BASE_WIDTH:		pPMGridBaseWidth	= pProp;	break;
398*b1cdbd2cSJim Jagielski             case CTP_PM_GRID_SNAP_TO_CHARS:		pPMGridSnapToChars	= pProp;	break;
399*b1cdbd2cSJim Jagielski 		}
400*b1cdbd2cSJim Jagielski         if (nPrintId == CTF_PM_PRINTMASK)
401*b1cdbd2cSJim Jagielski         {
402*b1cdbd2cSJim Jagielski             pPrint = pProp;
403*b1cdbd2cSJim Jagielski             lcl_RemoveState(pPrint);
404*b1cdbd2cSJim Jagielski         }
405*b1cdbd2cSJim Jagielski 	}
406*b1cdbd2cSJim Jagielski 
407*b1cdbd2cSJim Jagielski 	if( pPMStandardMode && !getBOOL(pPMStandardMode->maValue) )
408*b1cdbd2cSJim Jagielski 	{
409*b1cdbd2cSJim Jagielski 		lcl_RemoveState(pPMStandardMode);
410*b1cdbd2cSJim Jagielski 		if( pPMGridBaseWidth )
411*b1cdbd2cSJim Jagielski 			lcl_RemoveState(pPMGridBaseWidth);
412*b1cdbd2cSJim Jagielski 		if( pPMGridSnapToChars )
413*b1cdbd2cSJim Jagielski 			lcl_RemoveState(pPMGridSnapToChars);
414*b1cdbd2cSJim Jagielski 	}
415*b1cdbd2cSJim Jagielski 
416*b1cdbd2cSJim Jagielski 	if( pPMGridBaseWidth && pPMStandardMode )
417*b1cdbd2cSJim Jagielski 		lcl_RemoveState(pPMStandardMode);
418*b1cdbd2cSJim Jagielski 
419*b1cdbd2cSJim Jagielski 	aPageBuffer.ContextFilter( rPropState );
420*b1cdbd2cSJim Jagielski 	aHeaderBuffer.ContextFilter( rPropState );
421*b1cdbd2cSJim Jagielski 	aFooterBuffer.ContextFilter( rPropState );
422*b1cdbd2cSJim Jagielski 
423*b1cdbd2cSJim Jagielski 	if( pPMHeaderHeight && (!pPMHeaderDynamic || (pPMHeaderDynamic && getBOOL( pPMHeaderDynamic->maValue ))) )
424*b1cdbd2cSJim Jagielski 		lcl_RemoveState( pPMHeaderHeight );
425*b1cdbd2cSJim Jagielski 	if( pPMHeaderMinHeight && pPMHeaderDynamic && !getBOOL( pPMHeaderDynamic->maValue ) )
426*b1cdbd2cSJim Jagielski 		lcl_RemoveState( pPMHeaderMinHeight );
427*b1cdbd2cSJim Jagielski 	if( pPMHeaderDynamic )
428*b1cdbd2cSJim Jagielski 		lcl_RemoveState( pPMHeaderDynamic );
429*b1cdbd2cSJim Jagielski 
430*b1cdbd2cSJim Jagielski 	if( pPMFooterHeight && (!pPMFooterDynamic || (pPMFooterDynamic && getBOOL( pPMFooterDynamic->maValue ))) )
431*b1cdbd2cSJim Jagielski 		lcl_RemoveState( pPMFooterHeight );
432*b1cdbd2cSJim Jagielski 	if( pPMFooterMinHeight && pPMFooterDynamic && !getBOOL( pPMFooterDynamic->maValue ) )
433*b1cdbd2cSJim Jagielski 		lcl_RemoveState( pPMFooterMinHeight );
434*b1cdbd2cSJim Jagielski 	if( pPMFooterDynamic )
435*b1cdbd2cSJim Jagielski 		lcl_RemoveState( pPMFooterDynamic );
436*b1cdbd2cSJim Jagielski 
437*b1cdbd2cSJim Jagielski 	if( pPMScaleTo )
438*b1cdbd2cSJim Jagielski 		lcl_RemoveStateIfZero16( pPMScaleTo );
439*b1cdbd2cSJim Jagielski 	if( pPMScaleToPages )
440*b1cdbd2cSJim Jagielski 		lcl_RemoveStateIfZero16( pPMScaleToPages );
441*b1cdbd2cSJim Jagielski 	if( pPMScaleToX )
442*b1cdbd2cSJim Jagielski 		lcl_RemoveStateIfZero16( pPMScaleToX );
443*b1cdbd2cSJim Jagielski 	if( pPMScaleToY )
444*b1cdbd2cSJim Jagielski 		lcl_RemoveStateIfZero16( pPMScaleToY );
445*b1cdbd2cSJim Jagielski 
446*b1cdbd2cSJim Jagielski     if (pPrint)
447*b1cdbd2cSJim Jagielski     {
448*b1cdbd2cSJim Jagielski         lcl_AddState(rPropState, aPropMapper->FindEntryIndex(CTF_PM_PRINT_ANNOTATIONS), rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PrintAnnotations")), rPropSet);
449*b1cdbd2cSJim Jagielski         lcl_AddState(rPropState, aPropMapper->FindEntryIndex(CTF_PM_PRINT_CHARTS), rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PrintCharts")), rPropSet);
450*b1cdbd2cSJim Jagielski         lcl_AddState(rPropState, aPropMapper->FindEntryIndex(CTF_PM_PRINT_DRAWING), rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PrintDrawing")), rPropSet);
451*b1cdbd2cSJim Jagielski         lcl_AddState(rPropState, aPropMapper->FindEntryIndex(CTF_PM_PRINT_FORMULAS), rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PrintFormulas")), rPropSet);
452*b1cdbd2cSJim Jagielski         lcl_AddState(rPropState, aPropMapper->FindEntryIndex(CTF_PM_PRINT_GRID), rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PrintGrid")), rPropSet);
453*b1cdbd2cSJim Jagielski         lcl_AddState(rPropState, aPropMapper->FindEntryIndex(CTF_PM_PRINT_HEADERS), rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PrintHeaders")), rPropSet);
454*b1cdbd2cSJim Jagielski         lcl_AddState(rPropState, aPropMapper->FindEntryIndex(CTF_PM_PRINT_OBJECTS), rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PrintObjects")), rPropSet);
455*b1cdbd2cSJim Jagielski         lcl_AddState(rPropState, aPropMapper->FindEntryIndex(CTF_PM_PRINT_ZEROVALUES), rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PrintZeroValues")), rPropSet);
456*b1cdbd2cSJim Jagielski     }
457*b1cdbd2cSJim Jagielski 
458*b1cdbd2cSJim Jagielski 	SvXMLExportPropertyMapper::ContextFilter(rPropState,rPropSet);
459*b1cdbd2cSJim Jagielski }
460*b1cdbd2cSJim Jagielski 
461