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 <tools/debug.hxx>
21 : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
22 : #include <com/sun/star/text/TextContentAnchorType.hpp>
23 : #include <com/sun/star/beans/XPropertySet.hpp>
24 : #include <com/sun/star/text/XTextFrame.hpp>
25 : #include <com/sun/star/container/XNamed.hpp>
26 : #include <com/sun/star/text/SizeType.hpp>
27 : #include <com/sun/star/drawing/XShape.hpp>
28 : #include <com/sun/star/document/XEventsSupplier.hpp>
29 : #include <com/sun/star/document/XEmbeddedObjectSupplier.hpp>
30 : #include <com/sun/star/io/XOutputStream.hpp>
31 : #include <com/sun/star/text/HoriOrientation.hpp>
32 : #include <com/sun/star/text/VertOrientation.hpp>
33 : #include <sax/tools/converter.hxx>
34 : #include <xmloff/xmlimp.hxx>
35 : #include <xmloff/xmltoken.hxx>
36 : #include "xmloff/xmlnmspe.hxx"
37 : #include <xmloff/nmspmap.hxx>
38 : #include <xmloff/xmluconv.hxx>
39 : #include "XMLAnchorTypePropHdl.hxx"
40 : #include "XMLEmbeddedObjectImportContext.hxx"
41 : #include <xmloff/XMLBase64ImportContext.hxx>
42 : #include "XMLReplacementImageContext.hxx"
43 : #include <xmloff/prstylei.hxx>
44 : #include "xmloff/i18nmap.hxx"
45 : #include "xexptran.hxx"
46 : #include <xmloff/shapeimport.hxx>
47 : #include <xmloff/XMLEventsImportContext.hxx>
48 : #include "XMLImageMapContext.hxx"
49 : #include "XMLTextFrameContext.hxx"
50 :
51 : #include "XMLTextListBlockContext.hxx"
52 : #include "XMLTextListItemContext.hxx"
53 : #include <xmloff/attrlist.hxx>
54 : #include <comphelper/stl_types.hxx>
55 :
56 : #include <map>
57 :
58 :
59 : using ::rtl::OUString;
60 : using ::rtl::OUStringBuffer;
61 :
62 : using namespace ::com::sun::star;
63 : using namespace ::com::sun::star::uno;
64 : using namespace ::com::sun::star::text;
65 : using namespace ::com::sun::star::xml::sax;
66 : using namespace ::com::sun::star::beans;
67 : using namespace ::com::sun::star::lang;
68 : using namespace ::com::sun::star::container;
69 : using namespace ::com::sun::star::drawing;
70 : using namespace ::com::sun::star::document;
71 : using namespace ::xmloff::token;
72 : using ::com::sun::star::document::XEventsSupplier;
73 :
74 : #define XML_TEXT_FRAME_TEXTBOX 1
75 : #define XML_TEXT_FRAME_GRAPHIC 2
76 : #define XML_TEXT_FRAME_OBJECT 3
77 : #define XML_TEXT_FRAME_OBJECT_OLE 4
78 : #define XML_TEXT_FRAME_APPLET 5
79 : #define XML_TEXT_FRAME_PLUGIN 6
80 : #define XML_TEXT_FRAME_FLOATING_FRAME 7
81 :
82 : typedef ::std::map < const ::rtl::OUString, ::rtl::OUString, ::comphelper::UStringLess> ParamMap;
83 :
84 0 : class XMLTextFrameContextHyperlink_Impl
85 : {
86 : OUString sHRef;
87 : OUString sName;
88 : OUString sTargetFrameName;
89 : sal_Bool bMap;
90 :
91 : public:
92 :
93 : inline XMLTextFrameContextHyperlink_Impl( const OUString& rHRef,
94 : const OUString& rName,
95 : const OUString& rTargetFrameName,
96 : sal_Bool bMap );
97 :
98 0 : const OUString& GetHRef() const { return sHRef; }
99 0 : const OUString& GetName() const { return sName; }
100 0 : const OUString& GetTargetFrameName() const { return sTargetFrameName; }
101 0 : sal_Bool GetMap() const { return bMap; }
102 : };
103 :
104 0 : inline XMLTextFrameContextHyperlink_Impl::XMLTextFrameContextHyperlink_Impl(
105 : const OUString& rHRef, const OUString& rName,
106 : const OUString& rTargetFrameName, sal_Bool bM ) :
107 : sHRef( rHRef ),
108 : sName( rName ),
109 : sTargetFrameName( rTargetFrameName ),
110 0 : bMap( bM )
111 : {
112 0 : }
113 :
114 : // Implement Title/Description Elements UI (#i73249#)
115 : class XMLTextFrameTitleOrDescContext_Impl : public SvXMLImportContext
116 : {
117 : OUString& mrTitleOrDesc;
118 :
119 : public:
120 :
121 : TYPEINFO();
122 :
123 : XMLTextFrameTitleOrDescContext_Impl( SvXMLImport& rImport,
124 : sal_uInt16 nPrfx,
125 : const ::rtl::OUString& rLName,
126 : OUString& rTitleOrDesc );
127 : virtual ~XMLTextFrameTitleOrDescContext_Impl();
128 :
129 : virtual void Characters( const OUString& rText );
130 : };
131 :
132 0 : TYPEINIT1( XMLTextFrameTitleOrDescContext_Impl, SvXMLImportContext );
133 :
134 0 : XMLTextFrameTitleOrDescContext_Impl::XMLTextFrameTitleOrDescContext_Impl(
135 : SvXMLImport& rImport,
136 : sal_uInt16 nPrfx,
137 : const OUString& rLName,
138 : OUString& rTitleOrDesc )
139 : : SvXMLImportContext( rImport, nPrfx, rLName )
140 0 : , mrTitleOrDesc( rTitleOrDesc )
141 : {
142 0 : }
143 :
144 0 : XMLTextFrameTitleOrDescContext_Impl::~XMLTextFrameTitleOrDescContext_Impl()
145 : {
146 0 : }
147 :
148 0 : void XMLTextFrameTitleOrDescContext_Impl::Characters( const OUString& rText )
149 : {
150 0 : mrTitleOrDesc += rText;
151 0 : }
152 :
153 : // ------------------------------------------------------------------------
154 :
155 : class XMLTextFrameParam_Impl : public SvXMLImportContext
156 : {
157 : public:
158 :
159 : TYPEINFO();
160 :
161 : XMLTextFrameParam_Impl( SvXMLImport& rImport, sal_uInt16 nPrfx,
162 : const ::rtl::OUString& rLName,
163 : const ::com::sun::star::uno::Reference<
164 : ::com::sun::star::xml::sax::XAttributeList > & xAttrList,
165 : sal_uInt16 nType,
166 : ParamMap &rParamMap);
167 : virtual ~XMLTextFrameParam_Impl();
168 : };
169 :
170 0 : TYPEINIT1( XMLTextFrameParam_Impl, SvXMLImportContext );
171 :
172 0 : XMLTextFrameParam_Impl::~XMLTextFrameParam_Impl()
173 : {
174 0 : }
175 :
176 0 : XMLTextFrameParam_Impl::XMLTextFrameParam_Impl(
177 : SvXMLImport& rImport, sal_uInt16 nPrfx,
178 : const ::rtl::OUString& rLName,
179 : const ::com::sun::star::uno::Reference<
180 : ::com::sun::star::xml::sax::XAttributeList > & xAttrList,
181 : sal_uInt16 /*nType*/,
182 : ParamMap &rParamMap):
183 0 : SvXMLImportContext( rImport, nPrfx, rLName )
184 : {
185 0 : OUString sName, sValue;
186 0 : sal_Bool bFoundValue = sal_False; // to allow empty values
187 0 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
188 0 : for( sal_Int16 i=0; i < nAttrCount; i++ )
189 : {
190 0 : const OUString& rAttrName = xAttrList->getNameByIndex( i );
191 0 : const OUString& rValue = xAttrList->getValueByIndex( i );
192 :
193 0 : OUString aLocalName;
194 0 : sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName );
195 0 : if ( XML_NAMESPACE_DRAW == nPrefix )
196 : {
197 0 : if( IsXMLToken(aLocalName, XML_VALUE) )
198 : {
199 0 : sValue = rValue;
200 0 : bFoundValue=sal_True;
201 : }
202 0 : else if( IsXMLToken(aLocalName, XML_NAME) )
203 : {
204 0 : sName = rValue;
205 : }
206 : }
207 0 : }
208 0 : if (!sName.isEmpty() && bFoundValue )
209 0 : rParamMap[sName] = sValue;
210 0 : }
211 : class XMLTextFrameContourContext_Impl : public SvXMLImportContext
212 : {
213 : Reference < XPropertySet > xPropSet;
214 :
215 : public:
216 :
217 : TYPEINFO();
218 :
219 : XMLTextFrameContourContext_Impl( SvXMLImport& rImport, sal_uInt16 nPrfx,
220 : const ::rtl::OUString& rLName,
221 : const ::com::sun::star::uno::Reference<
222 : ::com::sun::star::xml::sax::XAttributeList > & xAttrList,
223 : const Reference < XPropertySet >& rPropSet,
224 : sal_Bool bPath );
225 : virtual ~XMLTextFrameContourContext_Impl();
226 : };
227 :
228 0 : TYPEINIT1( XMLTextFrameContourContext_Impl, SvXMLImportContext );
229 :
230 0 : XMLTextFrameContourContext_Impl::XMLTextFrameContourContext_Impl(
231 : SvXMLImport& rImport,
232 : sal_uInt16 nPrfx, const OUString& rLName,
233 : const Reference< XAttributeList > & xAttrList,
234 : const Reference < XPropertySet >& rPropSet,
235 : sal_Bool bPath ) :
236 : SvXMLImportContext( rImport, nPrfx, rLName ),
237 0 : xPropSet( rPropSet )
238 : {
239 0 : OUString sD, sPoints, sViewBox;
240 0 : sal_Bool bPixelWidth = sal_False, bPixelHeight = sal_False;
241 0 : sal_Bool bAuto = sal_False;
242 0 : sal_Int32 nWidth = 0;
243 0 : sal_Int32 nHeight = 0;
244 :
245 : const SvXMLTokenMap& rTokenMap =
246 0 : GetImport().GetTextImport()->GetTextContourAttrTokenMap();
247 :
248 0 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
249 0 : for( sal_Int16 i=0; i < nAttrCount; i++ )
250 : {
251 0 : const OUString& rAttrName = xAttrList->getNameByIndex( i );
252 0 : const OUString& rValue = xAttrList->getValueByIndex( i );
253 :
254 0 : OUString aLocalName;
255 : sal_uInt16 nPrefix =
256 0 : GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
257 0 : &aLocalName );
258 0 : switch( rTokenMap.Get( nPrefix, aLocalName ) )
259 : {
260 : case XML_TOK_TEXT_CONTOUR_VIEWBOX:
261 0 : sViewBox = rValue;
262 0 : break;
263 : case XML_TOK_TEXT_CONTOUR_D:
264 0 : if( bPath )
265 0 : sD = rValue;
266 0 : break;
267 : case XML_TOK_TEXT_CONTOUR_POINTS:
268 0 : if( !bPath )
269 0 : sPoints = rValue;
270 0 : break;
271 : case XML_TOK_TEXT_CONTOUR_WIDTH:
272 0 : if (::sax::Converter::convertMeasurePx(nWidth, rValue))
273 0 : bPixelWidth = sal_True;
274 : else
275 0 : GetImport().GetMM100UnitConverter().convertMeasureToCore(
276 0 : nWidth, rValue);
277 0 : break;
278 : case XML_TOK_TEXT_CONTOUR_HEIGHT:
279 0 : if (::sax::Converter::convertMeasurePx(nHeight, rValue))
280 0 : bPixelHeight = sal_True;
281 : else
282 0 : GetImport().GetMM100UnitConverter().convertMeasureToCore(
283 0 : nHeight, rValue);
284 0 : break;
285 : case XML_TOK_TEXT_CONTOUR_AUTO:
286 0 : bAuto = IsXMLToken(rValue, XML_TRUE);
287 0 : break;
288 : }
289 0 : }
290 :
291 : OUString sContourPolyPolygon(
292 0 : RTL_CONSTASCII_USTRINGPARAM("ContourPolyPolygon") );
293 : Reference < XPropertySetInfo > xPropSetInfo =
294 0 : rPropSet->getPropertySetInfo();
295 0 : if( xPropSetInfo->hasPropertyByName(sContourPolyPolygon ) &&
296 : nWidth > 0 && nHeight > 0 && bPixelWidth == bPixelHeight &&
297 0 : !(bPath ? sD : sPoints).isEmpty() )
298 : {
299 0 : awt::Point aPoint( 0, 0 );
300 0 : awt::Size aSize( nWidth, nHeight );
301 : SdXMLImExViewBox aViewBox( sViewBox,
302 0 : GetImport().GetMM100UnitConverter());
303 0 : Any aAny;
304 0 : if( bPath )
305 : {
306 0 : SdXMLImExSvgDElement aPoints( sD, aViewBox, aPoint, aSize, GetImport() );
307 0 : aAny <<= aPoints.GetPointSequenceSequence();
308 : }
309 : else
310 : {
311 : SdXMLImExPointsElement aPoints( sPoints, aViewBox, aPoint, aSize,
312 0 : GetImport().GetMM100UnitConverter() );
313 0 : aAny <<= aPoints.GetPointSequenceSequence();
314 : }
315 :
316 : OUString sIsPixelContour(
317 0 : RTL_CONSTASCII_USTRINGPARAM("IsPixelContour") );
318 0 : xPropSet->setPropertyValue( sContourPolyPolygon, aAny );
319 :
320 0 : if( xPropSetInfo->hasPropertyByName( sIsPixelContour ) )
321 : {
322 0 : aAny.setValue( &bPixelWidth, ::getBooleanCppuType() );
323 0 : xPropSet->setPropertyValue( sIsPixelContour, aAny );
324 : }
325 :
326 : OUString sIsAutomaticContour(
327 0 : RTL_CONSTASCII_USTRINGPARAM("IsAutomaticContour") );
328 0 : if( xPropSetInfo->hasPropertyByName( sIsAutomaticContour ) )
329 : {
330 0 : aAny.setValue( &bAuto, ::getBooleanCppuType() );
331 0 : xPropSet->setPropertyValue( sIsAutomaticContour, aAny );
332 0 : }
333 0 : }
334 0 : }
335 :
336 0 : XMLTextFrameContourContext_Impl::~XMLTextFrameContourContext_Impl()
337 : {
338 0 : }
339 :
340 : // ------------------------------------------------------------------------
341 :
342 : class XMLTextFrameContext_Impl : public SvXMLImportContext
343 : {
344 : ::com::sun::star::uno::Reference <
345 : ::com::sun::star::text::XTextCursor > xOldTextCursor;
346 : ::com::sun::star::uno::Reference <
347 : ::com::sun::star::beans::XPropertySet > xPropSet;
348 : ::com::sun::star::uno::Reference <
349 : ::com::sun::star::io::XOutputStream > xBase64Stream;
350 :
351 : /// old list item and block (#89891#)
352 : bool mbListContextPushed;
353 :
354 : const ::rtl::OUString sWidth;
355 : const ::rtl::OUString sWidthType;
356 : const ::rtl::OUString sRelativeWidth;
357 : const ::rtl::OUString sHeight;
358 : const ::rtl::OUString sRelativeHeight;
359 : const ::rtl::OUString sSizeType;
360 : const ::rtl::OUString sIsSyncWidthToHeight;
361 : const ::rtl::OUString sIsSyncHeightToWidth;
362 : const ::rtl::OUString sHoriOrient;
363 : const ::rtl::OUString sHoriOrientPosition;
364 : const ::rtl::OUString sVertOrient;
365 : const ::rtl::OUString sVertOrientPosition;
366 : const ::rtl::OUString sChainNextName;
367 : const ::rtl::OUString sAnchorType;
368 : const ::rtl::OUString sAnchorPageNo;
369 : const ::rtl::OUString sGraphicURL;
370 : const ::rtl::OUString sGraphicFilter;
371 : const ::rtl::OUString sTitle;
372 : const ::rtl::OUString sDescription;
373 : const ::rtl::OUString sFrameStyleName;
374 : const ::rtl::OUString sGraphicRotation;
375 : const ::rtl::OUString sTextBoxServiceName;
376 : const ::rtl::OUString sGraphicServiceName;
377 :
378 : ::rtl::OUString sName;
379 : ::rtl::OUString sStyleName;
380 : ::rtl::OUString sNextName;
381 : ::rtl::OUString sHRef;
382 : ::rtl::OUString sFilterName;
383 : ::rtl::OUString sCode;
384 : ::rtl::OUString sObject;
385 : ::rtl::OUString sArchive;
386 : ::rtl::OUString sMimeType;
387 : ::rtl::OUString sFrameName;
388 : ::rtl::OUString sAppletName;
389 : ::rtl::OUString sFilterService;
390 : ::rtl::OUString sBase64CharsLeft;
391 : ::rtl::OUString sTblName;
392 :
393 : ParamMap aParamMap;
394 :
395 : sal_Int32 nX;
396 : sal_Int32 nY;
397 : sal_Int32 nWidth;
398 : sal_Int32 nHeight;
399 : sal_Int32 nZIndex;
400 : sal_Int16 nPage;
401 : sal_Int16 nRotation;
402 : sal_Int16 nRelWidth;
403 : sal_Int16 nRelHeight;
404 :
405 : sal_uInt16 nType;
406 : ::com::sun::star::text::TextContentAnchorType eAnchorType;
407 :
408 : sal_Bool bMayScript : 1;
409 : sal_Bool bMinWidth : 1;
410 : sal_Bool bMinHeight : 1;
411 : sal_Bool bSyncWidth : 1;
412 : sal_Bool bSyncHeight : 1;
413 : sal_Bool bCreateFailed : 1;
414 : sal_Bool bOwnBase64Stream : 1;
415 :
416 : void Create( sal_Bool bHRefOrBase64 );
417 :
418 : public:
419 :
420 : TYPEINFO();
421 :
422 : sal_Bool CreateIfNotThere();
423 0 : const OUString& GetHRef() const { return sHRef; }
424 :
425 : XMLTextFrameContext_Impl( SvXMLImport& rImport,
426 : sal_uInt16 nPrfx,
427 : const ::rtl::OUString& rLName,
428 : const ::com::sun::star::uno::Reference<
429 : ::com::sun::star::xml::sax::XAttributeList > & rAttrList,
430 : ::com::sun::star::text::TextContentAnchorType eAnchorType,
431 : sal_uInt16 nType,
432 : const ::com::sun::star::uno::Reference<
433 : ::com::sun::star::xml::sax::XAttributeList > & rFrameAttrList );
434 : virtual ~XMLTextFrameContext_Impl();
435 :
436 : virtual void EndElement();
437 :
438 : virtual void Characters( const ::rtl::OUString& rChars );
439 :
440 : SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
441 : const ::rtl::OUString& rLocalName,
442 : const ::com::sun::star::uno::Reference<
443 : ::com::sun::star::xml::sax::XAttributeList > & xAttrList );
444 :
445 : void SetHyperlink( const ::rtl::OUString& rHRef,
446 : const ::rtl::OUString& rName,
447 : const ::rtl::OUString& rTargetFrameName,
448 : sal_Bool bMap );
449 :
450 : // Implement Title/Description Elements UI (#i73249#)
451 : void SetTitle( const ::rtl::OUString& rTitle );
452 :
453 : void SetDesc( const ::rtl::OUString& rDesc );
454 :
455 1 : ::com::sun::star::text::TextContentAnchorType GetAnchorType() const { return eAnchorType; }
456 :
457 : const ::com::sun::star::uno::Reference <
458 2 : ::com::sun::star::beans::XPropertySet >& GetPropSet() const { return xPropSet; }
459 : };
460 :
461 28 : TYPEINIT1( XMLTextFrameContext_Impl, SvXMLImportContext );
462 :
463 4 : void XMLTextFrameContext_Impl::Create( sal_Bool /*bHRefOrBase64*/ )
464 : {
465 : UniReference < XMLTextImportHelper > xTextImportHelper =
466 4 : GetImport().GetTextImport();
467 :
468 4 : switch ( nType)
469 : {
470 : case XML_TEXT_FRAME_OBJECT:
471 : case XML_TEXT_FRAME_OBJECT_OLE:
472 1 : if( xBase64Stream.is() )
473 : {
474 0 : OUString sURL( GetImport().ResolveEmbeddedObjectURLFromBase64() );
475 0 : if( !sURL.isEmpty() )
476 0 : xPropSet = GetImport().GetTextImport()
477 0 : ->createAndInsertOLEObject( GetImport(), sURL,
478 : sStyleName,
479 : sTblName,
480 0 : nWidth, nHeight );
481 : }
482 1 : else if( !sHRef.isEmpty() )
483 : {
484 1 : OUString sURL( GetImport().ResolveEmbeddedObjectURL( sHRef,
485 2 : OUString() ) );
486 :
487 1 : if( GetImport().IsPackageURL( sHRef ) )
488 : {
489 1 : xPropSet = GetImport().GetTextImport()
490 3 : ->createAndInsertOLEObject( GetImport(), sURL,
491 : sStyleName,
492 : sTblName,
493 2 : nWidth, nHeight );
494 : }
495 : else
496 : {
497 : // it should be an own OOo link that has no storage persistance
498 0 : xPropSet = GetImport().GetTextImport()
499 0 : ->createAndInsertOOoLink( GetImport(),
500 : sURL,
501 : sStyleName,
502 : sTblName,
503 0 : nWidth, nHeight );
504 1 : }
505 : }
506 : else
507 : {
508 0 : OUString sURL( RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.ServiceName:") );
509 0 : sURL += sFilterService;
510 0 : xPropSet = GetImport().GetTextImport()
511 0 : ->createAndInsertOLEObject( GetImport(), sURL,
512 : sStyleName,
513 : sTblName,
514 0 : nWidth, nHeight );
515 :
516 : }
517 1 : break;
518 : case XML_TEXT_FRAME_APPLET:
519 : {
520 0 : xPropSet = GetImport().GetTextImport()
521 0 : ->createAndInsertApplet( sAppletName, sCode,
522 : bMayScript, sHRef,
523 0 : nWidth, nHeight);
524 0 : break;
525 : }
526 : case XML_TEXT_FRAME_PLUGIN:
527 : {
528 0 : if(!sHRef.isEmpty())
529 0 : GetImport().GetAbsoluteReference(sHRef);
530 0 : xPropSet = GetImport().GetTextImport()
531 0 : ->createAndInsertPlugin( sMimeType, sHRef,
532 0 : nWidth, nHeight);
533 :
534 0 : break;
535 : }
536 : case XML_TEXT_FRAME_FLOATING_FRAME:
537 : {
538 0 : xPropSet = GetImport().GetTextImport()
539 0 : ->createAndInsertFloatingFrame( sFrameName, sHRef,
540 : sStyleName,
541 0 : nWidth, nHeight);
542 0 : break;
543 : }
544 : default:
545 : {
546 3 : Reference<XMultiServiceFactory> xFactory( GetImport().GetModel(),
547 3 : UNO_QUERY );
548 3 : if( xFactory.is() )
549 : {
550 3 : OUString sServiceName;
551 3 : switch( nType )
552 : {
553 3 : case XML_TEXT_FRAME_TEXTBOX: sServiceName = sTextBoxServiceName; break;
554 0 : case XML_TEXT_FRAME_GRAPHIC: sServiceName = sGraphicServiceName; break;
555 : }
556 3 : Reference<XInterface> xIfc = xFactory->createInstance( sServiceName );
557 : DBG_ASSERT( xIfc.is(), "couldn't create frame" );
558 3 : if( xIfc.is() )
559 3 : xPropSet = Reference < XPropertySet >( xIfc, UNO_QUERY );
560 3 : }
561 : }
562 : }
563 :
564 4 : if( !xPropSet.is() )
565 : {
566 0 : bCreateFailed = sal_True;
567 4 : return;
568 : }
569 :
570 4 : Reference< XPropertySetInfo > xPropSetInfo = xPropSet->getPropertySetInfo();
571 :
572 : // set name
573 4 : Reference < XNamed > xNamed( xPropSet, UNO_QUERY );
574 4 : if( xNamed.is() )
575 : {
576 4 : OUString sOrigName( xNamed->getName() );
577 4 : if( sOrigName.isEmpty() ||
578 0 : (!sName.isEmpty() && sOrigName != sName) )
579 : {
580 4 : OUString sOldName( sName );
581 4 : sal_Int32 i = 0;
582 8 : while( xTextImportHelper->HasFrameByName( sName ) )
583 : {
584 0 : sName = sOldName;
585 0 : sName += OUString::valueOf( ++i );
586 : }
587 4 : xNamed->setName( sName );
588 4 : if( sName != sOldName )
589 0 : xTextImportHelper->GetRenameMap().Add( XML_TEXT_RENAME_TYPE_FRAME,
590 0 : sOldName, sName );
591 4 : }
592 : }
593 :
594 : // frame style
595 4 : XMLPropStyleContext *pStyle = 0;
596 4 : if( !sStyleName.isEmpty() )
597 : {
598 4 : pStyle = xTextImportHelper->FindAutoFrameStyle( sStyleName );
599 4 : if( pStyle )
600 4 : sStyleName = pStyle->GetParentName();
601 : }
602 :
603 4 : Any aAny;
604 4 : if( !sStyleName.isEmpty() )
605 : {
606 4 : OUString sDisplayStyleName( GetImport().GetStyleDisplayName(
607 8 : XML_STYLE_FAMILY_SD_GRAPHICS_ID, sStyleName ) );
608 : const Reference < XNameContainer > & rStyles =
609 4 : xTextImportHelper->GetFrameStyles();
610 8 : if( rStyles.is() &&
611 4 : rStyles->hasByName( sDisplayStyleName ) )
612 : {
613 4 : aAny <<= sDisplayStyleName;
614 4 : xPropSet->setPropertyValue( sFrameStyleName, aAny );
615 4 : }
616 : }
617 :
618 : // anchor type (must be set before any other properties, because
619 : // otherwise some orientations cannot be set or will be changed
620 : // afterwards)
621 4 : aAny <<= eAnchorType;
622 4 : xPropSet->setPropertyValue( sAnchorType, aAny );
623 :
624 : // hard properties
625 4 : if( pStyle )
626 4 : pStyle->FillPropertySet( xPropSet );
627 :
628 :
629 : // x and y
630 4 : sal_Int16 nHoriOrient = HoriOrientation::NONE;
631 4 : aAny = xPropSet->getPropertyValue( sHoriOrient );
632 4 : aAny >>= nHoriOrient;
633 4 : if( HoriOrientation::NONE == nHoriOrient )
634 : {
635 1 : aAny <<= nX;
636 1 : xPropSet->setPropertyValue( sHoriOrientPosition, aAny );
637 : }
638 :
639 4 : sal_Int16 nVertOrient = VertOrientation::NONE;
640 4 : aAny = xPropSet->getPropertyValue( sVertOrient );
641 4 : aAny >>= nVertOrient;
642 4 : if( VertOrientation::NONE == nVertOrient )
643 : {
644 1 : aAny <<= nY;
645 1 : xPropSet->setPropertyValue( sVertOrientPosition, aAny );
646 : }
647 :
648 : // width
649 4 : if( nWidth > 0 )
650 : {
651 4 : aAny <<= nWidth;
652 4 : xPropSet->setPropertyValue( sWidth, aAny );
653 : }
654 4 : if( nRelWidth > 0 || nWidth > 0 )
655 : {
656 4 : aAny <<= nRelWidth;
657 4 : xPropSet->setPropertyValue( sRelativeWidth, aAny );
658 : }
659 4 : if( bSyncWidth || nWidth > 0 )
660 : {
661 4 : sal_Bool bTmp = bSyncWidth;
662 4 : aAny.setValue( &bTmp, ::getBooleanCppuType() );
663 4 : xPropSet->setPropertyValue( sIsSyncWidthToHeight, aAny );
664 : }
665 4 : if( xPropSetInfo->hasPropertyByName( sWidthType ) &&
666 : (bMinWidth || nWidth > 0 || nRelWidth > 0 ) )
667 : {
668 : sal_Int16 nSizeType =
669 : (bMinWidth && XML_TEXT_FRAME_TEXTBOX == nType) ? SizeType::MIN
670 3 : : SizeType::FIX;
671 3 : aAny <<= nSizeType;
672 3 : xPropSet->setPropertyValue( sWidthType, aAny );
673 : }
674 :
675 4 : if( nHeight > 0 )
676 : {
677 4 : aAny <<= nHeight;
678 4 : xPropSet->setPropertyValue( sHeight, aAny );
679 : }
680 4 : if( nRelHeight > 0 || nHeight > 0 )
681 : {
682 4 : aAny <<= nRelHeight;
683 4 : xPropSet->setPropertyValue( sRelativeHeight, aAny );
684 : }
685 4 : if( bSyncHeight || nHeight > 0 )
686 : {
687 4 : sal_Bool bTmp = bSyncHeight;
688 4 : aAny.setValue( &bTmp, ::getBooleanCppuType() );
689 4 : xPropSet->setPropertyValue( sIsSyncHeightToWidth, aAny );
690 : }
691 4 : if( xPropSetInfo->hasPropertyByName( sSizeType ) &&
692 : (bMinHeight || nHeight > 0 || nRelHeight > 0 ) )
693 : {
694 : sal_Int16 nSizeType =
695 : (bMinHeight && XML_TEXT_FRAME_TEXTBOX == nType) ? SizeType::MIN
696 3 : : SizeType::FIX;
697 3 : aAny <<= nSizeType;
698 3 : xPropSet->setPropertyValue( sSizeType, aAny );
699 : }
700 :
701 4 : if( XML_TEXT_FRAME_GRAPHIC == nType )
702 : {
703 : // URL
704 : OSL_ENSURE( !sHRef.isEmpty() || xBase64Stream.is(),
705 : "neither URL nor base64 image data given" );
706 : UniReference < XMLTextImportHelper > xTxtImport =
707 0 : GetImport().GetTextImport();
708 0 : if( !sHRef.isEmpty() )
709 : {
710 0 : sal_Bool bForceLoad = xTxtImport->IsInsertMode() ||
711 0 : xTxtImport->IsBlockMode() ||
712 0 : xTxtImport->IsStylesOnlyMode() ||
713 0 : xTxtImport->IsOrganizerMode();
714 0 : sHRef = GetImport().ResolveGraphicObjectURL( sHRef, !bForceLoad );
715 : }
716 0 : else if( xBase64Stream.is() )
717 : {
718 0 : sHRef = GetImport().ResolveGraphicObjectURLFromBase64( xBase64Stream );
719 0 : xBase64Stream = 0;
720 : }
721 0 : aAny <<= sHRef;
722 0 : xPropSet->setPropertyValue( sGraphicURL, aAny );
723 :
724 : // filter name
725 0 : aAny <<=sFilterName;
726 0 : xPropSet->setPropertyValue( sGraphicFilter, aAny );
727 :
728 : // rotation
729 0 : aAny <<= nRotation;
730 0 : xPropSet->setPropertyValue( sGraphicRotation, aAny );
731 : }
732 :
733 : // page number (must be set after the frame is inserted, because it
734 : // will be overwritten then inserting the frame.
735 4 : if( TextContentAnchorType_AT_PAGE == eAnchorType && nPage > 0 )
736 : {
737 0 : aAny <<= nPage;
738 0 : xPropSet->setPropertyValue( sAnchorPageNo, aAny );
739 : }
740 :
741 4 : if( XML_TEXT_FRAME_OBJECT != nType &&
742 : XML_TEXT_FRAME_OBJECT_OLE != nType &&
743 : XML_TEXT_FRAME_APPLET != nType &&
744 : XML_TEXT_FRAME_PLUGIN!= nType &&
745 : XML_TEXT_FRAME_FLOATING_FRAME != nType)
746 : {
747 3 : Reference < XTextContent > xTxtCntnt( xPropSet, UNO_QUERY );
748 3 : xTextImportHelper->InsertTextContent( xTxtCntnt );
749 : }
750 :
751 : // #107848#
752 : // Make adding the shepe to Z-Ordering dependent from if we are
753 : // inside a inside_deleted_section (redlining). That is necessary
754 : // since the shape will be removed again later. It would lead to
755 : // errors if it would stay inside the Z-Ordering. Thus, the
756 : // easiest way to solve that conflict is to not add it here.
757 16 : if(!GetImport().HasTextImport()
758 12 : || !GetImport().GetTextImport()->IsInsideDeleteContext())
759 : {
760 4 : Reference < XShape > xShape( xPropSet, UNO_QUERY );
761 :
762 4 : GetImport().GetShapeImport()->shapeWithZIndexAdded( xShape, nZIndex );
763 : }
764 :
765 4 : if( XML_TEXT_FRAME_TEXTBOX == nType )
766 : {
767 3 : xTextImportHelper->ConnectFrameChains( sName, sNextName, xPropSet );
768 3 : Reference < XTextFrame > xTxtFrame( xPropSet, UNO_QUERY );
769 3 : Reference < XText > xTxt = xTxtFrame->getText();
770 3 : xOldTextCursor = xTextImportHelper->GetCursor();
771 3 : xTextImportHelper->SetCursor( xTxt->createTextCursor() );
772 :
773 : // remember old list item and block (#89892#) and reset them
774 : // for the text frame
775 3 : xTextImportHelper->PushListContext();
776 3 : mbListContextPushed = true;
777 4 : }
778 : }
779 :
780 :
781 0 : void XMLTextFrameContext::removeGraphicFromImportContext(const SvXMLImportContext& rContext) const
782 : {
783 0 : const XMLTextFrameContext_Impl* pXMLTextFrameContext_Impl = dynamic_cast< const XMLTextFrameContext_Impl* >(&rContext);
784 :
785 0 : if(pXMLTextFrameContext_Impl)
786 : {
787 : try
788 : {
789 : // just dispose to delete
790 0 : uno::Reference< lang::XComponent > xComp(pXMLTextFrameContext_Impl->GetPropSet(), UNO_QUERY);
791 :
792 0 : if(xComp.is())
793 : {
794 0 : xComp->dispose();
795 0 : }
796 : }
797 0 : catch( uno::Exception& )
798 : {
799 : OSL_FAIL( "Error in cleanup of multiple graphic object import (!)" );
800 : }
801 : }
802 0 : }
803 :
804 0 : rtl::OUString XMLTextFrameContext::getGraphicURLFromImportContext(const SvXMLImportContext& rContext) const
805 : {
806 0 : rtl::OUString aRetval;
807 0 : const XMLTextFrameContext_Impl* pXMLTextFrameContext_Impl = dynamic_cast< const XMLTextFrameContext_Impl* >(&rContext);
808 :
809 0 : if(pXMLTextFrameContext_Impl)
810 : {
811 0 : return pXMLTextFrameContext_Impl->GetHRef();
812 : }
813 :
814 0 : return aRetval;
815 : }
816 :
817 9 : sal_Bool XMLTextFrameContext_Impl::CreateIfNotThere()
818 : {
819 9 : if( !xPropSet.is() &&
820 : ( XML_TEXT_FRAME_OBJECT_OLE == nType ||
821 : XML_TEXT_FRAME_GRAPHIC == nType ) &&
822 0 : xBase64Stream.is() && !bCreateFailed )
823 : {
824 0 : if( bOwnBase64Stream )
825 0 : xBase64Stream->closeOutput();
826 0 : Create( sal_True );
827 : }
828 :
829 9 : return xPropSet.is();
830 : }
831 :
832 4 : XMLTextFrameContext_Impl::XMLTextFrameContext_Impl(
833 : SvXMLImport& rImport,
834 : sal_uInt16 nPrfx, const OUString& rLName,
835 : const Reference< XAttributeList > & rAttrList,
836 : TextContentAnchorType eATyp,
837 : sal_uInt16 nNewType,
838 : const Reference< XAttributeList > & rFrameAttrList )
839 : : SvXMLImportContext( rImport, nPrfx, rLName )
840 : , mbListContextPushed( false )
841 : , sWidth(RTL_CONSTASCII_USTRINGPARAM("Width"))
842 : , sWidthType(RTL_CONSTASCII_USTRINGPARAM("WidthType"))
843 : , sRelativeWidth(RTL_CONSTASCII_USTRINGPARAM("RelativeWidth"))
844 : , sHeight(RTL_CONSTASCII_USTRINGPARAM("Height"))
845 : , sRelativeHeight(RTL_CONSTASCII_USTRINGPARAM("RelativeHeight"))
846 : , sSizeType(RTL_CONSTASCII_USTRINGPARAM("SizeType"))
847 : , sIsSyncWidthToHeight(RTL_CONSTASCII_USTRINGPARAM("IsSyncWidthToHeight"))
848 : , sIsSyncHeightToWidth(RTL_CONSTASCII_USTRINGPARAM("IsSyncHeightToWidth"))
849 : , sHoriOrient(RTL_CONSTASCII_USTRINGPARAM("HoriOrient"))
850 : , sHoriOrientPosition(RTL_CONSTASCII_USTRINGPARAM("HoriOrientPosition"))
851 : , sVertOrient(RTL_CONSTASCII_USTRINGPARAM("VertOrient"))
852 : , sVertOrientPosition(RTL_CONSTASCII_USTRINGPARAM("VertOrientPosition"))
853 : , sChainNextName(RTL_CONSTASCII_USTRINGPARAM("ChainNextName"))
854 : , sAnchorType(RTL_CONSTASCII_USTRINGPARAM("AnchorType"))
855 : , sAnchorPageNo(RTL_CONSTASCII_USTRINGPARAM("AnchorPageNo"))
856 : , sGraphicURL(RTL_CONSTASCII_USTRINGPARAM("GraphicURL"))
857 : , sGraphicFilter(RTL_CONSTASCII_USTRINGPARAM("GraphicFilter"))
858 : , sTitle(RTL_CONSTASCII_USTRINGPARAM("Title"))
859 : , sDescription(RTL_CONSTASCII_USTRINGPARAM("Description"))
860 : , sFrameStyleName(RTL_CONSTASCII_USTRINGPARAM("FrameStyleName"))
861 : , sGraphicRotation(RTL_CONSTASCII_USTRINGPARAM("GraphicRotation"))
862 : , sTextBoxServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextFrame"))
863 : , sGraphicServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.GraphicObject"))
864 : , nType( nNewType )
865 4 : , eAnchorType( eATyp )
866 : {
867 4 : nX = 0;
868 4 : nY = 0;
869 4 : nWidth = 0;
870 4 : nHeight = 0;
871 4 : nZIndex = -1;
872 4 : nPage = 0;
873 4 : nRotation = 0;
874 4 : nRelWidth = 0;
875 4 : nRelHeight = 0;
876 4 : bMayScript = sal_False;
877 :
878 4 : bMinHeight = sal_False;
879 4 : bMinWidth = sal_False;
880 4 : bSyncWidth = sal_False;
881 4 : bSyncHeight = sal_False;
882 4 : bCreateFailed = sal_False;
883 4 : bOwnBase64Stream = sal_False;
884 :
885 : UniReference < XMLTextImportHelper > xTxtImport =
886 4 : GetImport().GetTextImport();
887 : const SvXMLTokenMap& rTokenMap =
888 4 : xTxtImport->GetTextFrameAttrTokenMap();
889 :
890 4 : sal_Int16 nAttrCount = rAttrList.is() ? rAttrList->getLength() : 0;
891 4 : sal_Int16 nTotalAttrCount = nAttrCount + (rFrameAttrList.is() ? rFrameAttrList->getLength() : 0);
892 34 : for( sal_Int16 i=0; i < nTotalAttrCount; i++ )
893 : {
894 : const OUString& rAttrName =
895 30 : i < nAttrCount ? rAttrList->getNameByIndex( i ) : rFrameAttrList->getNameByIndex( i-nAttrCount );
896 : const OUString& rValue =
897 30 : i < nAttrCount ? rAttrList->getValueByIndex( i ): rFrameAttrList->getValueByIndex( i-nAttrCount );
898 :
899 30 : OUString aLocalName;
900 : sal_uInt16 nPrefix =
901 30 : GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
902 30 : &aLocalName );
903 30 : switch( rTokenMap.Get( nPrefix, aLocalName ) )
904 : {
905 : case XML_TOK_TEXT_FRAME_STYLE_NAME:
906 4 : sStyleName = rValue;
907 4 : break;
908 : case XML_TOK_TEXT_FRAME_NAME:
909 4 : sName = rValue;
910 4 : break;
911 : case XML_TOK_TEXT_FRAME_FRAME_NAME:
912 0 : sFrameName = rValue;
913 0 : break;
914 : case XML_TOK_TEXT_FRAME_APPLET_NAME:
915 0 : sAppletName = rValue;
916 0 : break;
917 : case XML_TOK_TEXT_FRAME_ANCHOR_TYPE:
918 4 : if( TextContentAnchorType_AT_PARAGRAPH == eAnchorType ||
919 : TextContentAnchorType_AT_CHARACTER == eAnchorType ||
920 : TextContentAnchorType_AS_CHARACTER == eAnchorType )
921 : {
922 :
923 : TextContentAnchorType eNew;
924 4 : if( XMLAnchorTypePropHdl::convert( rValue, eNew ) &&
925 : ( TextContentAnchorType_AT_PARAGRAPH == eNew ||
926 : TextContentAnchorType_AT_CHARACTER == eNew ||
927 : TextContentAnchorType_AS_CHARACTER == eNew ||
928 : TextContentAnchorType_AT_PAGE == eNew) )
929 4 : eAnchorType = eNew;
930 : }
931 4 : break;
932 : case XML_TOK_TEXT_FRAME_ANCHOR_PAGE_NUMBER:
933 : {
934 : sal_Int32 nTmp;
935 0 : if (::sax::Converter::convertNumber(nTmp, rValue, 1, SHRT_MAX))
936 0 : nPage = (sal_Int16)nTmp;
937 : }
938 0 : break;
939 : case XML_TOK_TEXT_FRAME_X:
940 1 : GetImport().GetMM100UnitConverter().convertMeasureToCore(
941 2 : nX, rValue);
942 1 : break;
943 : case XML_TOK_TEXT_FRAME_Y:
944 1 : GetImport().GetMM100UnitConverter().convertMeasureToCore(
945 2 : nY, rValue );
946 1 : break;
947 : case XML_TOK_TEXT_FRAME_WIDTH:
948 : // relative widths are obsolete since SRC617. Remove them some day!
949 4 : if( rValue.indexOf( '%' ) != -1 )
950 : {
951 : sal_Int32 nTmp;
952 0 : ::sax::Converter::convertPercent( nTmp, rValue );
953 0 : nRelWidth = (sal_Int16)nTmp;
954 : }
955 : else
956 : {
957 4 : GetImport().GetMM100UnitConverter().convertMeasureToCore(
958 8 : nWidth, rValue, 0 );
959 : }
960 4 : break;
961 : case XML_TOK_TEXT_FRAME_REL_WIDTH:
962 0 : if( IsXMLToken(rValue, XML_SCALE) )
963 : {
964 0 : bSyncWidth = sal_True;
965 : }
966 : else
967 : {
968 : sal_Int32 nTmp;
969 0 : if (::sax::Converter::convertPercent( nTmp, rValue ))
970 0 : nRelWidth = (sal_Int16)nTmp;
971 : }
972 0 : break;
973 : case XML_TOK_TEXT_FRAME_MIN_WIDTH:
974 0 : if( rValue.indexOf( '%' ) != -1 )
975 : {
976 : sal_Int32 nTmp;
977 0 : ::sax::Converter::convertPercent( nTmp, rValue );
978 0 : nRelWidth = (sal_Int16)nTmp;
979 : }
980 : else
981 : {
982 0 : GetImport().GetMM100UnitConverter().convertMeasureToCore(
983 0 : nWidth, rValue, 0 );
984 : }
985 0 : bMinWidth = sal_True;
986 0 : break;
987 : case XML_TOK_TEXT_FRAME_HEIGHT:
988 : // relative heights are obsolete since SRC617. Remove them some day!
989 1 : if( rValue.indexOf( '%' ) != -1 )
990 : {
991 : sal_Int32 nTmp;
992 0 : ::sax::Converter::convertPercent( nTmp, rValue );
993 0 : nRelHeight = (sal_Int16)nTmp;
994 : }
995 : else
996 : {
997 1 : GetImport().GetMM100UnitConverter().convertMeasureToCore(
998 2 : nHeight, rValue, 0 );
999 : }
1000 1 : break;
1001 : case XML_TOK_TEXT_FRAME_REL_HEIGHT:
1002 0 : if( IsXMLToken( rValue, XML_SCALE ) )
1003 : {
1004 0 : bSyncHeight = sal_True;
1005 : }
1006 0 : else if( IsXMLToken( rValue, XML_SCALE_MIN ) )
1007 : {
1008 0 : bSyncHeight = sal_True;
1009 0 : bMinHeight = sal_True;
1010 : }
1011 : else
1012 : {
1013 : sal_Int32 nTmp;
1014 0 : if (::sax::Converter::convertPercent( nTmp, rValue ))
1015 0 : nRelHeight = (sal_Int16)nTmp;
1016 : }
1017 0 : break;
1018 : case XML_TOK_TEXT_FRAME_MIN_HEIGHT:
1019 3 : if( rValue.indexOf( '%' ) != -1 )
1020 : {
1021 : sal_Int32 nTmp;
1022 0 : ::sax::Converter::convertPercent( nTmp, rValue );
1023 0 : nRelHeight = (sal_Int16)nTmp;
1024 : }
1025 : else
1026 : {
1027 3 : GetImport().GetMM100UnitConverter().convertMeasureToCore(
1028 6 : nHeight, rValue, 0 );
1029 : }
1030 3 : bMinHeight = sal_True;
1031 3 : break;
1032 : case XML_TOK_TEXT_FRAME_Z_INDEX:
1033 4 : ::sax::Converter::convertNumber( nZIndex, rValue, -1 );
1034 4 : break;
1035 : case XML_TOK_TEXT_FRAME_NEXT_CHAIN_NAME:
1036 0 : sNextName = rValue;
1037 0 : break;
1038 : case XML_TOK_TEXT_FRAME_HREF:
1039 1 : sHRef = rValue;
1040 1 : break;
1041 : case XML_TOK_TEXT_FRAME_FILTER_NAME:
1042 0 : sFilterName = rValue;
1043 0 : break;
1044 : case XML_TOK_TEXT_FRAME_TRANSFORM:
1045 : {
1046 0 : OUString sValue( rValue );
1047 0 : sValue = sValue.trim();
1048 0 : const OUString aRotate(GetXMLToken(XML_ROTATE));
1049 0 : const sal_Int32 nRotateLen(aRotate.getLength());
1050 0 : sal_Int32 nLen = sValue.getLength();
1051 0 : if( nLen >= nRotateLen+3 &&
1052 0 : 0 == sValue.compareTo( aRotate, nRotateLen ) &&
1053 0 : '(' == sValue[nRotateLen] &&
1054 0 : ')' == sValue[nLen-1] )
1055 : {
1056 0 : sValue = sValue.copy( nRotateLen+1, nLen-(nRotateLen+2) );
1057 0 : sValue = sValue.trim();
1058 : sal_Int32 nVal;
1059 0 : if (::sax::Converter::convertNumber( nVal, sValue ))
1060 0 : nRotation = (sal_Int16)(nVal % 360 );
1061 0 : }
1062 : }
1063 0 : break;
1064 : case XML_TOK_TEXT_FRAME_CODE:
1065 0 : sCode = rValue;
1066 0 : break;
1067 : case XML_TOK_TEXT_FRAME_OBJECT:
1068 0 : sObject = rValue;
1069 0 : break;
1070 : case XML_TOK_TEXT_FRAME_ARCHIVE:
1071 0 : sArchive = rValue;
1072 0 : break;
1073 : case XML_TOK_TEXT_FRAME_MAY_SCRIPT:
1074 0 : bMayScript = IsXMLToken( rValue, XML_TRUE );
1075 0 : break;
1076 : case XML_TOK_TEXT_FRAME_MIME_TYPE:
1077 0 : sMimeType = rValue;
1078 0 : break;
1079 : case XML_TOK_TEXT_FRAME_NOTIFY_ON_UPDATE:
1080 0 : sTblName = rValue;
1081 0 : break;
1082 : }
1083 30 : }
1084 :
1085 5 : if( ( (XML_TEXT_FRAME_GRAPHIC == nType ||
1086 : XML_TEXT_FRAME_OBJECT == nType ||
1087 : XML_TEXT_FRAME_OBJECT_OLE == nType) &&
1088 1 : sHRef.isEmpty() ) ||
1089 0 : ( XML_TEXT_FRAME_APPLET == nType && sCode.isEmpty() ) ||
1090 : ( XML_TEXT_FRAME_PLUGIN == nType &&
1091 0 : sHRef.isEmpty() && sMimeType.isEmpty() ) )
1092 4 : return; // no URL: no image or OLE object
1093 :
1094 4 : Create( sal_True );
1095 : }
1096 :
1097 8 : XMLTextFrameContext_Impl::~XMLTextFrameContext_Impl()
1098 : {
1099 8 : }
1100 :
1101 4 : void XMLTextFrameContext_Impl::EndElement()
1102 : {
1103 4 : CreateIfNotThere();
1104 :
1105 4 : if( xOldTextCursor.is() )
1106 : {
1107 3 : GetImport().GetTextImport()->DeleteParagraph();
1108 3 : GetImport().GetTextImport()->SetCursor( xOldTextCursor );
1109 : }
1110 :
1111 : // reinstall old list item (if necessary) #89892#
1112 4 : if (mbListContextPushed) {
1113 3 : GetImport().GetTextImport()->PopListContext();
1114 : }
1115 :
1116 4 : if (( nType == XML_TEXT_FRAME_APPLET || nType == XML_TEXT_FRAME_PLUGIN ) && xPropSet.is())
1117 0 : GetImport().GetTextImport()->endAppletOrPlugin( xPropSet, aParamMap);
1118 4 : }
1119 :
1120 4 : SvXMLImportContext *XMLTextFrameContext_Impl::CreateChildContext(
1121 : sal_uInt16 nPrefix,
1122 : const OUString& rLocalName,
1123 : const Reference< XAttributeList > & xAttrList )
1124 : {
1125 4 : SvXMLImportContext *pContext = 0;
1126 :
1127 4 : if( XML_NAMESPACE_DRAW == nPrefix )
1128 : {
1129 0 : if ( (nType == XML_TEXT_FRAME_APPLET || nType == XML_TEXT_FRAME_PLUGIN) &&
1130 0 : IsXMLToken( rLocalName, XML_PARAM ) )
1131 : {
1132 0 : pContext = new XMLTextFrameParam_Impl( GetImport(),
1133 : nPrefix, rLocalName,
1134 0 : xAttrList, nType, aParamMap );
1135 : }
1136 : }
1137 4 : else if( (XML_NAMESPACE_OFFICE == nPrefix) )
1138 : {
1139 0 : if( IsXMLToken( rLocalName, XML_BINARY_DATA ) )
1140 : {
1141 0 : if( !xPropSet.is() && !xBase64Stream.is() && !bCreateFailed )
1142 : {
1143 0 : switch( nType )
1144 : {
1145 : case XML_TEXT_FRAME_GRAPHIC:
1146 : xBase64Stream =
1147 0 : GetImport().GetStreamForGraphicObjectURLFromBase64();
1148 0 : break;
1149 : case XML_TEXT_FRAME_OBJECT_OLE:
1150 : xBase64Stream =
1151 0 : GetImport().GetStreamForEmbeddedObjectURLFromBase64();
1152 0 : break;
1153 : }
1154 0 : if( xBase64Stream.is() )
1155 0 : pContext = new XMLBase64ImportContext( GetImport(), nPrefix,
1156 : rLocalName, xAttrList,
1157 0 : xBase64Stream );
1158 : }
1159 : }
1160 : }
1161 : // Correction of condition which also avoids warnings. (#i100480#)
1162 4 : if( !pContext &&
1163 : ( XML_TEXT_FRAME_OBJECT == nType &&
1164 : ( ( XML_NAMESPACE_OFFICE == nPrefix &&
1165 0 : IsXMLToken( rLocalName, XML_DOCUMENT ) ) ||
1166 : ( XML_NAMESPACE_MATH == nPrefix &&
1167 0 : IsXMLToken( rLocalName, XML_MATH ) ) ) ) )
1168 : {
1169 0 : if( !xPropSet.is() && !bCreateFailed )
1170 : {
1171 : XMLEmbeddedObjectImportContext *pEContext =
1172 0 : new XMLEmbeddedObjectImportContext( GetImport(), nPrefix,
1173 0 : rLocalName, xAttrList );
1174 0 : sFilterService = pEContext->GetFilterServiceName();
1175 0 : if( !sFilterService.isEmpty() )
1176 : {
1177 0 : Create( sal_False );
1178 0 : if( xPropSet.is() )
1179 : {
1180 : Reference < XEmbeddedObjectSupplier > xEOS( xPropSet,
1181 0 : UNO_QUERY );
1182 : OSL_ENSURE( xEOS.is(),
1183 : "no embedded object supplier for own object" );
1184 0 : Reference<com::sun::star::lang::XComponent> aXComponent(xEOS->getEmbeddedObject());
1185 0 : pEContext->SetComponent( aXComponent );
1186 : }
1187 : }
1188 0 : pContext = pEContext;
1189 : }
1190 : }
1191 4 : if( !pContext && xOldTextCursor.is() ) // text-box
1192 4 : pContext = GetImport().GetTextImport()->CreateTextChildContext(
1193 4 : GetImport(), nPrefix, rLocalName, xAttrList,
1194 8 : XML_TEXT_TYPE_TEXTBOX );
1195 :
1196 4 : if( !pContext )
1197 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
1198 :
1199 4 : return pContext;
1200 : }
1201 :
1202 0 : void XMLTextFrameContext_Impl::Characters( const OUString& rChars )
1203 : {
1204 0 : if( ( XML_TEXT_FRAME_OBJECT_OLE == nType ||
1205 : XML_TEXT_FRAME_GRAPHIC == nType) &&
1206 0 : !xPropSet.is() && !bCreateFailed )
1207 : {
1208 0 : OUString sTrimmedChars( rChars. trim() );
1209 0 : if( !sTrimmedChars.isEmpty() )
1210 : {
1211 0 : if( !xBase64Stream.is() )
1212 : {
1213 0 : if( XML_TEXT_FRAME_GRAPHIC == nType )
1214 : {
1215 : xBase64Stream =
1216 0 : GetImport().GetStreamForGraphicObjectURLFromBase64();
1217 : }
1218 : else
1219 : {
1220 : xBase64Stream =
1221 0 : GetImport().GetStreamForEmbeddedObjectURLFromBase64();
1222 : }
1223 0 : if( xBase64Stream.is() )
1224 0 : bOwnBase64Stream = sal_True;
1225 : }
1226 0 : if( bOwnBase64Stream && xBase64Stream.is() )
1227 : {
1228 0 : OUString sChars;
1229 0 : if( !sBase64CharsLeft.isEmpty() )
1230 : {
1231 0 : sChars = sBase64CharsLeft;
1232 0 : sChars += sTrimmedChars;
1233 0 : sBase64CharsLeft = OUString();
1234 : }
1235 : else
1236 : {
1237 0 : sChars = sTrimmedChars;
1238 : }
1239 0 : Sequence< sal_Int8 > aBuffer( (sChars.getLength() / 4) * 3 );
1240 : sal_Int32 nCharsDecoded =
1241 0 : ::sax::Converter::decodeBase64SomeChars( aBuffer, sChars );
1242 0 : xBase64Stream->writeBytes( aBuffer );
1243 0 : if( nCharsDecoded != sChars.getLength() )
1244 0 : sBase64CharsLeft = sChars.copy( nCharsDecoded );
1245 : }
1246 0 : }
1247 : }
1248 0 : }
1249 :
1250 0 : void XMLTextFrameContext_Impl::SetHyperlink( const OUString& rHRef,
1251 : const OUString& rName,
1252 : const OUString& rTargetFrameName,
1253 : sal_Bool bMap )
1254 : {
1255 : static ::rtl::OUString s_HyperLinkURL(
1256 0 : RTL_CONSTASCII_USTRINGPARAM("HyperLinkURL"));
1257 : static ::rtl::OUString s_HyperLinkName(
1258 0 : RTL_CONSTASCII_USTRINGPARAM("HyperLinkName"));
1259 : static ::rtl::OUString s_HyperLinkTarget(
1260 0 : RTL_CONSTASCII_USTRINGPARAM("HyperLinkTarget"));
1261 : static ::rtl::OUString s_ServerMap(
1262 0 : RTL_CONSTASCII_USTRINGPARAM("ServerMap"));
1263 0 : if( !xPropSet.is() )
1264 : return;
1265 :
1266 0 : UniReference< XMLTextImportHelper > xTxtImp = GetImport().GetTextImport();
1267 : Reference < XPropertySetInfo > xPropSetInfo =
1268 0 : xPropSet->getPropertySetInfo();
1269 0 : if( !xPropSetInfo.is() ||
1270 0 : !xPropSetInfo->hasPropertyByName(s_HyperLinkURL))
1271 : return;
1272 :
1273 0 : Any aAny;
1274 0 : aAny <<= rHRef;
1275 0 : xPropSet->setPropertyValue( s_HyperLinkURL, aAny );
1276 :
1277 0 : if (xPropSetInfo->hasPropertyByName(s_HyperLinkName))
1278 : {
1279 0 : aAny <<= rName;
1280 0 : xPropSet->setPropertyValue(s_HyperLinkName, aAny);
1281 : }
1282 :
1283 0 : if (xPropSetInfo->hasPropertyByName(s_HyperLinkTarget))
1284 : {
1285 0 : aAny <<= rTargetFrameName;
1286 0 : xPropSet->setPropertyValue( s_HyperLinkTarget, aAny );
1287 : }
1288 :
1289 0 : if (xPropSetInfo->hasPropertyByName(s_ServerMap))
1290 : {
1291 0 : aAny.setValue( &bMap, ::getBooleanCppuType() );
1292 0 : xPropSet->setPropertyValue(s_ServerMap, aAny);
1293 0 : }
1294 : }
1295 :
1296 : // Implement Title/Description Elements UI (#i73249#)
1297 0 : void XMLTextFrameContext_Impl::SetTitle( const OUString& rTitle )
1298 : {
1299 0 : if ( xPropSet.is() )
1300 : {
1301 0 : Reference< XPropertySetInfo > xPropSetInfo = xPropSet->getPropertySetInfo();
1302 0 : if( xPropSetInfo->hasPropertyByName( sTitle ) )
1303 : {
1304 0 : xPropSet->setPropertyValue( sTitle, makeAny( rTitle ) );
1305 0 : }
1306 : }
1307 0 : }
1308 :
1309 0 : void XMLTextFrameContext_Impl::SetDesc( const OUString& rDesc )
1310 : {
1311 0 : if ( xPropSet.is() )
1312 : {
1313 0 : Reference< XPropertySetInfo > xPropSetInfo = xPropSet->getPropertySetInfo();
1314 0 : if( xPropSetInfo->hasPropertyByName( sDescription ) )
1315 : {
1316 0 : xPropSet->setPropertyValue( sDescription, makeAny( rDesc ) );
1317 0 : }
1318 : }
1319 0 : }
1320 :
1321 : //-----------------------------------------------------------------------------------------------------
1322 :
1323 16 : TYPEINIT1( XMLTextFrameContext, SvXMLImportContext );
1324 :
1325 1 : sal_Bool XMLTextFrameContext::CreateIfNotThere( ::com::sun::star::uno::Reference <
1326 : ::com::sun::star::beans::XPropertySet >& rPropSet )
1327 : {
1328 1 : SvXMLImportContext *pContext = &m_xImplContext;
1329 1 : XMLTextFrameContext_Impl *pImpl = PTR_CAST( XMLTextFrameContext_Impl, pContext );
1330 1 : if( pImpl )
1331 : {
1332 1 : if( pImpl->CreateIfNotThere() )
1333 1 : rPropSet = pImpl->GetPropSet();
1334 : }
1335 :
1336 1 : return rPropSet.is();
1337 : }
1338 :
1339 4 : XMLTextFrameContext::XMLTextFrameContext(
1340 : SvXMLImport& rImport,
1341 : sal_uInt16 nPrfx, const OUString& rLName,
1342 : const Reference< XAttributeList > & xAttrList,
1343 : TextContentAnchorType eATyp )
1344 : : SvXMLImportContext( rImport, nPrfx, rLName )
1345 : , multiImageImportHelper()
1346 4 : , m_xAttrList( new SvXMLAttributeList( xAttrList ) )
1347 : , m_pHyperlink( 0 )
1348 : // Implement Title/Description Elements UI (#i73249#)
1349 : , m_sTitle()
1350 : , m_sDesc()
1351 : , m_eDefaultAnchorType( eATyp )
1352 : // Shapes in Writer cannot be named via context menu (#i51726#)
1353 : , m_HasAutomaticStyleWithoutParentStyle( sal_False )
1354 8 : , m_bSupportsReplacement( sal_False )
1355 : {
1356 4 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
1357 27 : for( sal_Int16 i=0; i < nAttrCount; i++ )
1358 : {
1359 23 : const OUString& rAttrName = xAttrList->getNameByIndex( i );
1360 :
1361 23 : OUString aLocalName;
1362 : sal_uInt16 nPrefix =
1363 23 : GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName );
1364 : // New distinguish attribute between Writer objects and Draw objects is:
1365 : // Draw objects have an automatic style without a parent style (#i51726#)
1366 35 : if ( XML_NAMESPACE_DRAW == nPrefix &&
1367 12 : IsXMLToken( aLocalName, XML_STYLE_NAME ) )
1368 : {
1369 4 : OUString aStyleName = xAttrList->getValueByIndex( i );
1370 4 : if( !aStyleName.isEmpty() )
1371 : {
1372 : UniReference < XMLTextImportHelper > xTxtImport =
1373 4 : GetImport().GetTextImport();
1374 4 : XMLPropStyleContext* pStyle( 0L );
1375 4 : pStyle = xTxtImport->FindAutoFrameStyle( aStyleName );
1376 4 : if ( pStyle && pStyle->GetParentName().isEmpty() )
1377 : {
1378 0 : m_HasAutomaticStyleWithoutParentStyle = sal_True;
1379 4 : }
1380 4 : }
1381 : }
1382 23 : else if ( XML_NAMESPACE_TEXT == nPrefix &&
1383 4 : IsXMLToken( aLocalName, XML_ANCHOR_TYPE ) )
1384 : {
1385 : TextContentAnchorType eNew;
1386 16 : if( XMLAnchorTypePropHdl::convert( xAttrList->getValueByIndex(i),
1387 12 : eNew ) &&
1388 : ( TextContentAnchorType_AT_PARAGRAPH == eNew ||
1389 : TextContentAnchorType_AT_CHARACTER == eNew ||
1390 : TextContentAnchorType_AS_CHARACTER == eNew ||
1391 : TextContentAnchorType_AT_PAGE == eNew) )
1392 4 : m_eDefaultAnchorType = eNew;
1393 : }
1394 23 : }
1395 4 : }
1396 :
1397 12 : XMLTextFrameContext::~XMLTextFrameContext()
1398 : {
1399 4 : delete m_pHyperlink;
1400 8 : }
1401 :
1402 4 : void XMLTextFrameContext::EndElement()
1403 : {
1404 : /// solve if multiple image child contexts were imported
1405 4 : solveMultipleImages();
1406 :
1407 4 : SvXMLImportContext *pContext = &m_xImplContext;
1408 4 : XMLTextFrameContext_Impl *pImpl = PTR_CAST( XMLTextFrameContext_Impl, pContext );
1409 4 : if( pImpl )
1410 : {
1411 4 : pImpl->CreateIfNotThere();
1412 :
1413 4 : if( !m_sTitle.isEmpty() )
1414 : {
1415 0 : pImpl->SetTitle( m_sTitle );
1416 : }
1417 4 : if( !m_sDesc.isEmpty() )
1418 : {
1419 0 : pImpl->SetDesc( m_sDesc );
1420 : }
1421 :
1422 4 : if( m_pHyperlink )
1423 : {
1424 0 : pImpl->SetHyperlink( m_pHyperlink->GetHRef(), m_pHyperlink->GetName(),
1425 0 : m_pHyperlink->GetTargetFrameName(), m_pHyperlink->GetMap() );
1426 0 : delete m_pHyperlink;
1427 0 : m_pHyperlink = 0;
1428 : }
1429 :
1430 : }
1431 4 : }
1432 :
1433 5 : SvXMLImportContext *XMLTextFrameContext::CreateChildContext(
1434 : sal_uInt16 p_nPrefix,
1435 : const OUString& rLocalName,
1436 : const Reference< XAttributeList > & xAttrList )
1437 : {
1438 5 : SvXMLImportContext *pContext = 0;
1439 :
1440 5 : if( !m_xImplContext.Is() )
1441 : {
1442 : // no child exists
1443 4 : if( XML_NAMESPACE_DRAW == p_nPrefix )
1444 : {
1445 4 : sal_uInt16 nFrameType = USHRT_MAX;
1446 4 : if( IsXMLToken( rLocalName, XML_TEXT_BOX ) )
1447 3 : nFrameType = XML_TEXT_FRAME_TEXTBOX;
1448 1 : else if( IsXMLToken( rLocalName, XML_IMAGE ) )
1449 0 : nFrameType = XML_TEXT_FRAME_GRAPHIC;
1450 1 : else if( IsXMLToken( rLocalName, XML_OBJECT ) )
1451 1 : nFrameType = XML_TEXT_FRAME_OBJECT;
1452 0 : else if( IsXMLToken( rLocalName, XML_OBJECT_OLE ) )
1453 0 : nFrameType = XML_TEXT_FRAME_OBJECT_OLE;
1454 0 : else if( IsXMLToken( rLocalName, XML_APPLET) )
1455 0 : nFrameType = XML_TEXT_FRAME_APPLET;
1456 0 : else if( IsXMLToken( rLocalName, XML_PLUGIN ) )
1457 0 : nFrameType = XML_TEXT_FRAME_PLUGIN;
1458 0 : else if( IsXMLToken( rLocalName, XML_FLOATING_FRAME ) )
1459 0 : nFrameType = XML_TEXT_FRAME_FLOATING_FRAME;
1460 :
1461 4 : if( USHRT_MAX != nFrameType )
1462 : {
1463 : // Shapes in Writer cannot be named via context menu (#i51726#)
1464 4 : if ( ( XML_TEXT_FRAME_TEXTBOX == nFrameType ||
1465 : XML_TEXT_FRAME_GRAPHIC == nFrameType ) &&
1466 : m_HasAutomaticStyleWithoutParentStyle )
1467 : {
1468 0 : Reference < XShapes > xShapes;
1469 0 : pContext = GetImport().GetShapeImport()->CreateFrameChildContext(
1470 0 : GetImport(), p_nPrefix, rLocalName, xAttrList, xShapes, m_xAttrList );
1471 : }
1472 4 : else if( XML_TEXT_FRAME_PLUGIN == nFrameType )
1473 : {
1474 0 : bool bMedia = false;
1475 :
1476 : // check, if we have a media object
1477 0 : for( sal_Int16 n = 0, nAttrCount = ( xAttrList.is() ? xAttrList->getLength() : 0 ); n < nAttrCount; ++n )
1478 : {
1479 0 : OUString aLocalName;
1480 0 : sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( xAttrList->getNameByIndex( n ), &aLocalName );
1481 :
1482 0 : if( nPrefix == XML_NAMESPACE_DRAW && IsXMLToken( aLocalName, XML_MIME_TYPE ) )
1483 : {
1484 0 : if( 0 == xAttrList->getValueByIndex( n ).compareToAscii( "application/vnd.sun.star.media" ) )
1485 0 : bMedia = true;
1486 :
1487 : // leave this loop
1488 0 : n = nAttrCount - 1;
1489 : }
1490 0 : }
1491 :
1492 0 : if( bMedia )
1493 : {
1494 0 : Reference < XShapes > xShapes;
1495 0 : pContext = GetImport().GetShapeImport()->CreateFrameChildContext(
1496 0 : GetImport(), p_nPrefix, rLocalName, xAttrList, xShapes, m_xAttrList );
1497 : }
1498 : }
1499 4 : else if( XML_TEXT_FRAME_OBJECT == nFrameType ||
1500 : XML_TEXT_FRAME_OBJECT_OLE == nFrameType )
1501 : {
1502 1 : m_bSupportsReplacement = sal_True;
1503 : }
1504 3 : else if(XML_TEXT_FRAME_GRAPHIC == nFrameType)
1505 : {
1506 0 : setSupportsMultipleContents(IsXMLToken(rLocalName, XML_IMAGE));
1507 : }
1508 :
1509 4 : if( !pContext )
1510 : {
1511 :
1512 4 : pContext = new XMLTextFrameContext_Impl( GetImport(), p_nPrefix,
1513 : rLocalName, xAttrList,
1514 : m_eDefaultAnchorType,
1515 : nFrameType,
1516 4 : m_xAttrList );
1517 : }
1518 :
1519 4 : m_xImplContext = pContext;
1520 :
1521 4 : if(getSupportsMultipleContents() && XML_TEXT_FRAME_GRAPHIC == nFrameType)
1522 : {
1523 0 : addContent(*m_xImplContext);
1524 : }
1525 : }
1526 : }
1527 : }
1528 1 : else if(getSupportsMultipleContents() && XML_NAMESPACE_DRAW == p_nPrefix && IsXMLToken(rLocalName, XML_IMAGE))
1529 : {
1530 : // read another image
1531 : pContext = new XMLTextFrameContext_Impl(
1532 0 : GetImport(), p_nPrefix, rLocalName, xAttrList,
1533 0 : m_eDefaultAnchorType, XML_TEXT_FRAME_GRAPHIC, m_xAttrList);
1534 :
1535 0 : m_xImplContext = pContext;
1536 0 : addContent(*m_xImplContext);
1537 : }
1538 2 : else if( m_bSupportsReplacement && !m_xReplImplContext &&
1539 : XML_NAMESPACE_DRAW == p_nPrefix &&
1540 1 : IsXMLToken( rLocalName, XML_IMAGE ) )
1541 : {
1542 : // read replacement image
1543 1 : Reference < XPropertySet > xPropSet;
1544 1 : if( CreateIfNotThere( xPropSet ) )
1545 : {
1546 1 : pContext = new XMLReplacementImageContext( GetImport(),
1547 1 : p_nPrefix, rLocalName, xAttrList, xPropSet );
1548 1 : m_xReplImplContext = pContext;
1549 1 : }
1550 : }
1551 0 : else if( m_xImplContext->ISA( XMLTextFrameContext_Impl ) )
1552 : {
1553 : // the child is a writer frame
1554 0 : if( XML_NAMESPACE_SVG == p_nPrefix )
1555 : {
1556 : // Implement Title/Description Elements UI (#i73249#)
1557 0 : const bool bOld = SvXMLImport::OOo_2x >= GetImport().getGeneratorVersion();
1558 0 : if ( bOld )
1559 : {
1560 0 : if ( IsXMLToken( rLocalName, XML_DESC ) )
1561 : {
1562 0 : pContext = new XMLTextFrameTitleOrDescContext_Impl( GetImport(),
1563 : p_nPrefix,
1564 : rLocalName,
1565 0 : m_sTitle );
1566 : }
1567 : }
1568 : else
1569 : {
1570 0 : if( IsXMLToken( rLocalName, XML_TITLE ) )
1571 : {
1572 0 : pContext = new XMLTextFrameTitleOrDescContext_Impl( GetImport(),
1573 : p_nPrefix,
1574 : rLocalName,
1575 0 : m_sTitle );
1576 : }
1577 0 : else if ( IsXMLToken( rLocalName, XML_DESC ) )
1578 : {
1579 0 : pContext = new XMLTextFrameTitleOrDescContext_Impl( GetImport(),
1580 : p_nPrefix,
1581 : rLocalName,
1582 0 : m_sDesc );
1583 : }
1584 : }
1585 : }
1586 0 : else if( XML_NAMESPACE_DRAW == p_nPrefix )
1587 : {
1588 0 : Reference < XPropertySet > xPropSet;
1589 0 : if( IsXMLToken( rLocalName, XML_CONTOUR_POLYGON ) )
1590 : {
1591 0 : if( CreateIfNotThere( xPropSet ) )
1592 0 : pContext = new XMLTextFrameContourContext_Impl( GetImport(), p_nPrefix, rLocalName,
1593 0 : xAttrList, xPropSet, sal_False );
1594 : }
1595 0 : else if( IsXMLToken( rLocalName, XML_CONTOUR_PATH ) )
1596 : {
1597 0 : if( CreateIfNotThere( xPropSet ) )
1598 0 : pContext = new XMLTextFrameContourContext_Impl( GetImport(), p_nPrefix, rLocalName,
1599 0 : xAttrList, xPropSet, sal_True );
1600 : }
1601 0 : else if( IsXMLToken( rLocalName, XML_IMAGE_MAP ) )
1602 : {
1603 0 : if( CreateIfNotThere( xPropSet ) )
1604 0 : pContext = new XMLImageMapContext( GetImport(), p_nPrefix, rLocalName, xPropSet );
1605 0 : }
1606 : }
1607 0 : else if( (XML_NAMESPACE_OFFICE == p_nPrefix) && IsXMLToken( rLocalName, XML_EVENT_LISTENERS ) )
1608 : {
1609 : // do we still have the frame object?
1610 0 : Reference < XPropertySet > xPropSet;
1611 0 : if( CreateIfNotThere( xPropSet ) )
1612 : {
1613 : // is it an event supplier?
1614 0 : Reference<XEventsSupplier> xEventsSupplier(xPropSet, UNO_QUERY);
1615 0 : if (xEventsSupplier.is())
1616 : {
1617 : // OK, we have the events, so create the context
1618 0 : pContext = new XMLEventsImportContext(GetImport(), p_nPrefix,
1619 0 : rLocalName, xEventsSupplier);
1620 0 : }
1621 0 : }
1622 : }
1623 : }
1624 0 : else if( p_nPrefix == XML_NAMESPACE_SVG && // #i68101#
1625 0 : (IsXMLToken( rLocalName, XML_TITLE ) || IsXMLToken( rLocalName, XML_DESC ) ) )
1626 : {
1627 0 : pContext = m_xImplContext->CreateChildContext( p_nPrefix, rLocalName, xAttrList );
1628 : }
1629 : else
1630 : {
1631 : // the child is a drawing shape
1632 0 : pContext = GetImport().GetShapeImport()->CreateFrameChildContext(
1633 0 : &m_xImplContext, p_nPrefix, rLocalName, xAttrList );
1634 : }
1635 :
1636 5 : if( !pContext )
1637 0 : pContext = new SvXMLImportContext( GetImport(), p_nPrefix, rLocalName );
1638 :
1639 5 : return pContext;
1640 : }
1641 :
1642 0 : void XMLTextFrameContext::SetHyperlink( const OUString& rHRef,
1643 : const OUString& rName,
1644 : const OUString& rTargetFrameName,
1645 : sal_Bool bMap )
1646 : {
1647 : OSL_ENSURE( !m_pHyperlink, "recursive SetHyperlink call" );
1648 0 : delete m_pHyperlink;
1649 : m_pHyperlink = new XMLTextFrameContextHyperlink_Impl(
1650 0 : rHRef, rName, rTargetFrameName, bMap );
1651 0 : }
1652 :
1653 5 : TextContentAnchorType XMLTextFrameContext::GetAnchorType() const
1654 : {
1655 5 : SvXMLImportContext *pContext = &m_xImplContext;
1656 5 : XMLTextFrameContext_Impl *pImpl = PTR_CAST( XMLTextFrameContext_Impl, pContext );
1657 5 : if( pImpl )
1658 1 : return pImpl->GetAnchorType();
1659 : else
1660 4 : return m_eDefaultAnchorType;
1661 : }
1662 :
1663 1 : Reference < XTextContent > XMLTextFrameContext::GetTextContent() const
1664 : {
1665 1 : Reference < XTextContent > xTxtCntnt;
1666 1 : SvXMLImportContext *pContext = &m_xImplContext;
1667 1 : XMLTextFrameContext_Impl *pImpl = PTR_CAST( XMLTextFrameContext_Impl, pContext );
1668 1 : if( pImpl )
1669 1 : xTxtCntnt.set( pImpl->GetPropSet(), UNO_QUERY );
1670 :
1671 1 : return xTxtCntnt;
1672 : }
1673 :
1674 0 : Reference < XShape > XMLTextFrameContext::GetShape() const
1675 : {
1676 0 : Reference < XShape > xShape;
1677 0 : SvXMLImportContext* pContext = &m_xImplContext;
1678 0 : SvXMLShapeContext* pImpl = PTR_CAST( SvXMLShapeContext, pContext );
1679 0 : if ( pImpl )
1680 : {
1681 0 : xShape = pImpl->getShape();
1682 : }
1683 :
1684 0 : return xShape;
1685 : }
1686 :
1687 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|