xref: /aoo41x/main/xmloff/source/draw/propimp0.cxx (revision 63bba73c)
1*63bba73cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*63bba73cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*63bba73cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*63bba73cSAndrew Rist  * distributed with this work for additional information
6*63bba73cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*63bba73cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*63bba73cSAndrew Rist  * "License"); you may not use this file except in compliance
9*63bba73cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*63bba73cSAndrew Rist  *
11*63bba73cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*63bba73cSAndrew Rist  *
13*63bba73cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*63bba73cSAndrew Rist  * software distributed under the License is distributed on an
15*63bba73cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*63bba73cSAndrew Rist  * KIND, either express or implied.  See the License for the
17*63bba73cSAndrew Rist  * specific language governing permissions and limitations
18*63bba73cSAndrew Rist  * under the License.
19*63bba73cSAndrew Rist  *
20*63bba73cSAndrew Rist  *************************************************************/
21*63bba73cSAndrew Rist 
22*63bba73cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_xmloff.hxx"
26cdf0e10cSrcweir #include <tools/string.hxx>
27cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
28cdf0e10cSrcweir #include "propimp0.hxx"
29cdf0e10cSrcweir #include <com/sun/star/drawing/LineDash.hpp>
30cdf0e10cSrcweir #include <com/sun/star/util/DateTime.hpp>
31cdf0e10cSrcweir #include <com/sun/star/uno/Any.hxx>
32cdf0e10cSrcweir #include <xmloff/xmluconv.hxx>
33cdf0e10cSrcweir #include <xmloff/xmlimp.hxx>
34cdf0e10cSrcweir 
35cdf0e10cSrcweir using ::rtl::OUString;
36cdf0e10cSrcweir using ::rtl::OUStringBuffer;
37cdf0e10cSrcweir 
38cdf0e10cSrcweir using namespace ::com::sun::star;
39cdf0e10cSrcweir 
40cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
41cdf0e10cSrcweir // implementation of graphic property Stroke
42cdf0e10cSrcweir 
43cdf0e10cSrcweir 
44cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
45cdf0e10cSrcweir // implementation of presentation page property Change
46cdf0e10cSrcweir 
47cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
48cdf0e10cSrcweir // implementation of an effect duration property handler
49cdf0e10cSrcweir 
50cdf0e10cSrcweir 
~XMLDurationPropertyHdl()51cdf0e10cSrcweir XMLDurationPropertyHdl::~XMLDurationPropertyHdl()
52cdf0e10cSrcweir {
53cdf0e10cSrcweir }
54cdf0e10cSrcweir 
importXML(const OUString & rStrImpValue,::com::sun::star::uno::Any & rValue,const SvXMLUnitConverter &) const55cdf0e10cSrcweir sal_Bool XMLDurationPropertyHdl::importXML(
56cdf0e10cSrcweir 	const OUString& rStrImpValue,
57cdf0e10cSrcweir 	::com::sun::star::uno::Any& rValue,
58cdf0e10cSrcweir 	const SvXMLUnitConverter& ) const
59cdf0e10cSrcweir {
60cdf0e10cSrcweir 	util::DateTime aTime;
61cdf0e10cSrcweir 	SvXMLUnitConverter::convertTime( aTime,  rStrImpValue );
62cdf0e10cSrcweir 
63cdf0e10cSrcweir 	const sal_Int32 nSeconds = ( aTime.Hours * 60 + aTime.Minutes ) * 60 + aTime.Seconds;
64cdf0e10cSrcweir 	rValue <<= nSeconds;
65cdf0e10cSrcweir 
66cdf0e10cSrcweir 	return sal_True;
67cdf0e10cSrcweir }
68cdf0e10cSrcweir 
exportXML(OUString & rStrExpValue,const::com::sun::star::uno::Any & rValue,const SvXMLUnitConverter &) const69cdf0e10cSrcweir sal_Bool XMLDurationPropertyHdl::exportXML(
70cdf0e10cSrcweir 	OUString& rStrExpValue,
71cdf0e10cSrcweir 	const ::com::sun::star::uno::Any& rValue,
72cdf0e10cSrcweir 	const SvXMLUnitConverter& ) const
73cdf0e10cSrcweir {
74cdf0e10cSrcweir 	sal_Int32 nVal = 0;
75cdf0e10cSrcweir 
76cdf0e10cSrcweir 	if(rValue >>= nVal)
77cdf0e10cSrcweir 	{
78cdf0e10cSrcweir 		util::DateTime aTime( 0, (sal_uInt16)nVal, 0, 0, 0, 0, 0 );
79cdf0e10cSrcweir 
80cdf0e10cSrcweir 		OUStringBuffer aOut;
81cdf0e10cSrcweir 		SvXMLUnitConverter::convertTime( aOut, aTime );
82cdf0e10cSrcweir 		rStrExpValue = aOut.makeStringAndClear();
83cdf0e10cSrcweir 		return sal_True;
84cdf0e10cSrcweir 	}
85cdf0e10cSrcweir 
86cdf0e10cSrcweir 	return sal_False;
87cdf0e10cSrcweir }
88cdf0e10cSrcweir 
89cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
90cdf0e10cSrcweir // implementation of an opacity property handler
91cdf0e10cSrcweir 
92cdf0e10cSrcweir 
XMLOpacityPropertyHdl(SvXMLImport * pImport)93cdf0e10cSrcweir XMLOpacityPropertyHdl::XMLOpacityPropertyHdl( SvXMLImport* pImport )
94cdf0e10cSrcweir : mpImport( pImport )
95cdf0e10cSrcweir {
96cdf0e10cSrcweir }
97cdf0e10cSrcweir 
~XMLOpacityPropertyHdl()98cdf0e10cSrcweir XMLOpacityPropertyHdl::~XMLOpacityPropertyHdl()
99cdf0e10cSrcweir {
100cdf0e10cSrcweir }
101cdf0e10cSrcweir 
importXML(const OUString & rStrImpValue,::com::sun::star::uno::Any & rValue,const SvXMLUnitConverter &) const102cdf0e10cSrcweir sal_Bool XMLOpacityPropertyHdl::importXML(
103cdf0e10cSrcweir 	const OUString& rStrImpValue,
104cdf0e10cSrcweir 	::com::sun::star::uno::Any& rValue,
105cdf0e10cSrcweir 	const SvXMLUnitConverter& ) const
106cdf0e10cSrcweir {
107cdf0e10cSrcweir 	sal_Bool bRet = sal_False;
108cdf0e10cSrcweir 	sal_Int32 nValue = 0;
109cdf0e10cSrcweir 
110cdf0e10cSrcweir 	if( rStrImpValue.indexOf( sal_Unicode('%') ) != -1 )
111cdf0e10cSrcweir 	{
112cdf0e10cSrcweir 		if( SvXMLUnitConverter::convertPercent( nValue, rStrImpValue ) )
113cdf0e10cSrcweir 			bRet = sal_True;
114cdf0e10cSrcweir 	}
115cdf0e10cSrcweir 	else
116cdf0e10cSrcweir 	{
117cdf0e10cSrcweir 		nValue = sal_Int32( rStrImpValue.toDouble() * 100.0 );
118cdf0e10cSrcweir 		bRet = sal_True;
119cdf0e10cSrcweir 	}
120cdf0e10cSrcweir 
121cdf0e10cSrcweir 	if( bRet )
122cdf0e10cSrcweir 	{
123cdf0e10cSrcweir 		// check ranges
124cdf0e10cSrcweir 		if( nValue < 0 )
125cdf0e10cSrcweir 			nValue = 0;
126cdf0e10cSrcweir 		if( nValue > 100 )
127cdf0e10cSrcweir 			nValue = 100;
128cdf0e10cSrcweir 
129cdf0e10cSrcweir 		// convert xml opacity to api transparency
130cdf0e10cSrcweir 		nValue = 100 - nValue;
131cdf0e10cSrcweir 
132cdf0e10cSrcweir 		// #i42959#
133cdf0e10cSrcweir 		if( mpImport )
134cdf0e10cSrcweir 		{
135cdf0e10cSrcweir 			sal_Int32 nUPD, nBuild;
136cdf0e10cSrcweir 			if( mpImport->getBuildIds( nUPD, nBuild ) )
137cdf0e10cSrcweir 			{
138cdf0e10cSrcweir 				// correct import of documents written prior to StarOffice 8/OOO 2.0 final
139cdf0e10cSrcweir 				if( (nUPD == 680) && (nBuild < 8951) )
140cdf0e10cSrcweir 					nValue = 100 - nValue;
141cdf0e10cSrcweir 			}
142cdf0e10cSrcweir 		}
143cdf0e10cSrcweir 
144cdf0e10cSrcweir 		rValue <<= sal_uInt16(nValue);
145cdf0e10cSrcweir 	}
146cdf0e10cSrcweir 
147cdf0e10cSrcweir 	return bRet;
148cdf0e10cSrcweir }
149cdf0e10cSrcweir 
exportXML(OUString & rStrExpValue,const::com::sun::star::uno::Any & rValue,const SvXMLUnitConverter &) const150cdf0e10cSrcweir sal_Bool XMLOpacityPropertyHdl::exportXML(
151cdf0e10cSrcweir 	OUString& rStrExpValue,
152cdf0e10cSrcweir 	const ::com::sun::star::uno::Any& rValue,
153cdf0e10cSrcweir 	const SvXMLUnitConverter& ) const
154cdf0e10cSrcweir {
155cdf0e10cSrcweir 	sal_Bool bRet = sal_False;
156cdf0e10cSrcweir 	sal_uInt16 nVal = sal_uInt16();
157cdf0e10cSrcweir 
158cdf0e10cSrcweir 	if( rValue >>= nVal )
159cdf0e10cSrcweir 	{
160cdf0e10cSrcweir 		OUStringBuffer aOut;
161cdf0e10cSrcweir 
162cdf0e10cSrcweir 		nVal = 100 - nVal;
163cdf0e10cSrcweir 		SvXMLUnitConverter::convertPercent( aOut, nVal );
164cdf0e10cSrcweir 		rStrExpValue = aOut.makeStringAndClear();
165cdf0e10cSrcweir 		bRet = sal_True;
166cdf0e10cSrcweir 	}
167cdf0e10cSrcweir 
168cdf0e10cSrcweir 	return bRet;
169cdf0e10cSrcweir }
170cdf0e10cSrcweir 
171cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
172cdf0e10cSrcweir // implementation of an text animation step amount
173cdf0e10cSrcweir 
~XMLTextAnimationStepPropertyHdl()174cdf0e10cSrcweir XMLTextAnimationStepPropertyHdl::~XMLTextAnimationStepPropertyHdl()
175cdf0e10cSrcweir {
176cdf0e10cSrcweir }
177cdf0e10cSrcweir 
importXML(const OUString & rStrImpValue,::com::sun::star::uno::Any & rValue,const SvXMLUnitConverter & rUnitConverter) const178cdf0e10cSrcweir sal_Bool XMLTextAnimationStepPropertyHdl::importXML(
179cdf0e10cSrcweir 	const OUString& rStrImpValue,
180cdf0e10cSrcweir 	::com::sun::star::uno::Any& rValue,
181cdf0e10cSrcweir 	const SvXMLUnitConverter& rUnitConverter ) const
182cdf0e10cSrcweir {
183cdf0e10cSrcweir 	sal_Bool bRet = sal_False;
184cdf0e10cSrcweir 	sal_Int32 nValue = 0;
185cdf0e10cSrcweir 
186cdf0e10cSrcweir 	const OUString aPX( RTL_CONSTASCII_USTRINGPARAM( "px" ) );
187cdf0e10cSrcweir 	sal_Int32 nPos = rStrImpValue.indexOf( aPX );
188cdf0e10cSrcweir 	if( nPos != -1 )
189cdf0e10cSrcweir 	{
190cdf0e10cSrcweir 		if( rUnitConverter.convertNumber( nValue, rStrImpValue.copy( 0, nPos ) ) )
191cdf0e10cSrcweir 		{
192cdf0e10cSrcweir 			rValue <<= sal_Int16( -nValue );
193cdf0e10cSrcweir 			bRet = sal_True;
194cdf0e10cSrcweir 		}
195cdf0e10cSrcweir 	}
196cdf0e10cSrcweir 	else
197cdf0e10cSrcweir 	{
198cdf0e10cSrcweir 		if( rUnitConverter.convertMeasure( nValue, rStrImpValue ) )
199cdf0e10cSrcweir 		{
200cdf0e10cSrcweir 			rValue <<= sal_Int16( nValue );
201cdf0e10cSrcweir 			bRet = sal_True;
202cdf0e10cSrcweir 		}
203cdf0e10cSrcweir 	}
204cdf0e10cSrcweir 
205cdf0e10cSrcweir 	return bRet;
206cdf0e10cSrcweir }
207cdf0e10cSrcweir 
exportXML(OUString & rStrExpValue,const::com::sun::star::uno::Any & rValue,const SvXMLUnitConverter & rUnitConverter) const208cdf0e10cSrcweir sal_Bool XMLTextAnimationStepPropertyHdl::exportXML(
209cdf0e10cSrcweir 	OUString& rStrExpValue,
210cdf0e10cSrcweir 	const ::com::sun::star::uno::Any& rValue,
211cdf0e10cSrcweir 	const SvXMLUnitConverter& rUnitConverter ) const
212cdf0e10cSrcweir {
213cdf0e10cSrcweir 	sal_Bool bRet = sal_False;
214cdf0e10cSrcweir 	sal_Int16 nVal = sal_Int16();
215cdf0e10cSrcweir 
216cdf0e10cSrcweir 	if( rValue >>= nVal )
217cdf0e10cSrcweir 	{
218cdf0e10cSrcweir 		OUStringBuffer aOut;
219cdf0e10cSrcweir 
220cdf0e10cSrcweir 		if( nVal < 0 )
221cdf0e10cSrcweir 		{
222cdf0e10cSrcweir 			const OUString aPX( RTL_CONSTASCII_USTRINGPARAM( "px" ) );
223cdf0e10cSrcweir 			rUnitConverter.convertNumber( aOut, (sal_Int32)-nVal );
224cdf0e10cSrcweir 			aOut.append( aPX );
225cdf0e10cSrcweir 		}
226cdf0e10cSrcweir 		else
227cdf0e10cSrcweir 		{
228cdf0e10cSrcweir 			rUnitConverter.convertMeasure( aOut, nVal );
229cdf0e10cSrcweir 		}
230cdf0e10cSrcweir 
231cdf0e10cSrcweir 		rStrExpValue = aOut.makeStringAndClear();
232cdf0e10cSrcweir 		bRet = sal_True;
233cdf0e10cSrcweir 	}
234cdf0e10cSrcweir 
235cdf0e10cSrcweir 	return bRet;
236cdf0e10cSrcweir }
237cdf0e10cSrcweir 
238cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
239cdf0e10cSrcweir 
240cdf0e10cSrcweir #include "sdxmlexp_impl.hxx"
241cdf0e10cSrcweir 
XMLDateTimeFormatHdl(SvXMLExport * pExport)242cdf0e10cSrcweir XMLDateTimeFormatHdl::XMLDateTimeFormatHdl( SvXMLExport* pExport )
243cdf0e10cSrcweir : mpExport( pExport )
244cdf0e10cSrcweir {
245cdf0e10cSrcweir }
246cdf0e10cSrcweir 
~XMLDateTimeFormatHdl()247cdf0e10cSrcweir XMLDateTimeFormatHdl::~XMLDateTimeFormatHdl()
248cdf0e10cSrcweir {
249cdf0e10cSrcweir }
250cdf0e10cSrcweir 
importXML(const rtl::OUString & rStrImpValue,::com::sun::star::uno::Any & rValue,const SvXMLUnitConverter &) const251cdf0e10cSrcweir sal_Bool XMLDateTimeFormatHdl::importXML( const rtl::OUString& rStrImpValue, ::com::sun::star::uno::Any& rValue, const SvXMLUnitConverter& ) const
252cdf0e10cSrcweir {
253cdf0e10cSrcweir 	rValue <<= rStrImpValue;
254cdf0e10cSrcweir 	return true;
255cdf0e10cSrcweir }
256cdf0e10cSrcweir 
exportXML(rtl::OUString & rStrExpValue,const::com::sun::star::uno::Any & rValue,const SvXMLUnitConverter &) const257cdf0e10cSrcweir sal_Bool XMLDateTimeFormatHdl::exportXML( rtl::OUString& rStrExpValue, const ::com::sun::star::uno::Any& rValue, const SvXMLUnitConverter& ) const
258cdf0e10cSrcweir {
259cdf0e10cSrcweir 	sal_Int32 nNumberFormat = 0;
260cdf0e10cSrcweir 	if( mpExport && (rValue >>= nNumberFormat) )
261cdf0e10cSrcweir 	{
262cdf0e10cSrcweir 		mpExport->addDataStyle( nNumberFormat );
263cdf0e10cSrcweir 		rStrExpValue = mpExport->getDataStyleName( nNumberFormat );
264cdf0e10cSrcweir 		return sal_True;
265cdf0e10cSrcweir 	}
266cdf0e10cSrcweir 
267cdf0e10cSrcweir 	return sal_False;
268cdf0e10cSrcweir }
269