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