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