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 <com/sun/star/style/GraphicLocation.hpp>
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski #include <xmloff/xmlnmspe.hxx>
29*b1cdbd2cSJim Jagielski #include <xmloff/xmltoken.hxx>
30*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
31*b1cdbd2cSJim Jagielski #include <xmloff/xmlexp.hxx>
32*b1cdbd2cSJim Jagielski #include "XMLBackgroundImageExport.hxx"
33*b1cdbd2cSJim Jagielski #include <xmloff/xmluconv.hxx>
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski using ::rtl::OUString;
36*b1cdbd2cSJim Jagielski using ::rtl::OUStringBuffer;
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
39*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
40*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::style;
41*b1cdbd2cSJim Jagielski using namespace ::xmloff::token;
42*b1cdbd2cSJim Jagielski 
XMLBackgroundImageExport(SvXMLExport & rExp)43*b1cdbd2cSJim Jagielski XMLBackgroundImageExport::XMLBackgroundImageExport( SvXMLExport& rExp ) :
44*b1cdbd2cSJim Jagielski 	rExport( rExp )
45*b1cdbd2cSJim Jagielski {
46*b1cdbd2cSJim Jagielski }
47*b1cdbd2cSJim Jagielski 
~XMLBackgroundImageExport()48*b1cdbd2cSJim Jagielski XMLBackgroundImageExport::~XMLBackgroundImageExport()
49*b1cdbd2cSJim Jagielski {
50*b1cdbd2cSJim Jagielski }
51*b1cdbd2cSJim Jagielski 
exportXML(const Any & rURL,const Any * pPos,const Any * pFilter,const Any * pTransparency,sal_uInt16 nPrefix,const::rtl::OUString & rLocalName)52*b1cdbd2cSJim Jagielski void XMLBackgroundImageExport::exportXML( const Any& rURL,
53*b1cdbd2cSJim Jagielski 			const Any *pPos,
54*b1cdbd2cSJim Jagielski 			const Any *pFilter,
55*b1cdbd2cSJim Jagielski             const Any *pTransparency,
56*b1cdbd2cSJim Jagielski 			sal_uInt16 nPrefix,
57*b1cdbd2cSJim Jagielski 			const ::rtl::OUString& rLocalName )
58*b1cdbd2cSJim Jagielski {
59*b1cdbd2cSJim Jagielski 	GraphicLocation ePos;
60*b1cdbd2cSJim Jagielski 	if( !(pPos && ((*pPos) >>= ePos)) )
61*b1cdbd2cSJim Jagielski 		ePos = GraphicLocation_AREA;
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski 	OUString sURL;
64*b1cdbd2cSJim Jagielski 	rURL >>= sURL;
65*b1cdbd2cSJim Jagielski 	if( sURL.getLength() && GraphicLocation_NONE != ePos )
66*b1cdbd2cSJim Jagielski 	{
67*b1cdbd2cSJim Jagielski 		OUString sTempURL( GetExport().AddEmbeddedGraphicObject( sURL ) );
68*b1cdbd2cSJim Jagielski 		if( sTempURL.getLength() )
69*b1cdbd2cSJim Jagielski 		{
70*b1cdbd2cSJim Jagielski 			GetExport().AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, sTempURL );
71*b1cdbd2cSJim Jagielski 			GetExport().AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE,
72*b1cdbd2cSJim Jagielski                                       XML_SIMPLE );
73*b1cdbd2cSJim Jagielski 			GetExport().AddAttribute( XML_NAMESPACE_XLINK, XML_ACTUATE,
74*b1cdbd2cSJim Jagielski                                       XML_ONLOAD );
75*b1cdbd2cSJim Jagielski 		}
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski 		OUStringBuffer aOut;
78*b1cdbd2cSJim Jagielski 		switch( ePos )
79*b1cdbd2cSJim Jagielski 		{
80*b1cdbd2cSJim Jagielski 		case GraphicLocation_LEFT_TOP:
81*b1cdbd2cSJim Jagielski 		case GraphicLocation_MIDDLE_TOP:
82*b1cdbd2cSJim Jagielski 		case GraphicLocation_RIGHT_TOP:
83*b1cdbd2cSJim Jagielski 			aOut.append( GetXMLToken(XML_TOP) );
84*b1cdbd2cSJim Jagielski 			break;
85*b1cdbd2cSJim Jagielski 		case GraphicLocation_LEFT_MIDDLE:
86*b1cdbd2cSJim Jagielski 		case GraphicLocation_MIDDLE_MIDDLE:
87*b1cdbd2cSJim Jagielski 		case GraphicLocation_RIGHT_MIDDLE:
88*b1cdbd2cSJim Jagielski 			aOut.append( GetXMLToken(XML_CENTER) );
89*b1cdbd2cSJim Jagielski 			break;
90*b1cdbd2cSJim Jagielski 		case GraphicLocation_LEFT_BOTTOM:
91*b1cdbd2cSJim Jagielski 		case GraphicLocation_MIDDLE_BOTTOM:
92*b1cdbd2cSJim Jagielski 		case GraphicLocation_RIGHT_BOTTOM:
93*b1cdbd2cSJim Jagielski 			aOut.append( GetXMLToken(XML_BOTTOM) );
94*b1cdbd2cSJim Jagielski 			break;
95*b1cdbd2cSJim Jagielski 		default:
96*b1cdbd2cSJim Jagielski 			break;
97*b1cdbd2cSJim Jagielski 		}
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski 		if( aOut.getLength() )
100*b1cdbd2cSJim Jagielski 		{
101*b1cdbd2cSJim Jagielski 			aOut.append( sal_Unicode( ' ' ) );
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski 			switch( ePos )
104*b1cdbd2cSJim Jagielski 			{
105*b1cdbd2cSJim Jagielski 			case GraphicLocation_LEFT_TOP:
106*b1cdbd2cSJim Jagielski 			case GraphicLocation_LEFT_BOTTOM:
107*b1cdbd2cSJim Jagielski 			case GraphicLocation_LEFT_MIDDLE:
108*b1cdbd2cSJim Jagielski 				aOut.append( GetXMLToken(XML_LEFT) );
109*b1cdbd2cSJim Jagielski 				break;
110*b1cdbd2cSJim Jagielski 			case GraphicLocation_MIDDLE_TOP:
111*b1cdbd2cSJim Jagielski 			case GraphicLocation_MIDDLE_MIDDLE:
112*b1cdbd2cSJim Jagielski 			case GraphicLocation_MIDDLE_BOTTOM:
113*b1cdbd2cSJim Jagielski 				aOut.append( GetXMLToken(XML_CENTER) );
114*b1cdbd2cSJim Jagielski 				break;
115*b1cdbd2cSJim Jagielski 			case GraphicLocation_RIGHT_MIDDLE:
116*b1cdbd2cSJim Jagielski 			case GraphicLocation_RIGHT_TOP:
117*b1cdbd2cSJim Jagielski 			case GraphicLocation_RIGHT_BOTTOM:
118*b1cdbd2cSJim Jagielski 				aOut.append( GetXMLToken(XML_RIGHT) );
119*b1cdbd2cSJim Jagielski 				break;
120*b1cdbd2cSJim Jagielski 			default:
121*b1cdbd2cSJim Jagielski 				break;
122*b1cdbd2cSJim Jagielski 			}
123*b1cdbd2cSJim Jagielski 		}
124*b1cdbd2cSJim Jagielski 		if( aOut.getLength() )
125*b1cdbd2cSJim Jagielski 			GetExport().AddAttribute( XML_NAMESPACE_STYLE,
126*b1cdbd2cSJim Jagielski 								  XML_POSITION, aOut.makeStringAndClear() );
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski 		if( GraphicLocation_AREA == ePos )
129*b1cdbd2cSJim Jagielski 		{
130*b1cdbd2cSJim Jagielski 			aOut.append( GetXMLToken(XML_BACKGROUND_STRETCH) );
131*b1cdbd2cSJim Jagielski 		}
132*b1cdbd2cSJim Jagielski 		else if( GraphicLocation_NONE != ePos && GraphicLocation_TILED != ePos  )
133*b1cdbd2cSJim Jagielski 		{
134*b1cdbd2cSJim Jagielski 			aOut.append( GetXMLToken(XML_BACKGROUND_NO_REPEAT) );
135*b1cdbd2cSJim Jagielski 		}
136*b1cdbd2cSJim Jagielski 		if( aOut.getLength() )
137*b1cdbd2cSJim Jagielski 			GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_REPEAT,
138*b1cdbd2cSJim Jagielski 						  aOut.makeStringAndClear() );
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski 		if( pFilter )
141*b1cdbd2cSJim Jagielski 		{
142*b1cdbd2cSJim Jagielski 			OUString sFilter;
143*b1cdbd2cSJim Jagielski 			(*pFilter) >>= sFilter;
144*b1cdbd2cSJim Jagielski 			if( sFilter.getLength() )
145*b1cdbd2cSJim Jagielski 				GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_FILTER_NAME,
146*b1cdbd2cSJim Jagielski 										  sFilter );
147*b1cdbd2cSJim Jagielski 		}
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski         if( pTransparency )
150*b1cdbd2cSJim Jagielski         {
151*b1cdbd2cSJim Jagielski             sal_Int8 nTransparency = sal_Int8();
152*b1cdbd2cSJim Jagielski             if( (*pTransparency) >>= nTransparency )
153*b1cdbd2cSJim Jagielski             {
154*b1cdbd2cSJim Jagielski                 OUStringBuffer aTransOut;
155*b1cdbd2cSJim Jagielski                 SvXMLUnitConverter::convertPercent( aTransOut, 100-nTransparency );
156*b1cdbd2cSJim Jagielski                 GetExport().AddAttribute( XML_NAMESPACE_DRAW, XML_OPACITY,
157*b1cdbd2cSJim Jagielski                                           aTransOut.makeStringAndClear() );
158*b1cdbd2cSJim Jagielski             }
159*b1cdbd2cSJim Jagielski         }
160*b1cdbd2cSJim Jagielski 	}
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski 	{
163*b1cdbd2cSJim Jagielski 		SvXMLElementExport aElem( GetExport(), nPrefix, rLocalName, sal_True, sal_True );
164*b1cdbd2cSJim Jagielski 		if( sURL.getLength() && GraphicLocation_NONE != ePos )
165*b1cdbd2cSJim Jagielski 		{
166*b1cdbd2cSJim Jagielski 			// optional office:binary-data
167*b1cdbd2cSJim Jagielski 			GetExport().AddEmbeddedGraphicObjectAsBase64( sURL );
168*b1cdbd2cSJim Jagielski 		}
169*b1cdbd2cSJim Jagielski 	}
170*b1cdbd2cSJim Jagielski }
171