Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <com/sun/star/container/XNameContainer.hpp>
21 : #include "FillStyleContext.hxx"
22 : #include <xmloff/xmlimp.hxx>
23 : #include "xmloff/GradientStyle.hxx"
24 : #include "xmloff/HatchStyle.hxx"
25 : #include "xmloff/ImageStyle.hxx"
26 : #include "TransGradientStyle.hxx"
27 : #include "xmloff/MarkerStyle.hxx"
28 : #include "xmloff/DashStyle.hxx"
29 : #include <xmloff/families.hxx>
30 : #include <xmloff/nmspmap.hxx>
31 : #include "xmloff/xmlnmspe.hxx"
32 : #include <xmloff/XMLBase64ImportContext.hxx>
33 :
34 : using namespace ::com::sun::star;
35 : using ::rtl::OUString;
36 : using ::rtl::OUStringBuffer;
37 :
38 :
39 : //////////////////////////////////////////////////////////////////////////////
40 : //////////////////////////////////////////////////////////////////////////////
41 :
42 0 : TYPEINIT1( XMLGradientStyleContext, SvXMLStyleContext );
43 :
44 5 : XMLGradientStyleContext::XMLGradientStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
45 : const OUString& rLName,
46 : const uno::Reference< xml::sax::XAttributeList >& xAttrList)
47 5 : : SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList)
48 : {
49 :
50 : // start import
51 5 : XMLGradientStyleImport aGradientStyle( GetImport() );
52 5 : aGradientStyle.importXML( xAttrList, maAny, maStrName );
53 5 : }
54 :
55 10 : XMLGradientStyleContext::~XMLGradientStyleContext()
56 : {
57 10 : }
58 :
59 5 : void XMLGradientStyleContext::EndElement()
60 : {
61 5 : uno::Reference< container::XNameContainer > xGradient( GetImport().GetGradientHelper() );
62 :
63 : try
64 : {
65 5 : if(xGradient.is())
66 : {
67 5 : if( xGradient->hasByName( maStrName ) )
68 : {
69 0 : xGradient->replaceByName( maStrName, maAny );
70 : }
71 : else
72 : {
73 5 : xGradient->insertByName( maStrName, maAny );
74 : }
75 : }
76 : }
77 0 : catch( container::ElementExistException& )
78 5 : {}
79 5 : }
80 :
81 5 : sal_Bool XMLGradientStyleContext::IsTransient() const
82 : {
83 5 : return sal_True;
84 : }
85 :
86 : //////////////////////////////////////////////////////////////////////////////
87 : //////////////////////////////////////////////////////////////////////////////
88 :
89 0 : TYPEINIT1( XMLHatchStyleContext, SvXMLStyleContext );
90 :
91 4 : XMLHatchStyleContext::XMLHatchStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
92 : const OUString& rLName,
93 : const uno::Reference< xml::sax::XAttributeList >& xAttrList)
94 4 : : SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList)
95 : {
96 : // start import
97 4 : XMLHatchStyleImport aHatchStyle( GetImport() );
98 4 : aHatchStyle.importXML( xAttrList, maAny, maStrName );
99 4 : }
100 :
101 8 : XMLHatchStyleContext::~XMLHatchStyleContext()
102 : {
103 8 : }
104 :
105 4 : void XMLHatchStyleContext::EndElement()
106 : {
107 4 : uno::Reference< container::XNameContainer > xHatch( GetImport().GetHatchHelper() );
108 :
109 : try
110 : {
111 4 : if(xHatch.is())
112 : {
113 4 : if( xHatch->hasByName( maStrName ) )
114 : {
115 0 : xHatch->replaceByName( maStrName, maAny );
116 : }
117 : else
118 : {
119 4 : xHatch->insertByName( maStrName, maAny );
120 : }
121 : }
122 : }
123 0 : catch( container::ElementExistException& )
124 4 : {}
125 4 : }
126 :
127 4 : sal_Bool XMLHatchStyleContext::IsTransient() const
128 : {
129 4 : return sal_True;
130 : }
131 :
132 : //////////////////////////////////////////////////////////////////////////////
133 : //////////////////////////////////////////////////////////////////////////////
134 :
135 0 : TYPEINIT1( XMLBitmapStyleContext, SvXMLStyleContext );
136 :
137 0 : XMLBitmapStyleContext::XMLBitmapStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
138 : const OUString& rLName,
139 : const uno::Reference< xml::sax::XAttributeList >& xAttrList)
140 0 : : SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList)
141 : {
142 : // start import
143 0 : XMLImageStyle aBitmapStyle;
144 0 : aBitmapStyle.importXML( xAttrList, maAny, maStrName, rImport );
145 0 : }
146 :
147 0 : XMLBitmapStyleContext::~XMLBitmapStyleContext()
148 : {
149 0 : }
150 :
151 0 : SvXMLImportContext* XMLBitmapStyleContext::CreateChildContext( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList > & xAttrList )
152 : {
153 0 : SvXMLImportContext *pContext = 0;
154 0 : if( (XML_NAMESPACE_OFFICE == nPrefix) && xmloff::token::IsXMLToken( rLocalName, xmloff::token::XML_BINARY_DATA ) )
155 : {
156 0 : OUString sURL;
157 0 : maAny >>= sURL;
158 0 : if( sURL.isEmpty() && !mxBase64Stream.is() )
159 : {
160 0 : mxBase64Stream = GetImport().GetStreamForGraphicObjectURLFromBase64();
161 0 : if( mxBase64Stream.is() )
162 0 : pContext = new XMLBase64ImportContext( GetImport(), nPrefix,
163 : rLocalName, xAttrList,
164 0 : mxBase64Stream );
165 0 : }
166 : }
167 0 : if( !pContext )
168 : {
169 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
170 : }
171 :
172 0 : return pContext;
173 : }
174 :
175 0 : void XMLBitmapStyleContext::EndElement()
176 : {
177 0 : OUString sURL;
178 0 : maAny >>= sURL;
179 :
180 0 : if( sURL.isEmpty() && mxBase64Stream.is() )
181 : {
182 0 : sURL = GetImport().ResolveGraphicObjectURLFromBase64( mxBase64Stream );
183 0 : mxBase64Stream = 0;
184 0 : maAny <<= sURL;
185 : }
186 :
187 0 : uno::Reference< container::XNameContainer > xBitmap( GetImport().GetBitmapHelper() );
188 :
189 : try
190 : {
191 0 : if(xBitmap.is())
192 : {
193 0 : if( xBitmap->hasByName( maStrName ) )
194 : {
195 0 : xBitmap->replaceByName( maStrName, maAny );
196 : }
197 : else
198 : {
199 0 : xBitmap->insertByName( maStrName, maAny );
200 : }
201 : }
202 : }
203 0 : catch( container::ElementExistException& )
204 0 : {}
205 0 : }
206 :
207 0 : sal_Bool XMLBitmapStyleContext::IsTransient() const
208 : {
209 0 : return sal_True;
210 : }
211 :
212 :
213 : //////////////////////////////////////////////////////////////////////////////
214 : //////////////////////////////////////////////////////////////////////////////
215 :
216 0 : TYPEINIT1( XMLTransGradientStyleContext, SvXMLStyleContext );
217 :
218 0 : XMLTransGradientStyleContext::XMLTransGradientStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
219 : const OUString& rLName,
220 : const uno::Reference< xml::sax::XAttributeList >& xAttrList)
221 0 : : SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList)
222 : {
223 : // start import
224 0 : XMLTransGradientStyleImport aTransGradientStyle( GetImport() );
225 0 : aTransGradientStyle.importXML( xAttrList, maAny, maStrName );
226 0 : }
227 :
228 0 : XMLTransGradientStyleContext::~XMLTransGradientStyleContext()
229 : {
230 0 : }
231 :
232 0 : void XMLTransGradientStyleContext::EndElement()
233 : {
234 0 : uno::Reference< container::XNameContainer > xTransGradient( GetImport().GetTransGradientHelper() );
235 :
236 : try
237 : {
238 0 : if(xTransGradient.is())
239 : {
240 0 : if( xTransGradient->hasByName( maStrName ) )
241 : {
242 0 : xTransGradient->replaceByName( maStrName, maAny );
243 : }
244 : else
245 : {
246 0 : xTransGradient->insertByName( maStrName, maAny );
247 : }
248 : }
249 : }
250 0 : catch( container::ElementExistException& )
251 0 : {}
252 0 : }
253 :
254 0 : sal_Bool XMLTransGradientStyleContext::IsTransient() const
255 : {
256 0 : return sal_True;
257 : }
258 :
259 : //////////////////////////////////////////////////////////////////////////////
260 : //////////////////////////////////////////////////////////////////////////////
261 :
262 0 : TYPEINIT1( XMLMarkerStyleContext, SvXMLStyleContext );
263 :
264 3 : XMLMarkerStyleContext::XMLMarkerStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
265 : const OUString& rLName,
266 : const uno::Reference< xml::sax::XAttributeList >& xAttrList)
267 3 : : SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList)
268 : {
269 : // start import
270 3 : XMLMarkerStyleImport aMarkerStyle( GetImport() );
271 3 : aMarkerStyle.importXML( xAttrList, maAny, maStrName );
272 3 : }
273 :
274 6 : XMLMarkerStyleContext::~XMLMarkerStyleContext()
275 : {
276 6 : }
277 :
278 3 : void XMLMarkerStyleContext::EndElement()
279 : {
280 3 : uno::Reference< container::XNameContainer > xMarker( GetImport().GetMarkerHelper() );
281 :
282 : try
283 : {
284 3 : if(xMarker.is())
285 : {
286 3 : if( xMarker->hasByName( maStrName ) )
287 : {
288 2 : xMarker->replaceByName( maStrName, maAny );
289 : }
290 : else
291 : {
292 1 : xMarker->insertByName( maStrName, maAny );
293 : }
294 : }
295 : }
296 0 : catch( container::ElementExistException& )
297 3 : {}
298 3 : }
299 :
300 3 : sal_Bool XMLMarkerStyleContext::IsTransient() const
301 : {
302 3 : return sal_True;
303 : }
304 :
305 : //////////////////////////////////////////////////////////////////////////////
306 : //////////////////////////////////////////////////////////////////////////////
307 :
308 0 : TYPEINIT1( XMLDashStyleContext, SvXMLStyleContext );
309 :
310 1 : XMLDashStyleContext::XMLDashStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
311 : const OUString& rLName,
312 : const uno::Reference< xml::sax::XAttributeList >& xAttrList)
313 1 : : SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList)
314 : {
315 : // start import
316 1 : XMLDashStyleImport aDashStyle( GetImport() );
317 1 : aDashStyle.importXML( xAttrList, maAny, maStrName );
318 1 : }
319 :
320 2 : XMLDashStyleContext::~XMLDashStyleContext()
321 : {
322 2 : }
323 :
324 1 : void XMLDashStyleContext::EndElement()
325 : {
326 1 : uno::Reference< container::XNameContainer > xDashes( GetImport().GetDashHelper() );
327 :
328 : try
329 : {
330 1 : if(xDashes.is())
331 : {
332 1 : if( xDashes->hasByName( maStrName ) )
333 : {
334 0 : xDashes->replaceByName( maStrName, maAny );
335 : }
336 : else
337 : {
338 1 : xDashes->insertByName( maStrName, maAny );
339 : }
340 : }
341 : }
342 0 : catch( container::ElementExistException& )
343 1 : {}
344 1 : }
345 :
346 1 : sal_Bool XMLDashStyleContext::IsTransient() const
347 : {
348 1 : return sal_True;
349 : }
350 :
351 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|