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/embed/NoVisualAreaSizeException.hpp>
21 : #include <com/sun/star/container/XChild.hpp>
22 : #include <com/sun/star/drawing/BitmapMode.hpp>
23 : #include <com/sun/star/drawing/FillStyle.hpp>
24 : #include <com/sun/star/awt/Gradient.hpp>
25 : #include <com/sun/star/embed/XClassifiedObject.hpp>
26 : #include <com/sun/star/embed/XVisualObject.hpp>
27 : #include <com/sun/star/embed/XComponentSupplier.hpp>
28 : #include <com/sun/star/embed/EmbedStates.hpp>
29 : #include <com/sun/star/embed/Aspects.hpp>
30 : #include <com/sun/star/graphic/XGraphicProvider.hpp>
31 : #include <com/sun/star/drawing/TextVerticalAdjust.hpp>
32 : #include <svx/svxids.hrc>
33 : #include <svx/xfillit0.hxx>
34 : #include <svx/xflgrit.hxx>
35 : #include <svx/sdtaitm.hxx>
36 : #include <svx/xflclit.hxx>
37 : #include <editeng/memberids.hrc>
38 : #include <swtypes.hxx>
39 : #include <cmdid.h>
40 : #include <memory>
41 : #include <utility>
42 : #include <hints.hxx>
43 : #include <doc.hxx>
44 : #include <drawdoc.hxx>
45 : #include <IDocumentUndoRedo.hxx>
46 : #include <IDocumentDrawModelAccess.hxx>
47 : #include <IDocumentLayoutAccess.hxx>
48 : #include <IDocumentStylePoolAccess.hxx>
49 : #include <docsh.hxx>
50 : #include <editsh.hxx>
51 : #include <swcli.hxx>
52 : #include <ndindex.hxx>
53 : #include <pam.hxx>
54 : #include <ndnotxt.hxx>
55 : #include <svx/unomid.hxx>
56 : #include <unocrsr.hxx>
57 : #include <unocrsrhelper.hxx>
58 : #include <docstyle.hxx>
59 : #include <dcontact.hxx>
60 : #include <fmtcnct.hxx>
61 : #include <ndole.hxx>
62 : #include <frmfmt.hxx>
63 : #include <frame.hxx>
64 : #include <textboxhelper.hxx>
65 : #include <unotextrange.hxx>
66 : #include <unotextcursor.hxx>
67 : #include <unoparagraph.hxx>
68 : #include <unomap.hxx>
69 : #include <unoprnms.hxx>
70 : #include <unoevent.hxx>
71 : #include <com/sun/star/util/XModifyBroadcaster.hpp>
72 : #include <com/sun/star/table/ShadowFormat.hpp>
73 : #include <com/sun/star/style/GraphicLocation.hpp>
74 : #include <com/sun/star/text/GraphicCrop.hpp>
75 : #include <com/sun/star/text/TextContentAnchorType.hpp>
76 : #include <com/sun/star/text/XTextColumns.hpp>
77 : #include <com/sun/star/text/WrapTextMode.hpp>
78 : #include <com/sun/star/beans/PropertyAttribute.hpp>
79 : #include <com/sun/star/drawing/PointSequenceSequence.hpp>
80 : #include <com/sun/star/drawing/PointSequence.hpp>
81 : #include <com/sun/star/drawing/ColorMode.hpp>
82 : #include <tools/poly.hxx>
83 : #include <swundo.hxx>
84 : #include <unostyle.hxx>
85 : #include <svx/svdmodel.hxx>
86 : #include <svx/svdpage.hxx>
87 : #include <editeng/brushitem.hxx>
88 : #include <editeng/protitem.hxx>
89 : #include <fmtornt.hxx>
90 : #include <fmturl.hxx>
91 : #include <editeng/lrspitem.hxx>
92 : #include <editeng/ulspitem.hxx>
93 : #include <editeng/boxitem.hxx>
94 : #include <editeng/opaqitem.hxx>
95 : #include <editeng/prntitem.hxx>
96 : #include <editeng/shaditem.hxx>
97 : #include <fmtsrnd.hxx>
98 : #include <fmtfsize.hxx>
99 : #include <grfatr.hxx>
100 : #include <unoframe.hxx>
101 : #include <fmtanchr.hxx>
102 : #include <fmtclds.hxx>
103 : #include <fmtcntnt.hxx>
104 : #include <frmatr.hxx>
105 : #include <ndtxt.hxx>
106 : #include <ndgrf.hxx>
107 : #include <osl/mutex.hxx>
108 : #include <vcl/svapp.hxx>
109 : #include <sfx2/printer.hxx>
110 : #include <SwStyleNameMapper.hxx>
111 : #include <editeng/xmlcnitm.hxx>
112 : #include <poolfmt.hxx>
113 : #include <pagedesc.hxx>
114 : #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
115 : #include <editeng/frmdiritem.hxx>
116 : #include <fmtfollowtextflow.hxx>
117 : #include <fmtwrapinfluenceonobjpos.hxx>
118 : #include <toolkit/helper/vclunohelper.hxx>
119 : #include <calbck.hxx>
120 : #include <comphelper/servicehelper.hxx>
121 : #include <cppuhelper/supportsservice.hxx>
122 :
123 : #include <svx/unobrushitemhelper.hxx>
124 : #include <svx/xbtmpit.hxx>
125 : #include <svx/xgrscit.hxx>
126 : #include <svx/xflbmtit.hxx>
127 : #include <svx/xflbmpit.hxx>
128 : #include <svx/xflbmsxy.hxx>
129 : #include <svx/xflftrit.hxx>
130 : #include <svx/xsflclit.hxx>
131 : #include <svx/xflbmsli.hxx>
132 : #include <svx/xflbtoxy.hxx>
133 : #include <svx/xflbstit.hxx>
134 : #include <svx/xflboxy.hxx>
135 : #include <svx/xflbckit.hxx>
136 : #include <svx/unoshape.hxx>
137 : #include <svx/xflhtit.hxx>
138 : #include <svx/xfltrit.hxx>
139 : #include <swunohelper.hxx>
140 : #include <fefly.hxx>
141 :
142 : using namespace ::com::sun::star;
143 :
144 : using ::com::sun::star::frame::XModel;
145 : using ::com::sun::star::container::XNameAccess;
146 : using ::com::sun::star::style::XStyleFamiliesSupplier;
147 :
148 : const sal_Char sPackageProtocol[] = "vnd.sun.star.Package:";
149 : const sal_Char sGraphicObjectProtocol[] = "vnd.sun.star.GraphicObject:";
150 :
151 1755 : class BaseFrameProperties_Impl
152 : {
153 : SwUnoCursorHelper::SwAnyMapHelper aAnyMap;
154 :
155 : public:
156 : virtual ~BaseFrameProperties_Impl();
157 :
158 : void SetProperty(sal_uInt16 nWID, sal_uInt8 nMemberId, const uno::Any& rVal);
159 : bool GetProperty(sal_uInt16 nWID, sal_uInt8 nMemberId, const uno::Any*& pAny );
160 : bool FillBaseProperties(SfxItemSet& rToSet, const SfxItemSet &rFromSet, bool& rSizeFound);
161 :
162 : virtual bool AnyToItemSet( SwDoc* pDoc, SfxItemSet& rFrmSet, SfxItemSet& rSet, bool& rSizeFound) = 0;
163 : };
164 :
165 1755 : BaseFrameProperties_Impl::~BaseFrameProperties_Impl()
166 : {
167 1755 : }
168 :
169 22993 : void BaseFrameProperties_Impl::SetProperty(sal_uInt16 nWID, sal_uInt8 nMemberId, const uno::Any& rVal)
170 : {
171 22993 : aAnyMap.SetValue( nWID, nMemberId, rVal );
172 22993 : }
173 :
174 178124 : bool BaseFrameProperties_Impl::GetProperty(sal_uInt16 nWID, sal_uInt8 nMemberId, const uno::Any*& rpAny)
175 : {
176 178124 : return aAnyMap.FillValue( nWID, nMemberId, rpAny );
177 : }
178 :
179 1754 : bool BaseFrameProperties_Impl::FillBaseProperties(SfxItemSet& rToSet, const SfxItemSet& rFromSet, bool& rSizeFound)
180 : {
181 : //UUUU assert when the target SfxItemSet has no parent. It *should* have the pDfltFrameFormat
182 : // from SwDoc set as parent (or similar) to have the necessary XFILL_NONE in the ItemSet
183 1754 : if(!rToSet.GetParent())
184 : {
185 : OSL_ENSURE(false, "OOps, target SfxItemSet *should* have a parent which contains XFILL_NONE as XFillStyleItem (!)");
186 : }
187 :
188 1754 : bool bRet = true;
189 : // always add an anchor to the set
190 1754 : SwFormatAnchor aAnchor ( static_cast < const SwFormatAnchor & > ( rFromSet.Get ( RES_ANCHOR ) ) );
191 : {
192 : const ::uno::Any* pAnchorPgNo;
193 1754 : if(GetProperty(RES_ANCHOR, MID_ANCHOR_PAGENUM, pAnchorPgNo))
194 96 : bRet &= ((SfxPoolItem&)aAnchor).PutValue(*pAnchorPgNo, MID_ANCHOR_PAGENUM);
195 : const ::uno::Any* pAnchorType;
196 1754 : if(GetProperty(RES_ANCHOR, MID_ANCHOR_ANCHORTYPE, pAnchorType))
197 1182 : bRet &= ((SfxPoolItem&)aAnchor).PutValue(*pAnchorType, MID_ANCHOR_ANCHORTYPE);
198 : }
199 :
200 1754 : rToSet.Put(aAnchor);
201 :
202 : //UUUU check for SvxBrushItem (RES_BACKGROUND) properties
203 1754 : const ::uno::Any* pCol = 0; GetProperty(RES_BACKGROUND, MID_BACK_COLOR, pCol );
204 1754 : const ::uno::Any* pRGBCol = 0; GetProperty(RES_BACKGROUND, MID_BACK_COLOR_R_G_B, pRGBCol );
205 1754 : const ::uno::Any* pColTrans = 0; GetProperty(RES_BACKGROUND, MID_BACK_COLOR_TRANSPARENCY, pColTrans);
206 1754 : const ::uno::Any* pTrans = 0; GetProperty(RES_BACKGROUND, MID_GRAPHIC_TRANSPARENT, pTrans );
207 1754 : const ::uno::Any* pGrLoc = 0; GetProperty(RES_BACKGROUND, MID_GRAPHIC_POSITION, pGrLoc );
208 1754 : const ::uno::Any* pGrURL = 0; GetProperty(RES_BACKGROUND, MID_GRAPHIC_URL, pGrURL );
209 1754 : const ::uno::Any* pGrFilter = 0; GetProperty(RES_BACKGROUND, MID_GRAPHIC_FILTER, pGrFilter );
210 1754 : const ::uno::Any* pGrTranparency = 0; GetProperty(RES_BACKGROUND, MID_GRAPHIC_TRANSPARENCY, pGrTranparency );
211 : const bool bSvxBrushItemPropertiesUsed(
212 1437 : pCol ||
213 1412 : pTrans ||
214 1394 : pGrURL ||
215 1394 : pGrFilter ||
216 1394 : pGrLoc ||
217 1394 : pGrTranparency ||
218 3059 : pColTrans ||
219 1754 : pRGBCol);
220 :
221 : //UUUU check for FillStyle properties in the range XATTR_FILL_FIRST, XATTR_FILL_LAST
222 1754 : const uno::Any* pXFillStyleItem = 0; GetProperty(XATTR_FILLSTYLE, 0, pXFillStyleItem);
223 1754 : const uno::Any* pXFillColorItem = 0; GetProperty(XATTR_FILLCOLOR, 0, pXFillColorItem);
224 :
225 : // XFillGradientItem: two possible slots supported in UNO API
226 1754 : const uno::Any* pXFillGradientItem = 0; GetProperty(XATTR_FILLGRADIENT, MID_FILLGRADIENT, pXFillGradientItem);
227 1754 : const uno::Any* pXFillGradientNameItem = 0; GetProperty(XATTR_FILLGRADIENT, MID_NAME, pXFillGradientNameItem);
228 :
229 : // XFillHatchItem: two possible slots supported in UNO API
230 1754 : const uno::Any* pXFillHatchItem = 0; GetProperty(XATTR_FILLHATCH, MID_FILLHATCH, pXFillHatchItem);
231 1754 : const uno::Any* pXFillHatchNameItem = 0; GetProperty(XATTR_FILLHATCH, MID_NAME, pXFillHatchNameItem);
232 :
233 : // XFillBitmapItem: three possible slots supported in UNO API
234 1754 : const uno::Any* pXFillBitmapItem = 0; GetProperty(XATTR_FILLBITMAP, MID_BITMAP, pXFillBitmapItem);
235 1754 : const uno::Any* pXFillBitmapNameItem = 0; GetProperty(XATTR_FILLBITMAP, MID_NAME, pXFillBitmapNameItem);
236 1754 : const uno::Any* pXFillBitmapURLItem = 0; GetProperty(XATTR_FILLBITMAP, MID_GRAFURL, pXFillBitmapURLItem);
237 :
238 1754 : const uno::Any* pXFillTransparenceItem = 0; GetProperty(XATTR_FILLTRANSPARENCE, 0, pXFillTransparenceItem);
239 1754 : const uno::Any* pXGradientStepCountItem = 0; GetProperty(XATTR_GRADIENTSTEPCOUNT, 0, pXGradientStepCountItem);
240 1754 : const uno::Any* pXFillBmpPosItem = 0; GetProperty(XATTR_FILLBMP_POS, 0, pXFillBmpPosItem);
241 1754 : const uno::Any* pXFillBmpSizeXItem = 0; GetProperty(XATTR_FILLBMP_SIZEX, 0, pXFillBmpSizeXItem);
242 1754 : const uno::Any* pXFillBmpSizeYItem = 0; GetProperty(XATTR_FILLBMP_SIZEY, 0, pXFillBmpSizeYItem);
243 :
244 : // XFillFloatTransparenceItem: two possible slots supported in UNO API
245 1754 : const uno::Any* pXFillFloatTransparenceItem = 0; GetProperty(XATTR_FILLFLOATTRANSPARENCE, MID_FILLGRADIENT, pXFillFloatTransparenceItem);
246 1754 : const uno::Any* pXFillFloatTransparenceNameItem = 0; GetProperty(XATTR_FILLFLOATTRANSPARENCE, MID_NAME, pXFillFloatTransparenceNameItem);
247 :
248 1754 : const uno::Any* pXSecondaryFillColorItem = 0; GetProperty(XATTR_SECONDARYFILLCOLOR, 0, pXSecondaryFillColorItem);
249 1754 : const uno::Any* pXFillBmpSizeLogItem = 0; GetProperty(XATTR_FILLBMP_SIZELOG, 0, pXFillBmpSizeLogItem);
250 1754 : const uno::Any* pXFillBmpTileOffsetXItem = 0; GetProperty(XATTR_FILLBMP_TILEOFFSETX, 0, pXFillBmpTileOffsetXItem);
251 1754 : const uno::Any* pXFillBmpTileOffsetYItem = 0; GetProperty(XATTR_FILLBMP_TILEOFFSETY, 0, pXFillBmpTileOffsetYItem);
252 1754 : const uno::Any* pXFillBmpPosOffsetXItem = 0; GetProperty(XATTR_FILLBMP_POSOFFSETX, 0, pXFillBmpPosOffsetXItem);
253 1754 : const uno::Any* pXFillBmpPosOffsetYItem = 0; GetProperty(XATTR_FILLBMP_POSOFFSETY, 0, pXFillBmpPosOffsetYItem);
254 1754 : const uno::Any* pXFillBackgroundItem = 0; GetProperty(XATTR_FILLBACKGROUND, 0, pXFillBackgroundItem);
255 1754 : const uno::Any* pOwnAttrFillBmpItem = 0; GetProperty(OWN_ATTR_FILLBMP_MODE, 0, pOwnAttrFillBmpItem);
256 :
257 : // tdf#91140: ignore SOLID fill style for determining if fill style is used
258 : // but there is a GraphicURL
259 2051 : const bool bFillStyleUsed(pXFillStyleItem && pXFillStyleItem->hasValue() &&
260 156 : (pXFillStyleItem->get<drawing::FillStyle>() != drawing::FillStyle_SOLID
261 1814 : || !pGrURL));
262 : SAL_INFO_IF(pXFillStyleItem && pXFillStyleItem->hasValue() && !bFillStyleUsed,
263 : "sw.uno", "FillBaseProperties: ignoring invalid FillStyle");
264 : const bool bXFillStyleItemUsed(
265 1613 : bFillStyleUsed ||
266 1611 : pXFillColorItem ||
267 1611 : pXFillGradientItem || pXFillGradientNameItem ||
268 1611 : pXFillHatchItem || pXFillHatchNameItem ||
269 1611 : pXFillBitmapItem || pXFillBitmapNameItem || pXFillBitmapURLItem ||
270 1580 : pXFillTransparenceItem ||
271 1580 : pXGradientStepCountItem ||
272 1580 : pXFillBmpPosItem ||
273 1577 : pXFillBmpSizeXItem ||
274 1577 : pXFillBmpSizeYItem ||
275 1577 : pXFillFloatTransparenceItem || pXFillFloatTransparenceNameItem ||
276 1577 : pXSecondaryFillColorItem ||
277 1577 : pXFillBmpSizeLogItem ||
278 1577 : pXFillBmpTileOffsetXItem ||
279 1577 : pXFillBmpTileOffsetYItem ||
280 1577 : pXFillBmpPosOffsetXItem ||
281 1577 : pXFillBmpPosOffsetYItem ||
282 3331 : pXFillBackgroundItem ||
283 1754 : pOwnAttrFillBmpItem);
284 :
285 : // use brush items, but *only* if no FillStyle properties are used; if both are used and when applying both
286 : // in the obvious order some attributes may be wrong since they are set by the 1st set, but not
287 : // redefined as needed by the 2nd set when they are default (and thus no tset) in the 2nd set. If
288 : // it is necessary for any reason to set both (it should not) a in-between step will be needed
289 : // that resets the items for FillAttributes in rToSet to default.
290 : // Note: There are other mechanisms in XMLOFF to pre-sort this relationship already, but this version
291 : // was used initially, is tested and works. Keep it to be able to react when another feed adds attributes
292 : // from both sets.
293 1754 : if(bSvxBrushItemPropertiesUsed && !bXFillStyleItemUsed)
294 : {
295 : //UUUU create a temporary SvxBrushItem, fill the attributes to it and use it to set
296 : // the corresponding FillAttributes
297 356 : SvxBrushItem aBrush(RES_BACKGROUND);
298 :
299 356 : if(pCol)
300 : {
301 280 : bRet &= ((SfxPoolItem&)aBrush).PutValue(*pCol,MID_BACK_COLOR );
302 : }
303 :
304 356 : if(pColTrans)
305 : {
306 75 : bRet &= ((SfxPoolItem&)aBrush).PutValue(*pColTrans, MID_BACK_COLOR_TRANSPARENCY);
307 : }
308 :
309 356 : if(pRGBCol)
310 : {
311 12 : bRet &= ((SfxPoolItem&)aBrush).PutValue(*pRGBCol, MID_BACK_COLOR_R_G_B);
312 : }
313 :
314 356 : if(pTrans)
315 : {
316 : // don't overwrite transparency with a non-transparence flag
317 5 : if(!pColTrans || Any2Bool( *pTrans ))
318 5 : bRet &= ((SfxPoolItem&)aBrush).PutValue(*pTrans, MID_GRAPHIC_TRANSPARENT);
319 : }
320 :
321 356 : if(pGrURL)
322 : {
323 15 : bRet &= ((SfxPoolItem&)aBrush).PutValue(*pGrURL, MID_GRAPHIC_URL);
324 : }
325 :
326 356 : if(pGrFilter)
327 : {
328 15 : bRet &= ((SfxPoolItem&)aBrush).PutValue(*pGrFilter, MID_GRAPHIC_FILTER);
329 : }
330 :
331 356 : if(pGrLoc)
332 : {
333 15 : bRet &= ((SfxPoolItem&)aBrush).PutValue(*pGrLoc, MID_GRAPHIC_POSITION);
334 : }
335 :
336 356 : if(pGrTranparency)
337 : {
338 15 : bRet &= ((SfxPoolItem&)aBrush).PutValue(*pGrTranparency, MID_GRAPHIC_TRANSPARENCY);
339 : }
340 :
341 356 : setSvxBrushItemAsFillAttributesToTargetSet(aBrush, rToSet);
342 : }
343 :
344 1754 : if(bXFillStyleItemUsed)
345 : {
346 177 : XFillStyleItem aXFillStyleItem;
347 354 : SvxBrushItem aBrush(RES_BACKGROUND);
348 :
349 177 : if(pXFillStyleItem)
350 : {
351 143 : aXFillStyleItem.PutValue(*pXFillStyleItem);
352 143 : rToSet.Put(aXFillStyleItem);
353 : }
354 :
355 177 : if(pXFillColorItem)
356 : {
357 27 : const Color aNullCol(COL_DEFAULT_SHAPE_FILLING);
358 27 : XFillColorItem aXFillColorItem(OUString(), aNullCol);
359 :
360 27 : aXFillColorItem.PutValue(*pXFillColorItem);
361 27 : rToSet.Put(aXFillColorItem);
362 : //set old-school brush color if we later encounter the
363 : //MID_BACK_COLOR_TRANSPARENCY case below
364 27 : aBrush = getSvxBrushItemFromSourceSet(rToSet, RES_BACKGROUND, false);
365 : }
366 150 : else if (aXFillStyleItem.GetValue() == drawing::FillStyle_SOLID && (pCol || pRGBCol))
367 : {
368 : // Fill style is set to solid, but no fill color is given.
369 : // On the other hand, we have a BackColor, so use that.
370 31 : if (pCol)
371 31 : aBrush.PutValue(*pCol, MID_BACK_COLOR);
372 : else
373 0 : aBrush.PutValue(*pRGBCol, MID_BACK_COLOR_R_G_B);
374 31 : setSvxBrushItemAsFillAttributesToTargetSet(aBrush, rToSet);
375 : }
376 :
377 177 : if(pXFillGradientItem || pXFillGradientNameItem)
378 : {
379 29 : if(pXFillGradientItem)
380 : {
381 12 : const XGradient aNullGrad(RGB_Color(COL_BLACK), RGB_Color(COL_WHITE));
382 12 : XFillGradientItem aXFillGradientItem(aNullGrad);
383 :
384 12 : aXFillGradientItem.PutValue(*pXFillGradientItem, MID_FILLGRADIENT);
385 12 : rToSet.Put(aXFillGradientItem);
386 : }
387 :
388 29 : if(pXFillGradientNameItem)
389 : {
390 17 : OUString aTempName;
391 :
392 17 : if(!(*pXFillGradientNameItem >>= aTempName ))
393 : {
394 0 : throw lang::IllegalArgumentException();
395 : }
396 :
397 : bool const bSuccess = SvxShape::SetFillAttribute(
398 17 : XATTR_FILLGRADIENT, aTempName, rToSet);
399 17 : if (aXFillStyleItem.GetValue() == drawing::FillStyle_GRADIENT)
400 : { // tdf#90946 ignore invalid gradient-name if SOLID
401 17 : bRet &= bSuccess;
402 : }
403 : else
404 : {
405 : SAL_INFO_IF(!bSuccess, "sw.uno",
406 : "FillBaseProperties: ignoring invalid FillGradientName");
407 17 : }
408 : }
409 : }
410 :
411 177 : if(pXFillHatchItem || pXFillHatchNameItem)
412 : {
413 18 : if(pXFillHatchItem)
414 : {
415 0 : const Color aNullCol(COL_DEFAULT_SHAPE_STROKE);
416 0 : const XHatch aNullHatch(aNullCol);
417 0 : XFillHatchItem aXFillHatchItem(rToSet.GetPool(), aNullHatch);
418 :
419 0 : aXFillHatchItem.PutValue(*pXFillHatchItem, MID_FILLHATCH);
420 0 : rToSet.Put(aXFillHatchItem);
421 : }
422 :
423 18 : if(pXFillHatchNameItem)
424 : {
425 18 : OUString aTempName;
426 :
427 18 : if(!(*pXFillHatchNameItem >>= aTempName ))
428 : {
429 0 : throw lang::IllegalArgumentException();
430 : }
431 :
432 18 : bRet &= SvxShape::SetFillAttribute(XATTR_FILLHATCH, aTempName, rToSet);
433 : }
434 : }
435 :
436 177 : if(pXFillBitmapItem || pXFillBitmapNameItem || pXFillBitmapURLItem)
437 : {
438 9 : if(pXFillBitmapItem)
439 : {
440 0 : const Graphic aNullGraphic;
441 0 : XFillBitmapItem aXFillBitmapItem(rToSet.GetPool(), aNullGraphic);
442 :
443 0 : aXFillBitmapItem.PutValue(*pXFillBitmapItem, MID_BITMAP);
444 0 : rToSet.Put(aXFillBitmapItem);
445 : }
446 :
447 9 : if(pXFillBitmapNameItem)
448 : {
449 9 : OUString aTempName;
450 :
451 9 : if(!(*pXFillBitmapNameItem >>= aTempName ))
452 : {
453 0 : throw lang::IllegalArgumentException();
454 : }
455 :
456 9 : bRet &= SvxShape::SetFillAttribute(XATTR_FILLBITMAP, aTempName, rToSet);
457 : }
458 :
459 9 : if(pXFillBitmapURLItem)
460 : {
461 0 : const Graphic aNullGraphic;
462 0 : XFillBitmapItem aXFillBitmapItem(rToSet.GetPool(), aNullGraphic);
463 :
464 0 : aXFillBitmapItem.PutValue(*pXFillBitmapURLItem, MID_GRAFURL);
465 0 : rToSet.Put(aXFillBitmapItem);
466 : }
467 : }
468 :
469 177 : if (pXFillTransparenceItem)
470 : {
471 89 : XFillTransparenceItem aXFillTransparenceItem;
472 89 : aXFillTransparenceItem.PutValue(*pXFillTransparenceItem);
473 89 : rToSet.Put(aXFillTransparenceItem);
474 : }
475 104 : else if (pColTrans &&
476 32 : !pXFillFloatTransparenceItem && !pXFillFloatTransparenceNameItem)
477 : {
478 : // No fill transparency is given. On the other hand, we have a
479 : // BackColorTransparency, so use that.
480 : // tdf#90640 tdf#90130: this is necessary for LO 4.4.0 - 4.4.2
481 : // that forgot to write draw:opacity into documents
482 : // but: the value was *always* wrong for bitmaps! => ignore it
483 4 : sal_Int8 nGraphicTransparency(0);
484 4 : *pColTrans >>= nGraphicTransparency;
485 4 : if (aXFillStyleItem.GetValue() != drawing::FillStyle_BITMAP)
486 : {
487 4 : rToSet.Put(XFillTransparenceItem(nGraphicTransparency));
488 : }
489 4 : if (aXFillStyleItem.GetValue() == drawing::FillStyle_SOLID)
490 : {
491 2 : aBrush.PutValue(*pColTrans, MID_BACK_COLOR_TRANSPARENCY);
492 2 : setSvxBrushItemAsFillAttributesToTargetSet(aBrush, rToSet);
493 : }
494 : }
495 :
496 177 : if(pXGradientStepCountItem)
497 : {
498 0 : XGradientStepCountItem aXGradientStepCountItem;
499 :
500 0 : aXGradientStepCountItem.PutValue(*pXGradientStepCountItem);
501 0 : rToSet.Put(aXGradientStepCountItem);
502 : }
503 :
504 177 : if(pXFillBmpPosItem)
505 : {
506 0 : XFillBmpPosItem aXFillBmpPosItem;
507 :
508 0 : aXFillBmpPosItem.PutValue(*pXFillBmpPosItem);
509 0 : rToSet.Put(aXFillBmpPosItem);
510 : }
511 :
512 177 : if(pXFillBmpSizeXItem)
513 : {
514 51 : XFillBmpSizeXItem aXFillBmpSizeXItem;
515 :
516 51 : aXFillBmpSizeXItem.PutValue(*pXFillBmpSizeXItem);
517 51 : rToSet.Put(aXFillBmpSizeXItem);
518 : }
519 :
520 177 : if(pXFillBmpSizeYItem)
521 : {
522 51 : XFillBmpSizeYItem aXFillBmpSizeYItem;
523 :
524 51 : aXFillBmpSizeYItem.PutValue(*pXFillBmpSizeYItem);
525 51 : rToSet.Put(aXFillBmpSizeYItem);
526 : }
527 :
528 177 : if(pXFillFloatTransparenceItem || pXFillFloatTransparenceNameItem)
529 : {
530 15 : if(pXFillFloatTransparenceItem)
531 : {
532 0 : const XGradient aNullGrad(RGB_Color(COL_BLACK), RGB_Color(COL_WHITE));
533 0 : XFillFloatTransparenceItem aXFillFloatTransparenceItem(rToSet.GetPool(), aNullGrad, false);
534 :
535 0 : aXFillFloatTransparenceItem.PutValue(*pXFillFloatTransparenceItem, MID_FILLGRADIENT);
536 0 : rToSet.Put(aXFillFloatTransparenceItem);
537 : }
538 :
539 15 : if(pXFillFloatTransparenceNameItem)
540 : {
541 15 : OUString aTempName;
542 :
543 15 : if(!(*pXFillFloatTransparenceNameItem >>= aTempName ))
544 : {
545 0 : throw lang::IllegalArgumentException();
546 : }
547 :
548 15 : bRet &= SvxShape::SetFillAttribute(XATTR_FILLFLOATTRANSPARENCE, aTempName, rToSet);
549 : }
550 : }
551 :
552 177 : if(pXSecondaryFillColorItem)
553 : {
554 0 : const Color aNullCol(COL_DEFAULT_SHAPE_FILLING);
555 0 : XSecondaryFillColorItem aXSecondaryFillColorItem(OUString(), aNullCol);
556 :
557 0 : aXSecondaryFillColorItem.PutValue(*pXSecondaryFillColorItem);
558 0 : rToSet.Put(aXSecondaryFillColorItem);
559 : }
560 :
561 177 : if(pXFillBmpSizeLogItem)
562 : {
563 51 : XFillBmpSizeLogItem aXFillBmpSizeLogItem;
564 :
565 51 : aXFillBmpSizeLogItem.PutValue(*pXFillBmpSizeLogItem);
566 51 : rToSet.Put(aXFillBmpSizeLogItem);
567 : }
568 :
569 177 : if(pXFillBmpTileOffsetXItem)
570 : {
571 0 : XFillBmpTileOffsetXItem aXFillBmpTileOffsetXItem;
572 :
573 0 : aXFillBmpTileOffsetXItem.PutValue(*pXFillBmpTileOffsetXItem);
574 0 : rToSet.Put(aXFillBmpTileOffsetXItem);
575 : }
576 :
577 177 : if(pXFillBmpTileOffsetYItem)
578 : {
579 0 : XFillBmpTileOffsetYItem aXFillBmpTileOffsetYItem;
580 :
581 0 : aXFillBmpTileOffsetYItem.PutValue(*pXFillBmpTileOffsetYItem);
582 0 : rToSet.Put(aXFillBmpTileOffsetYItem);
583 : }
584 :
585 177 : if(pXFillBmpPosOffsetXItem)
586 : {
587 0 : XFillBmpPosOffsetXItem aXFillBmpPosOffsetXItem;
588 :
589 0 : aXFillBmpPosOffsetXItem.PutValue(*pXFillBmpPosOffsetXItem);
590 0 : rToSet.Put(aXFillBmpPosOffsetXItem);
591 : }
592 :
593 177 : if(pXFillBmpPosOffsetYItem)
594 : {
595 0 : XFillBmpPosOffsetYItem aXFillBmpPosOffsetYItem;
596 :
597 0 : aXFillBmpPosOffsetYItem.PutValue(*pXFillBmpPosOffsetYItem);
598 0 : rToSet.Put(aXFillBmpPosOffsetYItem);
599 : }
600 :
601 177 : if(pXFillBackgroundItem)
602 : {
603 18 : XFillBackgroundItem aXFillBackgroundItem;
604 :
605 18 : aXFillBackgroundItem.PutValue(*pXFillBackgroundItem);
606 18 : rToSet.Put(aXFillBackgroundItem);
607 : }
608 :
609 177 : if(pOwnAttrFillBmpItem)
610 : {
611 : drawing::BitmapMode eMode;
612 :
613 0 : if(!(*pOwnAttrFillBmpItem >>= eMode))
614 : {
615 0 : sal_Int32 nMode = 0;
616 :
617 0 : if(!(*pOwnAttrFillBmpItem >>= nMode))
618 : {
619 0 : throw lang::IllegalArgumentException();
620 : }
621 :
622 0 : eMode = (drawing::BitmapMode)nMode;
623 : }
624 :
625 0 : rToSet.Put(XFillBmpStretchItem(drawing::BitmapMode_STRETCH == eMode));
626 0 : rToSet.Put(XFillBmpTileItem(drawing::BitmapMode_REPEAT == eMode));
627 177 : }
628 : }
629 : {
630 1754 : const ::uno::Any* pCont = 0;
631 1754 : GetProperty(RES_PROTECT, MID_PROTECT_CONTENT, pCont );
632 1754 : const ::uno::Any* pPos = 0;
633 1754 : GetProperty(RES_PROTECT,MID_PROTECT_POSITION, pPos );
634 1754 : const ::uno::Any* pName = 0;
635 1754 : GetProperty(RES_PROTECT, MID_PROTECT_SIZE, pName );
636 1754 : if(pCont||pPos||pName)
637 : {
638 33 : SvxProtectItem aProt ( static_cast < const :: SvxProtectItem & > ( rFromSet.Get ( RES_PROTECT ) ) );
639 33 : if(pCont)
640 33 : bRet &= ((SfxPoolItem&)aProt).PutValue(*pCont, MID_PROTECT_CONTENT);
641 33 : if(pPos )
642 33 : bRet &= ((SfxPoolItem&)aProt).PutValue(*pPos, MID_PROTECT_POSITION);
643 33 : if(pName)
644 33 : bRet &= ((SfxPoolItem&)aProt).PutValue(*pName, MID_PROTECT_SIZE);
645 33 : rToSet.Put(aProt);
646 : }
647 : }
648 : {
649 1754 : const ::uno::Any* pHori = 0;
650 1754 : GetProperty(RES_HORI_ORIENT, MID_HORIORIENT_ORIENT, pHori );
651 1754 : const ::uno::Any* pHoriP = 0;
652 1754 : GetProperty(RES_HORI_ORIENT, MID_HORIORIENT_POSITION|CONVERT_TWIPS, pHoriP );
653 1754 : const ::uno::Any* pHoriR = 0;
654 1754 : GetProperty(RES_HORI_ORIENT, MID_HORIORIENT_RELATION, pHoriR );
655 1754 : const ::uno::Any* pPageT = 0;
656 1754 : GetProperty(RES_HORI_ORIENT, MID_HORIORIENT_PAGETOGGLE, pPageT);
657 1754 : if(pHori||pHoriP||pHoriR||pPageT)
658 : {
659 698 : SwFormatHoriOrient aOrient ( static_cast < const :: SwFormatHoriOrient & > ( rFromSet.Get ( RES_HORI_ORIENT ) ) );
660 698 : if(pHori )
661 561 : bRet &= ((SfxPoolItem&)aOrient).PutValue(*pHori, MID_HORIORIENT_ORIENT);
662 698 : if(pHoriP)
663 636 : bRet &= ((SfxPoolItem&)aOrient).PutValue(*pHoriP, MID_HORIORIENT_POSITION|CONVERT_TWIPS);
664 698 : if(pHoriR)
665 505 : bRet &= ((SfxPoolItem&)aOrient).PutValue(*pHoriR, MID_HORIORIENT_RELATION);
666 698 : if(pPageT)
667 292 : bRet &= ((SfxPoolItem&)aOrient).PutValue(*pPageT, MID_HORIORIENT_PAGETOGGLE);
668 698 : rToSet.Put(aOrient);
669 : }
670 : }
671 :
672 : {
673 1754 : const ::uno::Any* pVert = 0;
674 1754 : GetProperty(RES_VERT_ORIENT, MID_VERTORIENT_ORIENT, pVert);
675 1754 : const ::uno::Any* pVertP = 0;
676 1754 : GetProperty(RES_VERT_ORIENT, MID_VERTORIENT_POSITION|CONVERT_TWIPS, pVertP );
677 1754 : const ::uno::Any* pVertR = 0;
678 1754 : GetProperty(RES_VERT_ORIENT, MID_VERTORIENT_RELATION, pVertR );
679 1754 : if(pVert||pVertP||pVertR)
680 : {
681 647 : SwFormatVertOrient aOrient ( static_cast < const :: SwFormatVertOrient & > ( rFromSet.Get ( RES_VERT_ORIENT ) ) );
682 647 : if(pVert )
683 558 : bRet &= ((SfxPoolItem&)aOrient).PutValue(*pVert, MID_VERTORIENT_ORIENT);
684 647 : if(pVertP)
685 588 : bRet &= ((SfxPoolItem&)aOrient).PutValue(*pVertP, MID_VERTORIENT_POSITION|CONVERT_TWIPS);
686 647 : if(pVertR)
687 468 : bRet &= ((SfxPoolItem&)aOrient).PutValue(*pVertR, MID_VERTORIENT_RELATION);
688 647 : rToSet.Put(aOrient);
689 : }
690 : }
691 : {
692 1754 : const ::uno::Any* pURL = 0;
693 1754 : GetProperty(RES_URL, MID_URL_URL, pURL );
694 1754 : const ::uno::Any* pTarget = 0;
695 1754 : GetProperty(RES_URL, MID_URL_TARGET, pTarget );
696 1754 : const ::uno::Any* pHyLNm = 0;
697 1754 : GetProperty(RES_URL, MID_URL_HYPERLINKNAME, pHyLNm );
698 1754 : const ::uno::Any* pHySMp = 0;
699 1754 : GetProperty(RES_URL, MID_URL_SERVERMAP, pHySMp );
700 1754 : if(pURL||pTarget||pHyLNm||pHySMp)
701 : {
702 0 : SwFormatURL aURL ( static_cast < const :: SwFormatURL & > ( rFromSet.Get ( RES_URL ) ) );
703 0 : if(pURL)
704 0 : bRet &= ((SfxPoolItem&)aURL).PutValue(*pURL, MID_URL_URL);
705 0 : if(pTarget)
706 0 : bRet &= ((SfxPoolItem&)aURL).PutValue(*pTarget, MID_URL_TARGET);
707 0 : if(pHyLNm)
708 0 : bRet &= ((SfxPoolItem&)aURL).PutValue(*pHyLNm, MID_URL_HYPERLINKNAME );
709 0 : if(pHySMp)
710 0 : bRet &= ((SfxPoolItem&)aURL).PutValue(*pHySMp, MID_URL_SERVERMAP);
711 0 : rToSet.Put(aURL);
712 : }
713 : }
714 1754 : const ::uno::Any* pL = 0;
715 1754 : GetProperty(RES_LR_SPACE, MID_L_MARGIN|CONVERT_TWIPS, pL );
716 1754 : const ::uno::Any* pR = 0;
717 1754 : GetProperty(RES_LR_SPACE, MID_R_MARGIN|CONVERT_TWIPS, pR );
718 1754 : if(pL||pR)
719 : {
720 506 : SvxLRSpaceItem aLR ( static_cast < const :: SvxLRSpaceItem & > ( rFromSet.Get ( RES_LR_SPACE ) ) );
721 506 : if(pL)
722 506 : bRet &= ((SfxPoolItem&)aLR).PutValue(*pL, MID_L_MARGIN|CONVERT_TWIPS);
723 506 : if(pR)
724 506 : bRet &= ((SfxPoolItem&)aLR).PutValue(*pR, MID_R_MARGIN|CONVERT_TWIPS);
725 506 : rToSet.Put(aLR);
726 : }
727 1754 : const ::uno::Any* pT = 0;
728 1754 : GetProperty(RES_UL_SPACE, MID_UP_MARGIN|CONVERT_TWIPS, pT );
729 1754 : const ::uno::Any* pB = 0;
730 1754 : GetProperty(RES_UL_SPACE, MID_LO_MARGIN|CONVERT_TWIPS, pB );
731 1754 : if(pT||pB)
732 : {
733 504 : SvxULSpaceItem aTB ( static_cast < const :: SvxULSpaceItem &> ( rFromSet.Get ( RES_UL_SPACE ) ) );
734 504 : if(pT)
735 504 : bRet &= ((SfxPoolItem&)aTB).PutValue(*pT, MID_UP_MARGIN|CONVERT_TWIPS);
736 504 : if(pB)
737 504 : bRet &= ((SfxPoolItem&)aTB).PutValue(*pB, MID_LO_MARGIN|CONVERT_TWIPS);
738 504 : rToSet.Put(aTB);
739 : }
740 : const ::uno::Any* pOp;
741 1754 : if(GetProperty(RES_OPAQUE, 0, pOp))
742 : {
743 241 : SvxOpaqueItem aOp ( static_cast < const :: SvxOpaqueItem& > ( rFromSet.Get ( RES_OPAQUE ) ) );
744 241 : bRet &= ((SfxPoolItem&)aOp).PutValue(*pOp, 0);
745 241 : rToSet.Put(aOp);
746 : }
747 : const ::uno::Any* pPrt;
748 1754 : if(GetProperty(RES_PRINT, 0, pPrt))
749 : {
750 0 : SvxPrintItem aPrt ( static_cast < const :: SvxPrintItem & > ( rFromSet.Get ( RES_PRINT ) ) );
751 0 : bRet &= ((SfxPoolItem&)aPrt).PutValue(*pPrt, 0);
752 0 : rToSet.Put(aPrt);
753 : }
754 : const ::uno::Any* pSh;
755 1754 : if(GetProperty(RES_SHADOW, CONVERT_TWIPS, pSh))
756 : {
757 94 : SvxShadowItem aSh ( static_cast < const :: SvxShadowItem& > ( rFromSet.Get ( RES_SHADOW ) ) );
758 94 : bRet &= ((SfxPoolItem&)aSh).PutValue(*pSh, CONVERT_TWIPS);
759 94 : rToSet.Put(aSh);
760 : }
761 : const ::uno::Any* pShTr;
762 1754 : if(GetProperty(RES_SHADOW, MID_SHADOW_TRANSPARENCE, pShTr) && rToSet.HasItem(RES_SHADOW))
763 : {
764 46 : SvxShadowItem aSh(static_cast<const SvxShadowItem&>(rToSet.Get(RES_SHADOW)));
765 46 : bRet &= aSh.PutValue(*pShTr, MID_SHADOW_TRANSPARENCE);
766 46 : rToSet.Put(aSh);
767 : }
768 1754 : const ::uno::Any* pSur = 0;
769 1754 : GetProperty(RES_SURROUND, MID_SURROUND_SURROUNDTYPE, pSur);
770 1754 : const ::uno::Any* pSurAnch = 0;
771 1754 : GetProperty(RES_SURROUND, MID_SURROUND_ANCHORONLY, pSurAnch);
772 1754 : if(pSur || pSurAnch)
773 : {
774 503 : SwFormatSurround aSrnd ( static_cast < const :: SwFormatSurround & > ( rFromSet.Get ( RES_SURROUND ) ) );
775 503 : if(pSur)
776 503 : bRet &= ((SfxPoolItem&)aSrnd).PutValue(*pSur, MID_SURROUND_SURROUNDTYPE );
777 503 : if(pSurAnch)
778 52 : bRet &= ((SfxPoolItem&)aSrnd).PutValue(*pSurAnch, MID_SURROUND_ANCHORONLY);
779 503 : rToSet.Put(aSrnd);
780 : }
781 1754 : const ::uno::Any* pLeft = 0;
782 1754 : GetProperty(RES_BOX, LEFT_BORDER |CONVERT_TWIPS, pLeft );
783 1754 : const ::uno::Any* pRight = 0;
784 1754 : GetProperty(RES_BOX, CONVERT_TWIPS|RIGHT_BORDER , pRight );
785 1754 : const ::uno::Any* pTop = 0;
786 1754 : GetProperty(RES_BOX, CONVERT_TWIPS|TOP_BORDER , pTop );
787 1754 : const ::uno::Any* pBottom = 0;
788 1754 : GetProperty(RES_BOX, CONVERT_TWIPS|BOTTOM_BORDER, pBottom);
789 1754 : const ::uno::Any* pDistance = 0;
790 1754 : GetProperty(RES_BOX, CONVERT_TWIPS|BORDER_DISTANCE, pDistance);
791 1754 : const ::uno::Any* pLeftDistance = 0;
792 1754 : GetProperty(RES_BOX, CONVERT_TWIPS|LEFT_BORDER_DISTANCE, pLeftDistance);
793 1754 : const ::uno::Any* pRightDistance = 0;
794 1754 : GetProperty(RES_BOX, CONVERT_TWIPS|RIGHT_BORDER_DISTANCE, pRightDistance);
795 1754 : const ::uno::Any* pTopDistance = 0;
796 1754 : GetProperty(RES_BOX, CONVERT_TWIPS|TOP_BORDER_DISTANCE, pTopDistance);
797 1754 : const ::uno::Any* pBottomDistance = 0;
798 1754 : GetProperty(RES_BOX, CONVERT_TWIPS|BOTTOM_BORDER_DISTANCE, pBottomDistance);
799 1754 : const ::uno::Any* pLineStyle = 0;
800 1754 : GetProperty(RES_BOX, LINE_STYLE, pLineStyle);
801 1754 : const ::uno::Any* pLineWidth = 0;
802 1754 : GetProperty(RES_BOX, LINE_WIDTH, pLineWidth);
803 1754 : if( pLeft || pRight || pTop || pBottom || pDistance ||
804 1184 : pLeftDistance || pRightDistance || pTopDistance || pBottomDistance ||
805 1184 : pLineStyle || pLineWidth )
806 : {
807 570 : SvxBoxItem aBox ( static_cast < const :: SvxBoxItem & > ( rFromSet.Get ( RES_BOX ) ) );
808 570 : if( pLeft )
809 522 : bRet &= ((SfxPoolItem&)aBox).PutValue(*pLeft, CONVERT_TWIPS|LEFT_BORDER );
810 570 : if( pRight )
811 522 : bRet &= ((SfxPoolItem&)aBox).PutValue(*pRight, CONVERT_TWIPS|RIGHT_BORDER );
812 570 : if( pTop )
813 522 : bRet &= ((SfxPoolItem&)aBox).PutValue(*pTop, CONVERT_TWIPS|TOP_BORDER);
814 570 : if( pBottom )
815 522 : bRet &= ((SfxPoolItem&)aBox).PutValue(*pBottom, CONVERT_TWIPS|BOTTOM_BORDER);
816 570 : if( pDistance )
817 0 : bRet &= ((SfxPoolItem&)aBox).PutValue(*pDistance, CONVERT_TWIPS|BORDER_DISTANCE);
818 570 : if( pLeftDistance )
819 291 : bRet &= ((SfxPoolItem&)aBox).PutValue(*pLeftDistance, CONVERT_TWIPS|LEFT_BORDER_DISTANCE);
820 570 : if( pRightDistance )
821 291 : bRet &= ((SfxPoolItem&)aBox).PutValue(*pRightDistance, CONVERT_TWIPS|RIGHT_BORDER_DISTANCE);
822 570 : if( pTopDistance )
823 291 : bRet &= ((SfxPoolItem&)aBox).PutValue(*pTopDistance, CONVERT_TWIPS|TOP_BORDER_DISTANCE);
824 570 : if( pBottomDistance )
825 291 : bRet &= ((SfxPoolItem&)aBox).PutValue(*pBottomDistance, CONVERT_TWIPS|BOTTOM_BORDER_DISTANCE);
826 570 : if( pLineStyle )
827 81 : bRet &= ((SfxPoolItem&)aBox).PutValue(*pLineStyle, LINE_STYLE);
828 570 : if( pLineWidth )
829 0 : bRet &= ((SfxPoolItem&)aBox).PutValue(*pLineWidth, LINE_WIDTH|CONVERT_TWIPS);
830 570 : rToSet.Put(aBox);
831 : }
832 : {
833 1754 : const ::uno::Any* pRelH = 0;
834 1754 : GetProperty(RES_FRM_SIZE, MID_FRMSIZE_REL_HEIGHT, pRelH);
835 1754 : const ::uno::Any* pRelHRelation = 0;
836 1754 : GetProperty(RES_FRM_SIZE, MID_FRMSIZE_REL_HEIGHT_RELATION, pRelHRelation);
837 1754 : const ::uno::Any* pRelW = 0;
838 1754 : GetProperty(RES_FRM_SIZE, MID_FRMSIZE_REL_WIDTH, pRelW);
839 1754 : const ::uno::Any* pRelWRelation = 0;
840 1754 : GetProperty(RES_FRM_SIZE, MID_FRMSIZE_REL_WIDTH_RELATION, pRelWRelation);
841 1754 : const ::uno::Any* pSyncWidth = 0;
842 1754 : GetProperty(RES_FRM_SIZE, MID_FRMSIZE_IS_SYNC_WIDTH_TO_HEIGHT, pSyncWidth);
843 1754 : const ::uno::Any* pSyncHeight = 0;
844 1754 : GetProperty(RES_FRM_SIZE, MID_FRMSIZE_IS_SYNC_HEIGHT_TO_WIDTH, pSyncHeight);
845 1754 : const ::uno::Any* pWidth = 0;
846 1754 : GetProperty(RES_FRM_SIZE, MID_FRMSIZE_WIDTH|CONVERT_TWIPS, pWidth);
847 1754 : const ::uno::Any* pHeight = 0;
848 1754 : GetProperty(RES_FRM_SIZE, MID_FRMSIZE_HEIGHT|CONVERT_TWIPS, pHeight);
849 1754 : const ::uno::Any* pSize = 0;
850 1754 : GetProperty(RES_FRM_SIZE, MID_FRMSIZE_SIZE|CONVERT_TWIPS, pSize);
851 1754 : const ::uno::Any* pSizeType = 0;
852 1754 : GetProperty(RES_FRM_SIZE, MID_FRMSIZE_SIZE_TYPE, pSizeType);
853 1754 : const ::uno::Any* pWidthType = 0;
854 1754 : GetProperty(RES_FRM_SIZE, MID_FRMSIZE_WIDTH_TYPE, pWidthType);
855 1754 : if( pWidth || pHeight ||pRelH || pRelHRelation || pRelW || pRelWRelation || pSize ||pSizeType ||
856 586 : pWidthType ||pSyncWidth || pSyncHeight )
857 : {
858 1168 : rSizeFound = true;
859 1168 : SwFormatFrmSize aFrmSz ( static_cast < const :: SwFormatFrmSize& > ( rFromSet.Get ( RES_FRM_SIZE ) ) );
860 1168 : if(pWidth)
861 1051 : bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pWidth, MID_FRMSIZE_WIDTH|CONVERT_TWIPS);
862 1168 : if(pHeight)
863 1021 : bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pHeight, MID_FRMSIZE_HEIGHT|CONVERT_TWIPS);
864 1168 : if(pRelH )
865 356 : bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pRelH, MID_FRMSIZE_REL_HEIGHT);
866 1168 : if (pRelHRelation)
867 9 : bRet &= const_cast<SwFormatFrmSize&>(aFrmSz).PutValue(*pRelHRelation, MID_FRMSIZE_REL_HEIGHT_RELATION);
868 1168 : if(pRelW )
869 361 : bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pRelW, MID_FRMSIZE_REL_WIDTH);
870 1168 : if (pRelWRelation)
871 9 : bRet &= const_cast<SwFormatFrmSize&>(aFrmSz).PutValue(*pRelWRelation, MID_FRMSIZE_REL_WIDTH_RELATION);
872 1168 : if(pSyncWidth)
873 353 : bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pSyncWidth, MID_FRMSIZE_IS_SYNC_WIDTH_TO_HEIGHT);
874 1168 : if(pSyncHeight)
875 353 : bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pSyncHeight, MID_FRMSIZE_IS_SYNC_HEIGHT_TO_WIDTH);
876 1168 : if(pSize)
877 388 : bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pSize, MID_FRMSIZE_SIZE|CONVERT_TWIPS);
878 1168 : if(pSizeType)
879 341 : bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pSizeType, MID_FRMSIZE_SIZE_TYPE);
880 1168 : if(pWidthType)
881 231 : bRet &= ((SfxPoolItem&)aFrmSz).PutValue(*pWidthType, MID_FRMSIZE_WIDTH_TYPE);
882 1168 : if(!aFrmSz.GetWidth())
883 5 : aFrmSz.SetWidth(MINFLY);
884 1168 : if(!aFrmSz.GetHeight())
885 35 : aFrmSz.SetHeight(MINFLY);
886 1168 : rToSet.Put(aFrmSz);
887 : }
888 : else
889 : {
890 586 : rSizeFound = false;
891 586 : SwFormatFrmSize aFrmSz;
892 586 : awt::Size aSize;
893 586 : aSize.Width = 2 * MM50;
894 586 : aSize.Height = 2 * MM50;
895 1172 : ::uno::Any aSizeVal;
896 586 : aSizeVal <<= aSize;
897 586 : ((SfxPoolItem&)aFrmSz).PutValue(aSizeVal, MID_FRMSIZE_SIZE|CONVERT_TWIPS);
898 1172 : rToSet.Put(aFrmSz);
899 : }
900 : }
901 1754 : const ::uno::Any* pFrameDirection = 0;
902 1754 : GetProperty(RES_FRAMEDIR, 0, pFrameDirection);
903 1754 : if(pFrameDirection)
904 : {
905 37 : SvxFrameDirectionItem aAttr(FRMDIR_HORI_LEFT_TOP, RES_FRAMEDIR);
906 37 : aAttr.PutValue(*pFrameDirection, 0);
907 37 : rToSet.Put(aAttr);
908 : }
909 1754 : const ::uno::Any* pUnknown = 0;
910 1754 : GetProperty(RES_UNKNOWNATR_CONTAINER, 0, pUnknown);
911 1754 : if(pUnknown)
912 : {
913 0 : SvXMLAttrContainerItem aAttr(RES_UNKNOWNATR_CONTAINER);
914 0 : aAttr.PutValue(*pUnknown, 0);
915 0 : rToSet.Put(aAttr);
916 : }
917 :
918 : // #i18732#
919 1754 : const ::uno::Any* pFollowTextFlow = 0;
920 1754 : GetProperty(RES_FOLLOW_TEXT_FLOW, 0, pFollowTextFlow);
921 1754 : if ( pFollowTextFlow )
922 : {
923 39 : SwFormatFollowTextFlow aFormatFollowTextFlow;
924 39 : aFormatFollowTextFlow.PutValue(*pFollowTextFlow, 0);
925 39 : rToSet.Put(aFormatFollowTextFlow);
926 : }
927 :
928 : // #i28701# - RES_WRAP_INFLUENCE_ON_OBJPOS
929 1754 : const ::uno::Any* pWrapInfluenceOnObjPos = 0;
930 1754 : GetProperty(RES_WRAP_INFLUENCE_ON_OBJPOS, MID_WRAP_INFLUENCE, pWrapInfluenceOnObjPos);
931 1754 : if ( pWrapInfluenceOnObjPos )
932 : {
933 1 : SwFormatWrapInfluenceOnObjPos aFormatWrapInfluenceOnObjPos;
934 1 : aFormatWrapInfluenceOnObjPos.PutValue( *pWrapInfluenceOnObjPos, MID_WRAP_INFLUENCE );
935 1 : rToSet.Put(aFormatWrapInfluenceOnObjPos);
936 : }
937 :
938 : {
939 1754 : const ::uno::Any* pTextVertAdjust = 0;
940 1754 : GetProperty(RES_TEXT_VERT_ADJUST, 0, pTextVertAdjust);
941 1754 : if ( pTextVertAdjust )
942 : {
943 9 : SdrTextVertAdjustItem aTextVertAdjust(static_cast <const :: SdrTextVertAdjustItem & > ( rFromSet.Get ( RES_TEXT_VERT_ADJUST ) ));
944 9 : bRet &= ((SfxPoolItem&)aTextVertAdjust).PutValue(*pTextVertAdjust);
945 9 : rToSet.Put(aTextVertAdjust);
946 : }
947 : }
948 :
949 1754 : return bRet;
950 : }
951 :
952 : class SwFrameProperties_Impl : public BaseFrameProperties_Impl
953 : {
954 : public:
955 : SwFrameProperties_Impl();
956 2153 : virtual ~SwFrameProperties_Impl(){}
957 :
958 : bool AnyToItemSet( SwDoc* pDoc, SfxItemSet& rFrmSet, SfxItemSet& rSet, bool& rSizeFound) SAL_OVERRIDE;
959 : };
960 :
961 1281 : SwFrameProperties_Impl::SwFrameProperties_Impl():
962 1281 : BaseFrameProperties_Impl(/*aSwMapProvider.GetPropertyMap(PROPERTY_MAP_TEXT_FRAME)*/ )
963 : {
964 1281 : }
965 :
966 1280 : static inline void lcl_FillCol ( SfxItemSet &rToSet, const :: SfxItemSet &rFromSet, const :: uno::Any *pAny)
967 : {
968 1280 : if ( pAny )
969 : {
970 10 : SwFormatCol aCol ( static_cast < const :: SwFormatCol & > ( rFromSet.Get ( RES_COL ) ) );
971 10 : ((SfxPoolItem&)aCol).PutValue( *pAny, MID_COLUMNS);
972 10 : rToSet.Put(aCol);
973 : }
974 1280 : }
975 :
976 1280 : bool SwFrameProperties_Impl::AnyToItemSet(SwDoc *pDoc, SfxItemSet& rSet, SfxItemSet&, bool& rSizeFound)
977 : {
978 : //Properties fuer alle Frames
979 : const ::uno::Any *pStyleName;
980 1280 : SwDocStyleSheet* pStyle = NULL;
981 : bool bRet;
982 :
983 1280 : if ( GetProperty ( FN_UNO_FRAME_STYLE_NAME, 0, pStyleName ) )
984 : {
985 157 : OUString sStyle;
986 157 : *pStyleName >>= sStyle;
987 157 : SwStyleNameMapper::FillUIName(sStyle, sStyle, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, true);
988 157 : pStyle = static_cast<SwDocStyleSheet*>(pDoc->GetDocShell()->GetStyleSheetPool()->Find(sStyle,
989 157 : SFX_STYLE_FAMILY_FRAME));
990 : }
991 :
992 1280 : const ::uno::Any* pColumns = NULL;
993 1280 : GetProperty (RES_COL, MID_COLUMNS, pColumns);
994 1280 : if ( pStyle )
995 : {
996 157 : rtl::Reference< SwDocStyleSheet > xStyle( new SwDocStyleSheet( *pStyle ) );
997 157 : const :: SfxItemSet *pItemSet = &xStyle->GetItemSet();
998 157 : bRet = FillBaseProperties( rSet, *pItemSet, rSizeFound );
999 157 : lcl_FillCol ( rSet, *pItemSet, pColumns );
1000 : }
1001 : else
1002 : {
1003 1123 : const :: SfxItemSet *pItemSet = &pDoc->getIDocumentStylePoolAccess().GetFrameFormatFromPool( RES_POOLFRM_FRAME )->GetAttrSet();
1004 1123 : bRet = FillBaseProperties( rSet, *pItemSet, rSizeFound );
1005 1123 : lcl_FillCol ( rSet, *pItemSet, pColumns );
1006 : }
1007 : const ::uno::Any* pEdit;
1008 1280 : if(GetProperty(RES_EDIT_IN_READONLY, 0, pEdit))
1009 : {
1010 3 : SfxBoolItem aBool(RES_EDIT_IN_READONLY);
1011 3 : ((SfxPoolItem&)aBool).PutValue(*pEdit, 0);
1012 3 : rSet.Put(aBool);
1013 : }
1014 1280 : return bRet;
1015 : }
1016 :
1017 : class SwGraphicProperties_Impl : public BaseFrameProperties_Impl
1018 : {
1019 : public:
1020 : SwGraphicProperties_Impl();
1021 948 : virtual ~SwGraphicProperties_Impl(){}
1022 :
1023 : virtual bool AnyToItemSet( SwDoc* pDoc, SfxItemSet& rFrmSet, SfxItemSet& rSet, bool& rSizeFound) SAL_OVERRIDE;
1024 : };
1025 :
1026 474 : SwGraphicProperties_Impl::SwGraphicProperties_Impl( ) :
1027 474 : BaseFrameProperties_Impl(/*aSwMapProvider.GetPropertyMap(PROPERTY_MAP_TEXT_GRAPHIC)*/ )
1028 : {
1029 474 : }
1030 :
1031 474 : static inline void lcl_FillMirror ( SfxItemSet &rToSet, const :: SfxItemSet &rFromSet, const ::uno::Any *pHEvenMirror, const ::uno::Any *pHOddMirror, const ::uno::Any *pVMirror, bool &rRet )
1032 : {
1033 474 : if(pHEvenMirror || pHOddMirror || pVMirror )
1034 : {
1035 72 : SwMirrorGrf aMirror ( static_cast < const :: SwMirrorGrf& > ( rFromSet.Get ( RES_GRFATR_MIRRORGRF ) ) );
1036 72 : if(pHEvenMirror)
1037 72 : rRet &= ((SfxPoolItem&)aMirror).PutValue(*pHEvenMirror, MID_MIRROR_HORZ_EVEN_PAGES);
1038 72 : if(pHOddMirror)
1039 72 : rRet &= ((SfxPoolItem&)aMirror).PutValue(*pHOddMirror, MID_MIRROR_HORZ_ODD_PAGES);
1040 72 : if(pVMirror)
1041 72 : rRet &= ((SfxPoolItem&)aMirror).PutValue(*pVMirror, MID_MIRROR_VERT);
1042 72 : rToSet.Put(aMirror);
1043 : }
1044 474 : }
1045 :
1046 474 : bool SwGraphicProperties_Impl::AnyToItemSet(
1047 : SwDoc* pDoc,
1048 : SfxItemSet& rFrmSet,
1049 : SfxItemSet& rGrSet,
1050 : bool& rSizeFound)
1051 : {
1052 : //Properties fuer alle Frames
1053 : bool bRet;
1054 : const ::uno::Any *pStyleName;
1055 474 : SwDocStyleSheet* pStyle = NULL;
1056 :
1057 474 : if ( GetProperty ( FN_UNO_FRAME_STYLE_NAME, 0, pStyleName ) )
1058 : {
1059 197 : OUString sStyle;
1060 197 : *pStyleName >>= sStyle;
1061 197 : SwStyleNameMapper::FillUIName(sStyle, sStyle, nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, true);
1062 197 : pStyle = static_cast<SwDocStyleSheet*>(pDoc->GetDocShell()->GetStyleSheetPool()->Find(sStyle,
1063 197 : SFX_STYLE_FAMILY_FRAME));
1064 : }
1065 :
1066 474 : const ::uno::Any* pHEvenMirror = 0;
1067 474 : const ::uno::Any* pHOddMirror = 0;
1068 474 : const ::uno::Any* pVMirror = 0;
1069 474 : GetProperty(RES_GRFATR_MIRRORGRF, MID_MIRROR_HORZ_EVEN_PAGES, pHEvenMirror);
1070 474 : GetProperty(RES_GRFATR_MIRRORGRF, MID_MIRROR_HORZ_ODD_PAGES, pHOddMirror);
1071 474 : GetProperty(RES_GRFATR_MIRRORGRF, MID_MIRROR_VERT, pVMirror);
1072 :
1073 474 : if ( pStyle )
1074 : {
1075 197 : rtl::Reference< SwDocStyleSheet > xStyle( new SwDocStyleSheet(*pStyle) );
1076 197 : const :: SfxItemSet *pItemSet = &xStyle->GetItemSet();
1077 197 : bRet = FillBaseProperties(rFrmSet, *pItemSet, rSizeFound);
1078 197 : lcl_FillMirror ( rGrSet, *pItemSet, pHEvenMirror, pHOddMirror, pVMirror, bRet );
1079 : }
1080 : else
1081 : {
1082 277 : const :: SfxItemSet *pItemSet = &pDoc->getIDocumentStylePoolAccess().GetFrameFormatFromPool( RES_POOLFRM_GRAPHIC )->GetAttrSet();
1083 277 : bRet = FillBaseProperties(rFrmSet, *pItemSet, rSizeFound);
1084 277 : lcl_FillMirror ( rGrSet, *pItemSet, pHEvenMirror, pHOddMirror, pVMirror, bRet );
1085 : }
1086 :
1087 : static const :: sal_uInt16 nIDs[] =
1088 : {
1089 : RES_GRFATR_CROPGRF,
1090 : RES_GRFATR_ROTATION,
1091 : RES_GRFATR_LUMINANCE,
1092 : RES_GRFATR_CONTRAST,
1093 : RES_GRFATR_CHANNELR,
1094 : RES_GRFATR_CHANNELG,
1095 : RES_GRFATR_CHANNELB,
1096 : RES_GRFATR_GAMMA,
1097 : RES_GRFATR_INVERT,
1098 : RES_GRFATR_TRANSPARENCY,
1099 : RES_GRFATR_DRAWMODE,
1100 : 0
1101 : };
1102 : const ::uno::Any* pAny;
1103 5688 : for(sal_Int16 nIndex = 0; nIDs[nIndex]; nIndex++)
1104 : {
1105 5214 : sal_uInt8 nMId = RES_GRFATR_CROPGRF == nIDs[nIndex] ? CONVERT_TWIPS : 0;
1106 5214 : if(GetProperty(nIDs[nIndex], nMId, pAny ))
1107 : {
1108 1750 : SfxPoolItem* pItem = ::GetDfltAttr( nIDs[nIndex] )->Clone();
1109 1750 : bRet &= pItem->PutValue(*pAny, nMId );
1110 1750 : rGrSet.Put(*pItem);
1111 1750 : delete pItem;
1112 : }
1113 : }
1114 :
1115 474 : return bRet;
1116 : }
1117 :
1118 : class SwOLEProperties_Impl : public SwFrameProperties_Impl
1119 : {
1120 : public:
1121 409 : SwOLEProperties_Impl() :
1122 409 : SwFrameProperties_Impl(/*aSwMapProvider.GetPropertyMap(PROPERTY_MAP_EMBEDDED_OBJECT)*/ ){}
1123 818 : virtual ~SwOLEProperties_Impl(){}
1124 :
1125 : virtual bool AnyToItemSet( SwDoc* pDoc, SfxItemSet& rFrmSet, SfxItemSet& rSet, bool& rSizeFound) SAL_OVERRIDE;
1126 : };
1127 :
1128 409 : bool SwOLEProperties_Impl::AnyToItemSet(
1129 : SwDoc* pDoc, SfxItemSet& rFrmSet, SfxItemSet& rSet, bool& rSizeFound)
1130 : {
1131 : const ::uno::Any* pTemp;
1132 1221 : if(!GetProperty(FN_UNO_CLSID, 0, pTemp) && !GetProperty(FN_UNO_STREAM_NAME, 0, pTemp)
1133 762 : && !GetProperty(FN_EMBEDDED_OBJECT, 0, pTemp) )
1134 0 : return false;
1135 409 : SwFrameProperties_Impl::AnyToItemSet( pDoc, rFrmSet, rSet, rSizeFound);
1136 :
1137 409 : return true;
1138 : }
1139 :
1140 13512 : class SwXFrame::Impl
1141 : {
1142 : private:
1143 : ::osl::Mutex m_Mutex; // just for OInterfaceContainerHelper
1144 :
1145 : public:
1146 : uno::WeakReference<uno::XInterface> m_wThis;
1147 : ::cppu::OInterfaceContainerHelper m_EventListeners;
1148 :
1149 13512 : Impl() : m_EventListeners(m_Mutex) { }
1150 : };
1151 :
1152 : namespace
1153 : {
1154 : class theSwXFrameUnoTunnelId : public rtl::Static< UnoTunnelIdInit, theSwXFrameUnoTunnelId > {};
1155 : }
1156 :
1157 14371 : const :: uno::Sequence< sal_Int8 > & SwXFrame::getUnoTunnelId()
1158 : {
1159 14371 : return theSwXFrameUnoTunnelId::get().getSeq();
1160 : }
1161 :
1162 14345 : sal_Int64 SAL_CALL SwXFrame::getSomething( const :: uno::Sequence< sal_Int8 >& rId )
1163 : throw(uno::RuntimeException, std::exception)
1164 : {
1165 28690 : if( rId.getLength() == 16
1166 43035 : && 0 == memcmp( getUnoTunnelId().getConstArray(),
1167 28690 : rId.getConstArray(), 16 ) )
1168 : {
1169 18 : return sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >(this) );
1170 : }
1171 14327 : return 0;
1172 : }
1173 :
1174 11790 : TYPEINIT1(SwXFrame, SwClient);
1175 :
1176 0 : OUString SwXFrame::getImplementationName() throw( uno::RuntimeException, std::exception )
1177 : {
1178 0 : return OUString("SwXFrame");
1179 : }
1180 :
1181 0 : sal_Bool SwXFrame::supportsService(const :: OUString& rServiceName) throw( uno::RuntimeException, std::exception )
1182 : {
1183 0 : return cppu::supportsService(this, rServiceName);
1184 : }
1185 :
1186 1125 : uno::Sequence< OUString > SwXFrame::getSupportedServiceNames() throw( uno::RuntimeException, std::exception )
1187 : {
1188 1125 : uno::Sequence< OUString > aRet(3);
1189 1125 : aRet[0] = "com.sun.star.text.BaseFrame";
1190 1125 : aRet[1] = "com.sun.star.text.TextContent";
1191 1125 : aRet[2] = "com.sun.star.document.LinkTarget";
1192 1125 : return aRet;
1193 : }
1194 :
1195 1755 : SwXFrame::SwXFrame(FlyCntType eSet, const :: SfxItemPropertySet* pSet, SwDoc *pDoc)
1196 1755 : : m_pImpl(new Impl)
1197 : , m_pPropSet(pSet)
1198 : , m_pDoc(pDoc)
1199 : , eType(eSet)
1200 : , bIsDescriptor(true)
1201 3510 : , m_pCopySource(0)
1202 : {
1203 : // Register ourselves as a listener to the document (via the page descriptor)
1204 1755 : pDoc->getIDocumentStylePoolAccess().GetPageDescFromPool(RES_POOLPAGE_STANDARD)->Add(this);
1205 : // get the property set for the default style data
1206 : // First get the model
1207 1755 : uno::Reference < XModel > xModel = pDoc->GetDocShell()->GetBaseModel();
1208 : // Ask the model for it's family supplier interface
1209 3510 : uno::Reference < XStyleFamiliesSupplier > xFamilySupplier ( xModel, uno::UNO_QUERY );
1210 : // Get the style families
1211 3510 : uno::Reference < XNameAccess > xFamilies = xFamilySupplier->getStyleFamilies();
1212 : // Get the Frame family (and keep it for later)
1213 3510 : const ::uno::Any aAny = xFamilies->getByName ("FrameStyles");
1214 1755 : aAny >>= mxStyleFamily;
1215 : // In the derived class, we'll ask mxStyleFamily for the relevant default style
1216 : // mxStyleFamily is initialised in the SwXFrame constructor
1217 1755 : switch(eType)
1218 : {
1219 : case FLYCNTTYPE_FRM:
1220 : {
1221 872 : uno::Any aAny2 = mxStyleFamily->getByName ("Frame");
1222 872 : aAny2 >>= mxStyleData;
1223 872 : pProps = new SwFrameProperties_Impl( );
1224 : }
1225 872 : break;
1226 : case FLYCNTTYPE_GRF:
1227 : {
1228 474 : uno::Any aAny2 = mxStyleFamily->getByName ("Graphics");
1229 474 : aAny2 >>= mxStyleData;
1230 474 : pProps = new SwGraphicProperties_Impl( );
1231 : }
1232 474 : break;
1233 : case FLYCNTTYPE_OLE:
1234 : {
1235 409 : uno::Any aAny2 = mxStyleFamily->getByName ("OLE");
1236 409 : aAny2 >>= mxStyleData;
1237 409 : pProps = new SwOLEProperties_Impl( );
1238 : }
1239 409 : break;
1240 :
1241 : default:
1242 0 : pProps = NULL;
1243 : ;
1244 1755 : }
1245 1755 : }
1246 :
1247 11757 : SwXFrame::SwXFrame(SwFrameFormat& rFrameFormat, FlyCntType eSet, const :: SfxItemPropertySet* pSet)
1248 : : SwClient( &rFrameFormat )
1249 11757 : , m_pImpl(new Impl)
1250 : ,
1251 : m_pPropSet(pSet),
1252 : m_pDoc( 0 ),
1253 : eType(eSet),
1254 : pProps(0),
1255 : bIsDescriptor(false),
1256 23514 : m_pCopySource(0)
1257 : {
1258 :
1259 11757 : }
1260 :
1261 27024 : SwXFrame::~SwXFrame()
1262 : {
1263 13512 : delete m_pCopySource;
1264 13512 : delete pProps;
1265 13512 : }
1266 :
1267 : template<class Interface, class NameLookupIsHard>
1268 : uno::Reference<Interface>
1269 15638 : SwXFrame::CreateXFrame(SwDoc & rDoc, SwFrameFormat *const pFrameFormat)
1270 : {
1271 : assert(!pFrameFormat || &rDoc == pFrameFormat->GetDoc());
1272 15638 : uno::Reference<Interface> xFrame;
1273 15638 : if (pFrameFormat)
1274 : {
1275 13883 : xFrame.set(pFrameFormat->GetXObject(), uno::UNO_QUERY); // cached?
1276 : }
1277 15638 : if (!xFrame.is())
1278 : {
1279 : NameLookupIsHard *const pNew((pFrameFormat)
1280 13512 : ? new NameLookupIsHard(*pFrameFormat)
1281 27024 : : new NameLookupIsHard(&rDoc));
1282 13512 : xFrame.set(pNew);
1283 13512 : if (pFrameFormat)
1284 : {
1285 11757 : pFrameFormat->SetXObject(xFrame);
1286 : }
1287 : // need a permanent Reference to initialize m_wThis
1288 13512 : pNew->SwXFrame::m_pImpl->m_wThis = xFrame;
1289 : }
1290 15638 : return xFrame;
1291 : }
1292 :
1293 844 : OUString SwXFrame::getName() throw( uno::RuntimeException, std::exception )
1294 : {
1295 844 : SolarMutexGuard aGuard;
1296 844 : SwFrameFormat* pFormat = GetFrameFormat();
1297 844 : if(pFormat)
1298 490 : return pFormat->GetName();
1299 354 : if(!bIsDescriptor)
1300 0 : throw uno::RuntimeException();
1301 354 : return m_sName;
1302 : }
1303 :
1304 1178 : void SwXFrame::setName(const OUString& rName) throw( uno::RuntimeException, std::exception )
1305 : {
1306 1178 : SolarMutexGuard aGuard;
1307 1178 : SwFrameFormat* pFormat = GetFrameFormat();
1308 1178 : if(pFormat)
1309 : {
1310 569 : pFormat->GetDoc()->SetFlyName(static_cast<SwFlyFrameFormat&>(*pFormat), rName);
1311 569 : if(pFormat->GetName() != rName)
1312 : {
1313 0 : throw uno::RuntimeException();
1314 : }
1315 : }
1316 609 : else if(bIsDescriptor)
1317 609 : m_sName = rName;
1318 : else
1319 0 : throw uno::RuntimeException();
1320 1178 : }
1321 :
1322 3264 : uno::Reference< beans::XPropertySetInfo > SwXFrame::getPropertySetInfo() throw( uno::RuntimeException, std::exception )
1323 : {
1324 3264 : uno::Reference< beans::XPropertySetInfo > xRef;
1325 3264 : static uno::Reference< beans::XPropertySetInfo > xFrmRef;
1326 3264 : static uno::Reference< beans::XPropertySetInfo > xGrfRef;
1327 3264 : static uno::Reference< beans::XPropertySetInfo > xOLERef;
1328 3264 : switch(eType)
1329 : {
1330 : case FLYCNTTYPE_FRM:
1331 2270 : if( !xFrmRef.is() )
1332 20 : xFrmRef = m_pPropSet->getPropertySetInfo();
1333 2270 : xRef = xFrmRef;
1334 2270 : break;
1335 : case FLYCNTTYPE_GRF:
1336 886 : if( !xGrfRef.is() )
1337 22 : xGrfRef = m_pPropSet->getPropertySetInfo();
1338 886 : xRef = xGrfRef;
1339 886 : break;
1340 : case FLYCNTTYPE_OLE:
1341 108 : if( !xOLERef.is() )
1342 8 : xOLERef = m_pPropSet->getPropertySetInfo();
1343 108 : xRef = xOLERef;
1344 108 : break;
1345 : default:
1346 : ;
1347 : }
1348 3264 : return xRef;
1349 : }
1350 :
1351 104 : void SwXFrame::SetSelection(SwPaM& rCopySource)
1352 : {
1353 104 : delete m_pCopySource;
1354 104 : m_pCopySource = new SwPaM( *rCopySource.Start() );
1355 104 : m_pCopySource->SetMark();
1356 104 : *m_pCopySource->GetMark() = *rCopySource.End();
1357 104 : }
1358 :
1359 2767 : SdrObject *SwXFrame::GetOrCreateSdrObject(SwFlyFrameFormat &rFormat)
1360 : {
1361 2767 : SdrObject* pObject = rFormat.FindSdrObject();
1362 2767 : if( !pObject )
1363 : {
1364 1705 : SwDoc *pDoc = rFormat.GetDoc();
1365 : // #i52858# - method name changed
1366 1705 : SwDrawModel* pDrawModel = pDoc->getIDocumentDrawModelAccess().GetOrCreateDrawModel();
1367 : SwFlyDrawContact* pContactObject
1368 1705 : = new SwFlyDrawContact( &rFormat, pDrawModel );
1369 1705 : pObject = pContactObject->GetMaster();
1370 :
1371 1705 : const :: SwFormatSurround& rSurround = rFormat.GetSurround();
1372 : pObject->SetLayer(
1373 1959 : ( SURROUND_THROUGHT == rSurround.GetSurround() &&
1374 353 : !rFormat.GetOpaque().GetValue() ) ? pDoc->getIDocumentDrawModelAccess().GetHellId()
1375 3509 : : pDoc->getIDocumentDrawModelAccess().GetHeavenId() );
1376 1705 : pDrawModel->GetPage(0)->InsertObject( pObject );
1377 : }
1378 :
1379 2767 : return pObject;
1380 : }
1381 :
1382 369 : static SwFrameFormat *lcl_GetFrameFormat( const :: uno::Any& rValue, SwDoc *pDoc )
1383 : {
1384 369 : SwFrameFormat *pRet = 0;
1385 369 : SwDocShell* pDocSh = pDoc->GetDocShell();
1386 369 : if(pDocSh)
1387 : {
1388 369 : OUString uTemp;
1389 369 : rValue >>= uTemp;
1390 738 : OUString sStyle;
1391 : SwStyleNameMapper::FillUIName(uTemp, sStyle,
1392 369 : nsSwGetPoolIdFromName::GET_POOLID_FRMFMT, true);
1393 : SwDocStyleSheet* pStyle =
1394 369 : static_cast<SwDocStyleSheet*>(pDocSh->GetStyleSheetPool()->Find(sStyle,
1395 369 : SFX_STYLE_FAMILY_FRAME));
1396 369 : if(pStyle)
1397 738 : pRet = pStyle->GetFrameFormat();
1398 : }
1399 :
1400 369 : return pRet;
1401 : }
1402 :
1403 38330 : void SwXFrame::setPropertyValue(const :: OUString& rPropertyName, const :: uno::Any& _rValue)
1404 : throw( beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException, std::exception )
1405 : {
1406 38330 : SolarMutexGuard aGuard;
1407 38330 : SwFrameFormat* pFormat = GetFrameFormat();
1408 38330 : const :: SfxItemPropertySimpleEntry* pEntry = m_pPropSet->getPropertyMap().getByName(rPropertyName);
1409 :
1410 38330 : if (!pEntry)
1411 33 : throw beans::UnknownPropertyException( "Unknown property: " + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
1412 :
1413 : //UUUU
1414 38297 : const sal_uInt8 nMemberId(pEntry->nMemberId & (~SFX_METRIC_ITEM));
1415 76594 : uno::Any aValue(_rValue);
1416 :
1417 : //UUUU check for needed metric translation
1418 38297 : if(pEntry->nMemberId & SFX_METRIC_ITEM)
1419 : {
1420 204 : bool bDoIt(true);
1421 :
1422 204 : if(XATTR_FILLBMP_SIZEX == pEntry->nWID || XATTR_FILLBMP_SIZEY == pEntry->nWID)
1423 : {
1424 : // exception: If these ItemTypes are used, do not convert when these are negative
1425 : // since this means they are intended as percent values
1426 204 : sal_Int32 nValue = 0;
1427 :
1428 204 : if(aValue >>= nValue)
1429 : {
1430 204 : bDoIt = nValue > 0;
1431 : }
1432 : }
1433 :
1434 204 : if(bDoIt)
1435 : {
1436 0 : const SwDoc* pDoc = (IsDescriptor() ? m_pDoc : GetFrameFormat()->GetDoc());
1437 0 : const SfxItemPool& rPool = pDoc->GetAttrPool();
1438 0 : const SfxMapUnit eMapUnit(rPool.GetMetric(pEntry->nWID));
1439 :
1440 0 : if(eMapUnit != SFX_MAPUNIT_100TH_MM)
1441 : {
1442 0 : SvxUnoConvertFromMM(eMapUnit, aValue);
1443 : }
1444 : }
1445 : }
1446 :
1447 38297 : if(pFormat)
1448 : {
1449 15304 : bool bNextFrame = false;
1450 15304 : if ( pEntry->nFlags & beans::PropertyAttribute::READONLY)
1451 0 : throw beans::PropertyVetoException("Property is read-only: " + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
1452 :
1453 15304 : SwDoc* pDoc = pFormat->GetDoc();
1454 47030 : if ( ((eType == FLYCNTTYPE_GRF) && isGRFATR(pEntry->nWID)) ||
1455 30332 : (FN_PARAM_COUNTOUR_PP == pEntry->nWID) ||
1456 45360 : (FN_UNO_IS_AUTOMATIC_CONTOUR == pEntry->nWID) ||
1457 15028 : (FN_UNO_IS_PIXEL_CONTOUR == pEntry->nWID) )
1458 : {
1459 276 : const :: SwNodeIndex* pIdx = pFormat->GetContent().GetContentIdx();
1460 276 : if(pIdx)
1461 : {
1462 276 : SwNodeIndex aIdx(*pIdx, 1);
1463 276 : SwNoTextNode* pNoText = aIdx.GetNode().GetNoTextNode();
1464 276 : if(pEntry->nWID == FN_PARAM_COUNTOUR_PP)
1465 : {
1466 276 : drawing::PointSequenceSequence aParam;
1467 276 : if(!aValue.hasValue())
1468 266 : pNoText->SetContour(0);
1469 10 : else if(aValue >>= aParam)
1470 : {
1471 10 : tools::PolyPolygon aPoly((sal_uInt16)aParam.getLength());
1472 20 : for(sal_Int32 i = 0; i < aParam.getLength(); i++)
1473 : {
1474 10 : const :: drawing::PointSequence* pPointSeq = aParam.getConstArray();
1475 10 : sal_Int32 nPoints = pPointSeq[i].getLength();
1476 10 : const :: awt::Point* pPoints = pPointSeq[i].getConstArray();
1477 10 : Polygon aSet( (sal_uInt16)nPoints );
1478 96 : for(sal_Int32 j = 0; j < nPoints; j++)
1479 : {
1480 86 : Point aPoint(pPoints[j].X, pPoints[j].Y);
1481 86 : aSet.SetPoint(aPoint, (sal_uInt16)j);
1482 : }
1483 : // Close polygon if it isn't closed already.
1484 10 : aSet.Optimize( PolyOptimizeFlags::CLOSE );
1485 10 : aPoly.Insert( aSet );
1486 10 : }
1487 10 : pNoText->SetContourAPI( &aPoly );
1488 : }
1489 : else
1490 0 : throw lang::IllegalArgumentException();
1491 : }
1492 0 : else if(pEntry->nWID == FN_UNO_IS_AUTOMATIC_CONTOUR )
1493 : {
1494 0 : pNoText->SetAutomaticContour( *static_cast<sal_Bool const *>(aValue.getValue()) );
1495 : }
1496 0 : else if(pEntry->nWID == FN_UNO_IS_PIXEL_CONTOUR )
1497 : {
1498 : // The IsPixelContour property can only be set if there
1499 : // is no contour, or if the contour has been set by the
1500 : // API itself (or in other words, if the contour isn't
1501 : // used already).
1502 0 : if( !pNoText->_HasContour() ||
1503 0 : !pNoText->IsContourMapModeValid() )
1504 0 : pNoText->SetPixelContour( *static_cast<sal_Bool const *>(aValue.getValue()) );
1505 : else
1506 0 : throw lang::IllegalArgumentException();
1507 : }
1508 : else
1509 : {
1510 0 : SfxItemSet aSet(pNoText->GetSwAttrSet());
1511 0 : m_pPropSet->setPropertyValue(*pEntry, aValue, aSet);
1512 0 : pNoText->SetAttr(aSet);
1513 276 : }
1514 : }
1515 : }
1516 : // New attribute Title
1517 15028 : else if( FN_UNO_TITLE == pEntry->nWID )
1518 : {
1519 281 : SwFlyFrameFormat& rFlyFormat = dynamic_cast<SwFlyFrameFormat&>(*pFormat);
1520 281 : OUString sTitle;
1521 281 : aValue >>= sTitle;
1522 : // assure that <SdrObject> instance exists.
1523 281 : GetOrCreateSdrObject(rFlyFormat);
1524 281 : rFlyFormat.GetDoc()->SetFlyFrmTitle(rFlyFormat, sTitle);
1525 : }
1526 : // New attribute Description
1527 14747 : else if( FN_UNO_DESCRIPTION == pEntry->nWID )
1528 : {
1529 287 : SwFlyFrameFormat& rFlyFormat = dynamic_cast<SwFlyFrameFormat&>(*pFormat);
1530 287 : OUString sDescription;
1531 287 : aValue >>= sDescription;
1532 : // assure that <SdrObject> instance exists.
1533 287 : GetOrCreateSdrObject(rFlyFormat);
1534 287 : rFlyFormat.GetDoc()->SetFlyFrmDescription(rFlyFormat, sDescription);
1535 : }
1536 14460 : else if(FN_UNO_FRAME_STYLE_NAME == pEntry->nWID)
1537 : {
1538 15 : SwFrameFormat *pFrameFormat = lcl_GetFrameFormat( aValue, pFormat->GetDoc() );
1539 15 : if( pFrameFormat )
1540 : {
1541 15 : UnoActionContext aAction(pFormat->GetDoc());
1542 :
1543 15 : SfxItemSet* pSet = 0;
1544 : // #i31771#, #i25798# - No adjustment of
1545 : // anchor ( no call of method <sw_ChkAndSetNewAnchor(..)> ),
1546 : // if document is currently in reading mode.
1547 15 : if ( !pFormat->GetDoc()->IsInReading() )
1548 : {
1549 : // see SwFEShell::SetFrameFormat( SwFrameFormat *pNewFormat, bool bKeepOrient, Point* pDocPos )
1550 5 : SwFlyFrm *pFly = 0;
1551 : {
1552 5 : const SwFrameFormat* pFormatXX = pFormat;
1553 5 : if (PTR_CAST(SwFlyFrameFormat, pFormatXX))
1554 5 : pFly = static_cast<const SwFlyFrameFormat*>(pFormatXX)->GetFrm();
1555 : }
1556 5 : if ( pFly )
1557 : {
1558 : const :: SfxPoolItem* pItem;
1559 5 : if( SfxItemState::SET == pFrameFormat->GetItemState( RES_ANCHOR, false, &pItem ))
1560 : {
1561 0 : pSet = new SfxItemSet( pDoc->GetAttrPool(), aFrameFormatSetRange );
1562 0 : pSet->Put( *pItem );
1563 0 : if ( pFormat->GetDoc()->GetEditShell() != NULL
1564 0 : && !sw_ChkAndSetNewAnchor( *pFly, *pSet ) )
1565 0 : delete pSet, pSet = 0;
1566 : }
1567 : }
1568 : }
1569 :
1570 15 : pFormat->GetDoc()->SetFrameFormatToFly( *pFormat, *pFrameFormat, pSet, false );
1571 15 : delete pSet;
1572 : }
1573 : else
1574 0 : throw lang::IllegalArgumentException();
1575 : }
1576 28890 : else if( FN_UNO_GRAPHIC_U_R_L == pEntry->nWID ||
1577 14445 : FN_UNO_GRAPHIC_FILTER == pEntry->nWID)
1578 : {
1579 0 : OUString sGrfName;
1580 0 : OUString sFltName;
1581 0 : GraphicObject *pGrfObj = 0;
1582 0 : SwDoc::GetGrfNms( *static_cast<SwFlyFrameFormat*>(pFormat), &sGrfName, &sFltName );
1583 0 : OUString sTmp;
1584 0 : aValue >>= sTmp;
1585 0 : UnoActionContext aAction(pFormat->GetDoc());
1586 0 : if(FN_UNO_GRAPHIC_U_R_L == pEntry->nWID)
1587 : {
1588 0 : if( sTmp.startsWith(sPackageProtocol) )
1589 : {
1590 0 : pGrfObj = new GraphicObject;
1591 0 : pGrfObj->SetUserData( sTmp );
1592 0 : sGrfName.clear();
1593 : }
1594 0 : else if( sTmp.startsWith(sGraphicObjectProtocol) )
1595 : {
1596 : const OString sId(OUStringToOString(
1597 : sTmp.copy(sizeof(sGraphicObjectProtocol)-1),
1598 0 : RTL_TEXTENCODING_ASCII_US));
1599 0 : pGrfObj = new GraphicObject( sId );
1600 0 : sGrfName.clear();
1601 : }
1602 : else
1603 : {
1604 0 : sGrfName = sTmp;
1605 : }
1606 : }
1607 : else
1608 : {
1609 0 : sFltName = sTmp;
1610 : }
1611 :
1612 0 : const :: SwNodeIndex* pIdx = pFormat->GetContent().GetContentIdx();
1613 0 : if(pIdx)
1614 : {
1615 0 : SwNodeIndex aIdx(*pIdx, 1);
1616 0 : SwGrfNode* pGrfNode = aIdx.GetNode().GetGrfNode();
1617 0 : if(!pGrfNode)
1618 : {
1619 0 : delete pGrfObj;
1620 0 : throw uno::RuntimeException();
1621 : }
1622 0 : SwPaM aGrfPaM(*pGrfNode);
1623 0 : pFormat->GetDoc()->getIDocumentContentOperations().ReRead( aGrfPaM, sGrfName, sFltName, 0,
1624 0 : pGrfObj );
1625 : }
1626 0 : delete pGrfObj;
1627 : }
1628 14445 : else if( FN_UNO_GRAPHIC == pEntry->nWID )
1629 : {
1630 0 : uno::Reference< graphic::XGraphic > xGraphic;
1631 0 : aValue >>= xGraphic;
1632 0 : if(xGraphic.is())
1633 : {
1634 0 : const :: SwNodeIndex* pIdx = pFormat->GetContent().GetContentIdx();
1635 0 : if(pIdx)
1636 : {
1637 0 : SwNodeIndex aIdx(*pIdx, 1);
1638 0 : SwGrfNode* pGrfNode = aIdx.GetNode().GetGrfNode();
1639 0 : if(!pGrfNode)
1640 : {
1641 0 : throw uno::RuntimeException();
1642 : }
1643 0 : SwPaM aGrfPaM(*pGrfNode);
1644 0 : Graphic aGraphic( xGraphic );
1645 0 : pFormat->GetDoc()->getIDocumentContentOperations().ReRead( aGrfPaM, OUString(), OUString(), &aGraphic, 0 );
1646 : }
1647 0 : }
1648 : }
1649 14445 : else if( FN_UNO_REPLACEMENT_GRAPHIC_URL == pEntry->nWID || FN_UNO_REPLACEMENT_GRAPHIC == pEntry->nWID )
1650 : {
1651 65 : bool bURL = FN_UNO_REPLACEMENT_GRAPHIC_URL == pEntry->nWID;
1652 65 : bool bApply = false;
1653 65 : Graphic aGraphic;
1654 65 : if( bURL )
1655 : {
1656 10 : GraphicObject *pGrfObj = 0;
1657 10 : OUString aGrfUrl;
1658 10 : aValue >>= aGrfUrl;
1659 :
1660 : // the package URL based graphics are handled in different way currently
1661 : // TODO/LATER: actually this is the correct place to handle them
1662 20 : OUString aGraphicProtocol( sGraphicObjectProtocol );
1663 10 : if( aGrfUrl.startsWith( aGraphicProtocol ) )
1664 : {
1665 : OString sId(OUStringToOString(
1666 : aGrfUrl.copy(sizeof(sGraphicObjectProtocol)-1),
1667 0 : RTL_TEXTENCODING_ASCII_US));
1668 0 : pGrfObj = new GraphicObject( sId );
1669 0 : aGraphic = pGrfObj->GetGraphic();
1670 0 : bApply = true;
1671 10 : }
1672 : }
1673 : else
1674 : {
1675 55 : uno::Reference< graphic::XGraphic > xGraphic;
1676 55 : aValue >>= xGraphic;
1677 55 : if( xGraphic.is() )
1678 : {
1679 55 : aGraphic = Graphic( xGraphic );
1680 55 : bApply = true;
1681 55 : }
1682 : }
1683 :
1684 65 : if ( bApply )
1685 : {
1686 55 : const :: SwFormatContent* pCnt = &pFormat->GetContent();
1687 55 : if ( pCnt->GetContentIdx() && pDoc->GetNodes()[ pCnt->GetContentIdx()->GetIndex() + 1 ] )
1688 : {
1689 55 : SwOLENode* pOleNode = pDoc->GetNodes()[ pCnt->GetContentIdx()->GetIndex() + 1 ]->GetOLENode();
1690 :
1691 55 : if ( pOleNode )
1692 : {
1693 55 : svt::EmbeddedObjectRef &rObj = pOleNode->GetOLEObj().GetObject();
1694 :
1695 55 : OUString aMediaType;
1696 55 : rObj.SetGraphic( aGraphic, aMediaType );
1697 : }
1698 : }
1699 65 : }
1700 : }
1701 14380 : else if((bNextFrame = (rPropertyName == UNO_NAME_CHAIN_NEXT_NAME))
1702 14380 : || rPropertyName == UNO_NAME_CHAIN_PREV_NAME)
1703 : {
1704 13 : OUString sChainName;
1705 13 : aValue >>= sChainName;
1706 13 : if (sChainName.isEmpty())
1707 : {
1708 0 : if(bNextFrame)
1709 0 : pDoc->Unchain(*pFormat);
1710 : else
1711 : {
1712 0 : SwFormatChain aChain( pFormat->GetChain() );
1713 0 : SwFrameFormat *pPrev = aChain.GetPrev();
1714 0 : if(pPrev)
1715 0 : pDoc->Unchain(*pPrev);
1716 : }
1717 : }
1718 : else
1719 : {
1720 13 : const size_t nCount = pDoc->GetFlyCount(FLYCNTTYPE_FRM);
1721 :
1722 13 : SwFrameFormat* pChain = 0;
1723 19 : for( size_t i = 0; i < nCount; ++i )
1724 : {
1725 19 : SwFrameFormat* pFormat2 = pDoc->GetFlyNum(i, FLYCNTTYPE_FRM);
1726 19 : if(sChainName == pFormat2->GetName() )
1727 : {
1728 13 : pChain = pFormat2;
1729 13 : break;
1730 : }
1731 : }
1732 13 : if(pChain)
1733 : {
1734 13 : SwFrameFormat* pSource = bNextFrame ? pFormat : pChain;
1735 13 : SwFrameFormat* pDest = bNextFrame ? pChain: pFormat;
1736 13 : pDoc->Chain(*pSource, *pDest);
1737 : }
1738 13 : }
1739 : }
1740 14367 : else if(FN_UNO_Z_ORDER == pEntry->nWID)
1741 : {
1742 247 : sal_Int32 nZOrder = - 1;
1743 247 : aValue >>= nZOrder;
1744 :
1745 : // Don't set an explicit ZOrder on TextBoxes.
1746 247 : std::set<const SwFrameFormat*> aTextBoxes = SwTextBoxHelper::findTextBoxes(pDoc);
1747 247 : if( nZOrder >= 0 && aTextBoxes.find(pFormat) == aTextBoxes.end())
1748 : {
1749 : SdrObject* pObject =
1750 233 : GetOrCreateSdrObject( static_cast<SwFlyFrameFormat&>(*pFormat) );
1751 233 : SwDrawModel *pDrawModel = pDoc->getIDocumentDrawModelAccess().GetDrawModel();
1752 233 : pDrawModel->GetPage(0)->
1753 233 : SetObjectOrdNum(pObject->GetOrdNum(), nZOrder);
1754 247 : }
1755 : }
1756 14120 : else if(RES_ANCHOR == pEntry->nWID && MID_ANCHOR_ANCHORFRAME == nMemberId)
1757 : {
1758 0 : bool bDone = false;
1759 0 : uno::Reference<text::XTextFrame> xFrame;
1760 0 : if(aValue >>= xFrame)
1761 : {
1762 0 : uno::Reference<lang::XUnoTunnel> xTunnel(xFrame, uno::UNO_QUERY);
1763 0 : SwXFrame* pFrame = xTunnel.is() ?
1764 0 : reinterpret_cast< SwXFrame * >( sal::static_int_cast< sal_IntPtr >( xTunnel->getSomething(SwXFrame::getUnoTunnelId()) ))
1765 0 : : 0;
1766 0 : if(pFrame && this != pFrame && pFrame->GetFrameFormat() && pFrame->GetFrameFormat()->GetDoc() == pDoc)
1767 : {
1768 0 : SfxItemSet aSet( pDoc->GetAttrPool(),
1769 0 : RES_FRMATR_BEGIN, RES_FRMATR_END - 1 );
1770 0 : aSet.SetParent(&pFormat->GetAttrSet());
1771 0 : SwFormatAnchor aAnchor = static_cast<const SwFormatAnchor&>(aSet.Get(pEntry->nWID));
1772 :
1773 0 : SwPosition aPos(*pFrame->GetFrameFormat()->GetContent().GetContentIdx());
1774 0 : aAnchor.SetAnchor(&aPos);
1775 0 : aAnchor.SetType(FLY_AT_FLY);
1776 0 : aSet.Put(aAnchor);
1777 0 : pDoc->SetFlyFrmAttr( *pFormat, aSet );
1778 0 : bDone = true;
1779 0 : }
1780 : }
1781 0 : if(!bDone)
1782 0 : throw lang::IllegalArgumentException();
1783 : }
1784 : else
1785 : { //UUUU
1786 : // standard UNO API write attributes
1787 : // adapt former attr from SvxBrushItem::PutValue to new items XATTR_FILL_FIRST, XATTR_FILL_LAST
1788 14120 : SfxItemSet aSet( pDoc->GetAttrPool(),
1789 : RES_FRMATR_BEGIN, RES_FRMATR_END - 1,
1790 : RES_UNKNOWNATR_CONTAINER, RES_UNKNOWNATR_CONTAINER,
1791 :
1792 : //UUUU FillAttribute support
1793 : XATTR_FILL_FIRST, XATTR_FILL_LAST,
1794 :
1795 14120 : 0L);
1796 14120 : bool bDone(false);
1797 :
1798 14120 : aSet.SetParent(&pFormat->GetAttrSet());
1799 :
1800 14120 : if(RES_BACKGROUND == pEntry->nWID)
1801 : {
1802 16 : const SwAttrSet& rSet = pFormat->GetAttrSet();
1803 16 : const SvxBrushItem aOriginalBrushItem(getSvxBrushItemFromSourceSet(rSet, RES_BACKGROUND));
1804 32 : SvxBrushItem aChangedBrushItem(aOriginalBrushItem);
1805 :
1806 16 : aChangedBrushItem.PutValue(aValue, nMemberId);
1807 :
1808 16 : if(!(aChangedBrushItem == aOriginalBrushItem))
1809 : {
1810 16 : setSvxBrushItemAsFillAttributesToTargetSet(aChangedBrushItem, aSet);
1811 16 : pFormat->GetDoc()->SetFlyFrmAttr( *pFormat, aSet );
1812 : }
1813 :
1814 32 : bDone = true;
1815 : }
1816 14104 : else if(OWN_ATTR_FILLBMP_MODE == pEntry->nWID)
1817 : {
1818 : //UUUU
1819 : drawing::BitmapMode eMode;
1820 :
1821 0 : if(!(aValue >>= eMode))
1822 : {
1823 0 : sal_Int32 nMode = 0;
1824 :
1825 0 : if(!(aValue >>= nMode))
1826 : {
1827 0 : throw lang::IllegalArgumentException();
1828 : }
1829 :
1830 0 : eMode = (drawing::BitmapMode)nMode;
1831 : }
1832 :
1833 0 : aSet.Put(XFillBmpStretchItem(drawing::BitmapMode_STRETCH == eMode));
1834 0 : aSet.Put(XFillBmpTileItem(drawing::BitmapMode_REPEAT == eMode));
1835 0 : pFormat->GetDoc()->SetFlyFrmAttr( *pFormat, aSet );
1836 0 : bDone = true;
1837 : }
1838 :
1839 14120 : switch(nMemberId)
1840 : {
1841 : case MID_NAME:
1842 : {
1843 : //UUUU when named items get set, replace these with the NameOrIndex items
1844 : // which exist already in the pool
1845 0 : switch(pEntry->nWID)
1846 : {
1847 : case XATTR_FILLGRADIENT:
1848 : case XATTR_FILLHATCH:
1849 : case XATTR_FILLBITMAP:
1850 : case XATTR_FILLFLOATTRANSPARENCE:
1851 : {
1852 0 : OUString aTempName;
1853 :
1854 0 : if(!(aValue >>= aTempName ))
1855 : {
1856 0 : throw lang::IllegalArgumentException();
1857 : }
1858 :
1859 0 : bDone = SvxShape::SetFillAttribute(pEntry->nWID, aTempName, aSet);
1860 0 : break;
1861 : }
1862 : default:
1863 : {
1864 0 : break;
1865 : }
1866 : }
1867 0 : break;
1868 : }
1869 : case MID_GRAFURL:
1870 : {
1871 : //UUUU Bitmap also has the MID_GRAFURL mode where a Bitmap URL is used
1872 0 : switch(pEntry->nWID)
1873 : {
1874 : case XATTR_FILLBITMAP:
1875 : {
1876 0 : const Graphic aNullGraphic;
1877 0 : XFillBitmapItem aXFillBitmapItem(aSet.GetPool(), aNullGraphic);
1878 :
1879 0 : aXFillBitmapItem.PutValue(aValue, nMemberId);
1880 0 : aSet.Put(aXFillBitmapItem);
1881 0 : bDone = true;
1882 0 : break;
1883 : }
1884 : default:
1885 : {
1886 0 : break;
1887 : }
1888 : }
1889 0 : break;
1890 : }
1891 : default:
1892 : {
1893 14120 : break;
1894 : }
1895 : }
1896 :
1897 14120 : if(!bDone)
1898 : {
1899 14104 : m_pPropSet->setPropertyValue(*pEntry, aValue, aSet);
1900 : }
1901 :
1902 14108 : if(RES_ANCHOR == pEntry->nWID && MID_ANCHOR_ANCHORTYPE == nMemberId)
1903 : {
1904 28 : SwFormatAnchor aAnchor = static_cast<const SwFormatAnchor&>(aSet.Get(pEntry->nWID));
1905 28 : if(aAnchor.GetAnchorId() == FLY_AT_FLY)
1906 : {
1907 0 : const :: SwPosition* pPosition = aAnchor.GetContentAnchor();
1908 0 : SwFrameFormat* pFlyFormat = pPosition ? pPosition->nNode.GetNode().GetFlyFormat() : 0;
1909 0 : if(!pFlyFormat || pFlyFormat->Which() == RES_DRAWFRMFMT)
1910 : {
1911 0 : lang::IllegalArgumentException aExcept;
1912 0 : aExcept.Message = "Anchor to frame: no frame found";
1913 0 : throw aExcept;
1914 : }
1915 : else
1916 : {
1917 0 : SwPosition aPos = *pPosition;
1918 0 : aPos.nNode = *pFlyFormat->GetContent().GetContentIdx();
1919 0 : aAnchor.SetAnchor(&aPos);
1920 0 : aSet.Put(aAnchor);
1921 : }
1922 : }
1923 52 : else if ((aAnchor.GetAnchorId() != FLY_AT_PAGE) &&
1924 24 : !aAnchor.GetContentAnchor())
1925 : {
1926 0 : SwNode& rNode = pDoc->GetNodes().GetEndOfContent();
1927 0 : SwPaM aPam(rNode);
1928 0 : aPam.Move( fnMoveBackward, fnGoDoc );
1929 0 : aAnchor.SetAnchor( aPam.Start() );
1930 0 : aSet.Put(aAnchor);
1931 : }
1932 :
1933 : // #i31771#, #i25798# - No adjustment of
1934 : // anchor ( no call of method <sw_ChkAndSetNewAnchor(..)> ),
1935 : // if document is currently in reading mode.
1936 28 : if ( !pFormat->GetDoc()->IsInReading() )
1937 : {
1938 : // see SwFEShell::SetFlyFrmAttr( SfxItemSet& rSet )
1939 5 : SwFlyFrm *pFly = 0;
1940 5 : if (PTR_CAST(SwFlyFrameFormat, pFormat))
1941 5 : pFly = static_cast<SwFlyFrameFormat*>(pFormat)->GetFrm();
1942 5 : if (pFly)
1943 : {
1944 : const :: SfxPoolItem* pItem;
1945 5 : if( SfxItemState::SET == aSet.GetItemState( RES_ANCHOR, false, &pItem ))
1946 : {
1947 5 : aSet.Put( *pItem );
1948 5 : if ( pFormat->GetDoc()->GetEditShell() != NULL )
1949 : {
1950 5 : sw_ChkAndSetNewAnchor( *pFly, aSet );
1951 : }
1952 : }
1953 : }
1954 : }
1955 :
1956 28 : pFormat->GetDoc()->SetFlyFrmAttr( *pFormat, aSet );
1957 : }
1958 14080 : else if(FN_UNO_CLSID == pEntry->nWID || FN_UNO_STREAM_NAME == pEntry->nWID || FN_EMBEDDED_OBJECT == pEntry->nWID)
1959 : {
1960 0 : throw lang::IllegalArgumentException();
1961 : }
1962 : else
1963 : {
1964 14080 : pFormat->SetFormatAttr(aSet);
1965 14120 : }
1966 : }
1967 : }
1968 22993 : else if(IsDescriptor())
1969 : {
1970 22993 : pProps->SetProperty(pEntry->nWID, nMemberId, aValue);
1971 22993 : if( FN_UNO_FRAME_STYLE_NAME == pEntry->nWID )
1972 : {
1973 354 : OUString sStyleName;
1974 354 : aValue >>= sStyleName;
1975 : try
1976 : {
1977 354 : uno::Any aAny = mxStyleFamily->getByName ( sStyleName );
1978 354 : aAny >>= mxStyleData;
1979 : }
1980 0 : catch ( container::NoSuchElementException const & )
1981 : {
1982 : }
1983 0 : catch ( lang::WrappedTargetException const & )
1984 : {
1985 : }
1986 0 : catch ( uno::RuntimeException const & )
1987 : {
1988 354 : }
1989 : }
1990 : }
1991 : else
1992 38330 : throw uno::RuntimeException();
1993 38285 : }
1994 :
1995 8584 : uno::Any SwXFrame::getPropertyValue(const OUString& rPropertyName)
1996 : throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception )
1997 : {
1998 8584 : SolarMutexGuard aGuard;
1999 8584 : uno::Any aAny;
2000 8584 : SwFrameFormat* pFormat = GetFrameFormat();
2001 8584 : const SfxItemPropertySimpleEntry* pEntry = m_pPropSet->getPropertyMap().getByName(rPropertyName);
2002 8584 : if (!pEntry)
2003 7 : throw beans::UnknownPropertyException( "Unknown property: " + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
2004 :
2005 : //UUUU
2006 8577 : const sal_uInt8 nMemberId(pEntry->nMemberId & (~SFX_METRIC_ITEM));
2007 :
2008 8577 : if(FN_UNO_ANCHOR_TYPES == pEntry->nWID)
2009 : {
2010 0 : uno::Sequence<text::TextContentAnchorType> aTypes(5);
2011 0 : text::TextContentAnchorType* pArray = aTypes.getArray();
2012 0 : pArray[0] = text::TextContentAnchorType_AT_PARAGRAPH;
2013 0 : pArray[1] = text::TextContentAnchorType_AS_CHARACTER;
2014 0 : pArray[2] = text::TextContentAnchorType_AT_PAGE;
2015 0 : pArray[3] = text::TextContentAnchorType_AT_FRAME;
2016 0 : pArray[4] = text::TextContentAnchorType_AT_CHARACTER;
2017 0 : aAny.setValue(&aTypes, cppu::UnoType<uno::Sequence<text::TextContentAnchorType>>::get());
2018 : }
2019 8577 : else if(pFormat)
2020 : {
2021 9004 : if( ((eType == FLYCNTTYPE_GRF) || (eType == FLYCNTTYPE_OLE)) &&
2022 2944 : (isGRFATR(pEntry->nWID) ||
2023 2674 : pEntry->nWID == FN_PARAM_COUNTOUR_PP ||
2024 2654 : pEntry->nWID == FN_UNO_IS_AUTOMATIC_CONTOUR ||
2025 1327 : pEntry->nWID == FN_UNO_IS_PIXEL_CONTOUR ))
2026 : {
2027 270 : const SwNodeIndex* pIdx = pFormat->GetContent().GetContentIdx();
2028 270 : if(pIdx)
2029 : {
2030 270 : SwNodeIndex aIdx(*pIdx, 1);
2031 270 : SwNoTextNode* pNoText = aIdx.GetNode().GetNoTextNode();
2032 270 : if(pEntry->nWID == FN_PARAM_COUNTOUR_PP)
2033 : {
2034 20 : tools::PolyPolygon aContour;
2035 20 : if( pNoText->GetContourAPI( aContour ) )
2036 : {
2037 5 : drawing::PointSequenceSequence aPtSeq(aContour.Count());
2038 5 : drawing::PointSequence* pPSeq = aPtSeq.getArray();
2039 10 : for(sal_uInt16 i = 0; i < aContour.Count(); i++)
2040 : {
2041 5 : const Polygon& rPoly = aContour.GetObject(i);
2042 5 : pPSeq[i].realloc(rPoly.GetSize());
2043 5 : awt::Point* pPoints = pPSeq[i].getArray();
2044 54 : for(sal_uInt16 j = 0; j < rPoly.GetSize(); j++)
2045 : {
2046 49 : const Point& rPoint = rPoly.GetPoint(j);
2047 49 : pPoints[j].X = rPoint.X();
2048 49 : pPoints[j].Y = rPoint.Y();
2049 : }
2050 : }
2051 5 : aAny <<= aPtSeq;
2052 20 : }
2053 : }
2054 250 : else if(pEntry->nWID == FN_UNO_IS_AUTOMATIC_CONTOUR )
2055 : {
2056 0 : aAny <<= pNoText->HasAutomaticContour();
2057 : }
2058 250 : else if(pEntry->nWID == FN_UNO_IS_PIXEL_CONTOUR )
2059 : {
2060 0 : aAny <<= pNoText->IsPixelContour();
2061 : }
2062 : else
2063 : {
2064 250 : SfxItemSet aSet(pNoText->GetSwAttrSet());
2065 250 : m_pPropSet->getPropertyValue(*pEntry, aSet, aAny);
2066 270 : }
2067 : }
2068 : }
2069 6867 : else if( FN_UNO_GRAPHIC_U_R_L == pEntry->nWID)
2070 : {
2071 102 : OUString sGrfName;
2072 102 : const SwNodeIndex* pIdx = pFormat->GetContent().GetContentIdx();
2073 102 : if(pIdx)
2074 : {
2075 102 : SwNodeIndex aIdx(*pIdx, 1);
2076 102 : SwGrfNode* pGrfNode = aIdx.GetNode().GetGrfNode();
2077 102 : if(!pGrfNode)
2078 0 : throw uno::RuntimeException();
2079 102 : if( pGrfNode->IsGrfLink() )
2080 : {
2081 11 : SwDoc::GetGrfNms( *static_cast<SwFlyFrameFormat*>(pFormat), &sGrfName, 0 );
2082 : }
2083 : else
2084 : {
2085 : OUString sId(OStringToOUString(
2086 91 : pGrfNode->GetGrfObj().GetUniqueID(),
2087 91 : RTL_TEXTENCODING_ASCII_US));
2088 91 : sGrfName = sGraphicObjectProtocol + sId;
2089 102 : }
2090 : }
2091 102 : aAny <<= sGrfName;
2092 : }
2093 6765 : else if( FN_UNO_REPLACEMENT_GRAPHIC_U_R_L == pEntry->nWID)
2094 : {
2095 6 : OUString sGrfName;
2096 6 : const SwNodeIndex* pIdx = pFormat->GetContent().GetContentIdx();
2097 :
2098 6 : if(pIdx)
2099 : {
2100 6 : SwNodeIndex aIdx(*pIdx, 1);
2101 6 : SwGrfNode* pGrfNode = aIdx.GetNode().GetGrfNode();
2102 6 : if(!pGrfNode)
2103 0 : throw uno::RuntimeException();
2104 :
2105 6 : const GraphicObject* pGraphicObject = pGrfNode->GetReplacementGrfObj();
2106 :
2107 6 : if(pGraphicObject)
2108 : {
2109 0 : sGrfName = sGraphicObjectProtocol
2110 0 : + OStringToOUString( pGraphicObject->GetUniqueID(), RTL_TEXTENCODING_ASCII_US );
2111 6 : }
2112 : }
2113 :
2114 6 : aAny <<= sGrfName;
2115 : }
2116 6759 : else if( FN_UNO_GRAPHIC_FILTER == pEntry->nWID )
2117 : {
2118 6 : OUString sFltName;
2119 6 : SwDoc::GetGrfNms( *static_cast<SwFlyFrameFormat*>(pFormat), 0, &sFltName );
2120 6 : aAny <<= sFltName;
2121 : }
2122 6753 : else if( FN_UNO_GRAPHIC == pEntry->nWID )
2123 : {
2124 32 : const SwNodeIndex* pIdx = pFormat->GetContent().GetContentIdx();
2125 32 : if(pIdx)
2126 : {
2127 32 : SwNodeIndex aIdx(*pIdx, 1);
2128 32 : SwGrfNode* pGrfNode = aIdx.GetNode().GetGrfNode();
2129 32 : if(!pGrfNode)
2130 0 : throw uno::RuntimeException();
2131 32 : aAny <<= pGrfNode->GetGrf().GetXGraphic();
2132 : }
2133 : }
2134 6721 : else if(FN_UNO_FRAME_STYLE_NAME == pEntry->nWID)
2135 : {
2136 148 : aAny <<= OUString(SwStyleNameMapper::GetProgName(pFormat->DerivedFrom()->GetName(), nsSwGetPoolIdFromName::GET_POOLID_FRMFMT ) );
2137 : }
2138 : // #i73249#
2139 6573 : else if( FN_UNO_TITLE == pEntry->nWID )
2140 : {
2141 74 : SwFlyFrameFormat& rFlyFormat = dynamic_cast<SwFlyFrameFormat&>(*pFormat);
2142 : // assure that <SdrObject> instance exists.
2143 74 : GetOrCreateSdrObject(rFlyFormat);
2144 74 : aAny <<= OUString(rFlyFormat.GetObjTitle());
2145 : }
2146 : // New attribute Description
2147 6499 : else if( FN_UNO_DESCRIPTION == pEntry->nWID )
2148 : {
2149 78 : SwFlyFrameFormat& rFlyFormat = dynamic_cast<SwFlyFrameFormat&>(*pFormat);
2150 : // assure that <SdrObject> instance exists.
2151 78 : GetOrCreateSdrObject(rFlyFormat);
2152 78 : aAny <<= OUString(rFlyFormat.GetObjDescription());
2153 : }
2154 6803 : else if(eType == FLYCNTTYPE_GRF &&
2155 382 : (rPropertyName == UNO_NAME_ACTUAL_SIZE))
2156 : {
2157 0 : const SwNodeIndex* pIdx = pFormat->GetContent().GetContentIdx();
2158 0 : if(pIdx)
2159 : {
2160 0 : SwNodeIndex aIdx(*pIdx, 1);
2161 0 : Size aActSize = aIdx.GetNode().GetNoTextNode()->GetTwipSize();
2162 0 : awt::Size aTmp;
2163 0 : aTmp.Width = convertTwipToMm100(aActSize.Width());
2164 0 : aTmp.Height = convertTwipToMm100(aActSize.Height());
2165 0 : aAny.setValue(&aTmp, ::cppu::UnoType<awt::Size>::get());
2166 : }
2167 : }
2168 6421 : else if(FN_PARAM_LINK_DISPLAY_NAME == pEntry->nWID)
2169 : {
2170 0 : aAny <<= pFormat->GetName();
2171 : }
2172 6421 : else if(FN_UNO_Z_ORDER == pEntry->nWID)
2173 : {
2174 157 : const SdrObject* pObj = pFormat->FindRealSdrObject();
2175 157 : if( pObj == NULL )
2176 78 : pObj = pFormat->FindSdrObject();
2177 157 : if( pObj )
2178 : {
2179 157 : aAny <<= (sal_Int32)pObj->GetOrdNum();
2180 : }
2181 : }
2182 12187 : else if(FN_UNO_CLSID == pEntry->nWID || FN_UNO_MODEL == pEntry->nWID||
2183 17764 : FN_UNO_COMPONENT == pEntry->nWID ||FN_UNO_STREAM_NAME == pEntry->nWID||
2184 5918 : FN_EMBEDDED_OBJECT == pEntry->nWID)
2185 : {
2186 347 : SwDoc* pDoc = pFormat->GetDoc();
2187 347 : const SwFormatContent* pCnt = &pFormat->GetContent();
2188 : OSL_ENSURE( pCnt->GetContentIdx() &&
2189 : pDoc->GetNodes()[ pCnt->GetContentIdx()->
2190 : GetIndex() + 1 ]->GetOLENode(), "kein OLE-Node?");
2191 :
2192 347 : SwOLENode* pOleNode = pDoc->GetNodes()[ pCnt->GetContentIdx()
2193 694 : ->GetIndex() + 1 ]->GetOLENode();
2194 347 : uno::Reference < embed::XEmbeddedObject > xIP = pOleNode->GetOLEObj().GetOleRef();
2195 694 : OUString aHexCLSID;
2196 : {
2197 347 : SvGlobalName aClassName( xIP->getClassID() );
2198 347 : aHexCLSID = aClassName.GetHexName();
2199 347 : if(FN_UNO_CLSID != pEntry->nWID)
2200 : {
2201 298 : if ( svt::EmbeddedObjectRef::TryRunningState( xIP ) )
2202 : {
2203 283 : uno::Reference < lang::XComponent > xComp( xIP->getComponent(), uno::UNO_QUERY );
2204 566 : uno::Reference < frame::XModel > xModel( xComp, uno::UNO_QUERY );
2205 283 : if ( FN_EMBEDDED_OBJECT == pEntry->nWID )
2206 : {
2207 : // when exposing the EmbeddedObject, ensure it has a client site
2208 : OSL_ENSURE( pDoc->GetDocShell(), "no doc shell => no client site" );
2209 1 : if ( pDoc->GetDocShell() )
2210 1 : pDoc->GetDocShell()->GetIPClient( svt::EmbeddedObjectRef( xIP, embed::Aspects::MSOLE_CONTENT ) );
2211 1 : aAny <<= xIP;
2212 : }
2213 282 : else if ( xModel.is() )
2214 282 : aAny <<= xModel;
2215 0 : else if ( FN_UNO_COMPONENT == pEntry->nWID )
2216 283 : aAny <<= xComp;
2217 : }
2218 347 : }
2219 : }
2220 :
2221 347 : if(FN_UNO_CLSID == pEntry->nWID)
2222 49 : aAny <<= aHexCLSID;
2223 298 : else if(FN_UNO_STREAM_NAME == pEntry->nWID)
2224 : {
2225 5 : aAny <<= OUString(pOleNode->GetOLEObj().GetCurrentPersistName());
2226 : }
2227 293 : else if(FN_EMBEDDED_OBJECT == pEntry->nWID)
2228 : {
2229 1 : aAny <<= pOleNode->GetOLEObj().GetOleRef();
2230 347 : }
2231 : }
2232 5917 : else if(WID_LAYOUT_SIZE == pEntry->nWID)
2233 : {
2234 : // format document completely in order to get correct value
2235 0 : pFormat->GetDoc()->GetEditShell()->CalcLayout();
2236 :
2237 0 : SwFrm* pTmpFrm = SwIterator<SwFrm,SwFormat>( *pFormat ).First();
2238 0 : if ( pTmpFrm )
2239 : {
2240 : OSL_ENSURE( pTmpFrm->IsValid(), "frame not valid" );
2241 0 : const SwRect &rRect = pTmpFrm->Frm();
2242 : Size aMM100Size = OutputDevice::LogicToLogic(
2243 : Size( rRect.Width(), rRect.Height() ),
2244 0 : MapMode( MAP_TWIP ), MapMode( MAP_100TH_MM ));
2245 0 : aAny <<= awt::Size( aMM100Size.Width(), aMM100Size.Height() );
2246 : }
2247 : }
2248 : else
2249 : { //UUUU
2250 : // standard UNO API read attributes
2251 : // adapt former attr from SvxBrushItem::PutValue to new items XATTR_FILL_FIRST, XATTR_FILL_LAST
2252 5917 : const SwAttrSet& rSet = pFormat->GetAttrSet();
2253 5917 : bool bDone(false);
2254 :
2255 5917 : if(RES_BACKGROUND == pEntry->nWID)
2256 : {
2257 : //UUUU
2258 89 : const SvxBrushItem aOriginalBrushItem(getSvxBrushItemFromSourceSet(rSet, RES_BACKGROUND));
2259 :
2260 89 : if(!aOriginalBrushItem.QueryValue(aAny, nMemberId))
2261 : {
2262 : OSL_ENSURE(false, "Error getting attribute from RES_BACKGROUND (!)");
2263 : }
2264 :
2265 89 : bDone = true;
2266 : }
2267 5828 : else if(OWN_ATTR_FILLBMP_MODE == pEntry->nWID)
2268 : {
2269 : //UUUU
2270 0 : const XFillBmpStretchItem* pStretchItem = dynamic_cast< const XFillBmpStretchItem* >(&rSet.Get(XATTR_FILLBMP_STRETCH));
2271 0 : const XFillBmpTileItem* pTileItem = dynamic_cast< const XFillBmpTileItem* >(&rSet.Get(XATTR_FILLBMP_TILE));
2272 :
2273 0 : if( pTileItem && pTileItem->GetValue() )
2274 : {
2275 0 : aAny <<= drawing::BitmapMode_REPEAT;
2276 : }
2277 0 : else if( pStretchItem && pStretchItem->GetValue() )
2278 : {
2279 0 : aAny <<= drawing::BitmapMode_STRETCH;
2280 : }
2281 : else
2282 : {
2283 0 : aAny <<= drawing::BitmapMode_NO_REPEAT;
2284 : }
2285 :
2286 0 : bDone = true;
2287 : }
2288 :
2289 5917 : if(!bDone)
2290 : {
2291 5828 : m_pPropSet->getPropertyValue(*pEntry, rSet, aAny);
2292 : }
2293 : }
2294 : }
2295 1440 : else if(IsDescriptor())
2296 : {
2297 1438 : if ( ! m_pDoc )
2298 0 : throw uno::RuntimeException();
2299 1438 : if(WID_LAYOUT_SIZE != pEntry->nWID) // there is no LayoutSize in a descriptor
2300 : {
2301 1438 : const uno::Any* pAny = 0;
2302 1438 : if( !pProps->GetProperty( pEntry->nWID, nMemberId, pAny ) )
2303 773 : aAny = mxStyleData->getPropertyValue( rPropertyName );
2304 665 : else if ( pAny )
2305 665 : aAny = *pAny;
2306 : }
2307 : }
2308 : else
2309 2 : throw uno::RuntimeException();
2310 :
2311 : //UUUU
2312 8575 : if(pEntry && pEntry->aType == ::cppu::UnoType<sal_Int16>::get() && pEntry->aType != aAny.getValueType())
2313 : {
2314 : // since the sfx uint16 item now exports a sal_Int32, we may have to fix this here
2315 135 : sal_Int32 nValue = 0;
2316 135 : aAny >>= nValue;
2317 135 : aAny <<= (sal_Int16)nValue;
2318 : }
2319 :
2320 : //UUUU check for needed metric translation
2321 8575 : if(pEntry->nMemberId & SFX_METRIC_ITEM)
2322 : {
2323 64 : bool bDoIt(true);
2324 :
2325 64 : if(XATTR_FILLBMP_SIZEX == pEntry->nWID || XATTR_FILLBMP_SIZEY == pEntry->nWID)
2326 : {
2327 : // exception: If these ItemTypes are used, do not convert when these are negative
2328 : // since this means they are intended as percent values
2329 64 : sal_Int32 nValue = 0;
2330 :
2331 64 : if(aAny >>= nValue)
2332 : {
2333 64 : bDoIt = nValue > 0;
2334 : }
2335 : }
2336 :
2337 64 : if(bDoIt)
2338 : {
2339 0 : const SwDoc* pDoc = (IsDescriptor() ? m_pDoc : GetFrameFormat()->GetDoc());
2340 0 : const SfxItemPool& rPool = pDoc->GetAttrPool();
2341 0 : const SfxMapUnit eMapUnit(rPool.GetMetric(pEntry->nWID));
2342 :
2343 0 : if(eMapUnit != SFX_MAPUNIT_100TH_MM)
2344 : {
2345 0 : SvxUnoConvertToMM(eMapUnit, aAny);
2346 : }
2347 : }
2348 : }
2349 :
2350 8584 : return aAny;
2351 : }
2352 :
2353 0 : void SwXFrame::addPropertyChangeListener(const OUString& /*PropertyName*/,
2354 : const uno::Reference< beans::XPropertyChangeListener > & /*aListener*/)
2355 : throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception )
2356 : {
2357 : OSL_FAIL("not implemented");
2358 0 : }
2359 :
2360 0 : void SwXFrame::removePropertyChangeListener(const OUString& /*PropertyName*/,
2361 : const uno::Reference< beans::XPropertyChangeListener > & /*aListener*/)
2362 : throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception )
2363 : {
2364 : OSL_FAIL("not implemented");
2365 0 : }
2366 :
2367 0 : void SwXFrame::addVetoableChangeListener(const OUString& /*PropertyName*/,
2368 : const uno::Reference< beans::XVetoableChangeListener > & /*aListener*/)
2369 : throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception )
2370 : {
2371 : OSL_FAIL("not implemented");
2372 0 : }
2373 :
2374 0 : void SwXFrame::removeVetoableChangeListener(
2375 : const OUString& /*PropertyName*/, const uno::Reference< beans::XVetoableChangeListener > & /*aListener*/)
2376 : throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception )
2377 : {
2378 : OSL_FAIL("not implemented");
2379 0 : }
2380 :
2381 75 : beans::PropertyState SwXFrame::getPropertyState( const OUString& rPropertyName )
2382 : throw(beans::UnknownPropertyException, uno::RuntimeException, std::exception)
2383 : {
2384 75 : SolarMutexGuard aGuard;
2385 150 : uno::Sequence< OUString > aPropertyNames(1);
2386 75 : OUString* pNames = aPropertyNames.getArray();
2387 75 : pNames[0] = rPropertyName;
2388 150 : uno::Sequence< beans::PropertyState > aStates = getPropertyStates(aPropertyNames);
2389 150 : return aStates.getConstArray()[0];
2390 : }
2391 :
2392 223 : uno::Sequence< beans::PropertyState > SwXFrame::getPropertyStates(
2393 : const uno::Sequence< OUString >& aPropertyNames )
2394 : throw(beans::UnknownPropertyException, uno::RuntimeException, std::exception)
2395 : {
2396 223 : SolarMutexGuard aGuard;
2397 223 : uno::Sequence< beans::PropertyState > aStates(aPropertyNames.getLength());
2398 223 : beans::PropertyState* pStates = aStates.getArray();
2399 223 : SwFrameFormat* pFormat = GetFrameFormat();
2400 223 : if(pFormat)
2401 : {
2402 223 : const OUString* pNames = aPropertyNames.getConstArray();
2403 223 : const SwAttrSet& rFormatSet = pFormat->GetAttrSet();
2404 9452 : for(int i = 0; i < aPropertyNames.getLength(); i++)
2405 : {
2406 9229 : const SfxItemPropertySimpleEntry* pEntry = m_pPropSet->getPropertyMap().getByName(pNames[i]);
2407 9229 : if (!pEntry)
2408 0 : throw beans::UnknownPropertyException("Unknown property: " + pNames[i], static_cast < cppu::OWeakObject * > ( this ) );
2409 :
2410 18458 : if(pEntry->nWID == FN_UNO_ANCHOR_TYPES||
2411 18458 : pEntry->nWID == FN_PARAM_LINK_DISPLAY_NAME||
2412 18458 : FN_UNO_FRAME_STYLE_NAME == pEntry->nWID||
2413 18458 : FN_UNO_GRAPHIC_U_R_L == pEntry->nWID||
2414 18458 : FN_UNO_GRAPHIC_FILTER == pEntry->nWID||
2415 18458 : FN_UNO_ACTUAL_SIZE == pEntry->nWID||
2416 9229 : FN_UNO_ALTERNATIVE_TEXT == pEntry->nWID)
2417 : {
2418 0 : pStates[i] = beans::PropertyState_DIRECT_VALUE;
2419 : }
2420 9229 : else if(OWN_ATTR_FILLBMP_MODE == pEntry->nWID)
2421 : {
2422 : //UUUU
2423 296 : if(SfxItemState::SET == rFormatSet.GetItemState(XATTR_FILLBMP_STRETCH, false)
2424 148 : || SfxItemState::SET == rFormatSet.GetItemState(XATTR_FILLBMP_TILE, false))
2425 : {
2426 0 : pStates[i] = beans::PropertyState_DIRECT_VALUE;
2427 : }
2428 : else
2429 : {
2430 148 : pStates[i] = beans::PropertyState_AMBIGUOUS_VALUE;
2431 : }
2432 : }
2433 : //UUUU for FlyFrames we need to mark the used properties from type RES_BACKGROUND
2434 : // as beans::PropertyState_DIRECT_VALUE to let users of this property call
2435 : // getPropertyValue where the member properties will be mapped from the
2436 : // fill attributes to the according SvxBrushItem entries
2437 9081 : else if (RES_BACKGROUND == pEntry->nWID)
2438 : {
2439 1037 : if (SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(rFormatSet, pEntry->nMemberId))
2440 79 : pStates[i] = beans::PropertyState_DIRECT_VALUE;
2441 : else
2442 958 : pStates[i] = beans::PropertyState_DEFAULT_VALUE;
2443 : }
2444 : else
2445 : {
2446 8044 : if ((eType == FLYCNTTYPE_GRF) && isGRFATR(pEntry->nWID))
2447 : {
2448 156 : const SwNodeIndex* pIdx = pFormat->GetContent().GetContentIdx();
2449 156 : if(pIdx)
2450 : {
2451 156 : SwNodeIndex aIdx(*pIdx, 1);
2452 156 : SwNoTextNode* pNoText = aIdx.GetNode().GetNoTextNode();
2453 312 : SfxItemSet aSet(pNoText->GetSwAttrSet());
2454 156 : aSet.GetItemState(pEntry->nWID);
2455 156 : if(SfxItemState::SET == aSet.GetItemState( pEntry->nWID, false ))
2456 312 : pStates[i] = beans::PropertyState_DIRECT_VALUE;
2457 : }
2458 : }
2459 : else
2460 : {
2461 7888 : if(SfxItemState::SET == rFormatSet.GetItemState( pEntry->nWID, false ))
2462 2644 : pStates[i] = beans::PropertyState_DIRECT_VALUE;
2463 : else
2464 5244 : pStates[i] = beans::PropertyState_DEFAULT_VALUE;
2465 : }
2466 : }
2467 : }
2468 : }
2469 0 : else if(IsDescriptor())
2470 : {
2471 0 : for(int i = 0; i < aPropertyNames.getLength(); i++)
2472 0 : pStates[i] = beans::PropertyState_DIRECT_VALUE;
2473 : }
2474 : else
2475 0 : throw uno::RuntimeException();
2476 223 : return aStates;
2477 : }
2478 :
2479 0 : void SwXFrame::setPropertyToDefault( const OUString& rPropertyName )
2480 : throw(beans::UnknownPropertyException, uno::RuntimeException, std::exception)
2481 : {
2482 0 : SolarMutexGuard aGuard;
2483 0 : SwFrameFormat* pFormat = GetFrameFormat();
2484 0 : if(pFormat)
2485 : {
2486 0 : const SfxItemPropertySimpleEntry* pEntry = m_pPropSet->getPropertyMap().getByName(rPropertyName);
2487 0 : if (!pEntry)
2488 0 : throw beans::UnknownPropertyException( "Unknown property: " + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
2489 0 : if ( pEntry->nFlags & beans::PropertyAttribute::READONLY)
2490 0 : throw uno::RuntimeException("setPropertyToDefault: property is read-only: " + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
2491 :
2492 : bool bNextFrame;
2493 0 : if(OWN_ATTR_FILLBMP_MODE == pEntry->nWID)
2494 : {
2495 : //UUUU
2496 0 : SwDoc* pDoc = pFormat->GetDoc();
2497 0 : SfxItemSet aSet(pDoc->GetAttrPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST);
2498 0 : aSet.SetParent(&pFormat->GetAttrSet());
2499 :
2500 0 : aSet.ClearItem(XATTR_FILLBMP_STRETCH);
2501 0 : aSet.ClearItem(XATTR_FILLBMP_TILE);
2502 :
2503 0 : pFormat->SetFormatAttr(aSet);
2504 : }
2505 0 : else if( pEntry->nWID &&
2506 0 : pEntry->nWID != FN_UNO_ANCHOR_TYPES &&
2507 0 : pEntry->nWID != FN_PARAM_LINK_DISPLAY_NAME)
2508 : {
2509 0 : if ( (eType == FLYCNTTYPE_GRF) && isGRFATR(pEntry->nWID) )
2510 : {
2511 0 : const SwNodeIndex* pIdx = pFormat->GetContent().GetContentIdx();
2512 0 : if(pIdx)
2513 : {
2514 0 : SwNodeIndex aIdx(*pIdx, 1);
2515 0 : SwNoTextNode* pNoText = aIdx.GetNode().GetNoTextNode();
2516 : {
2517 0 : SfxItemSet aSet(pNoText->GetSwAttrSet());
2518 0 : aSet.ClearItem(pEntry->nWID);
2519 0 : pNoText->SetAttr(aSet);
2520 0 : }
2521 : }
2522 : }
2523 : // #i73249#
2524 0 : else if( FN_UNO_TITLE == pEntry->nWID )
2525 : {
2526 0 : SwFlyFrameFormat& rFlyFormat = dynamic_cast<SwFlyFrameFormat&>(*pFormat);
2527 : // assure that <SdrObject> instance exists.
2528 0 : GetOrCreateSdrObject(rFlyFormat);
2529 0 : rFlyFormat.GetDoc()->SetFlyFrmTitle(rFlyFormat, aEmptyOUStr);
2530 : }
2531 : // New attribute Description
2532 0 : else if( FN_UNO_DESCRIPTION == pEntry->nWID )
2533 : {
2534 0 : SwFlyFrameFormat& rFlyFormat = dynamic_cast<SwFlyFrameFormat&>(*pFormat);
2535 : // assure that <SdrObject> instance exists.
2536 0 : GetOrCreateSdrObject(rFlyFormat);
2537 0 : rFlyFormat.GetDoc()->SetFlyFrmDescription(rFlyFormat, aEmptyOUStr);
2538 : }
2539 : else
2540 : {
2541 0 : SwDoc* pDoc = pFormat->GetDoc();
2542 0 : SfxItemSet aSet( pDoc->GetAttrPool(),
2543 0 : RES_FRMATR_BEGIN, RES_FRMATR_END - 1 );
2544 0 : aSet.SetParent(&pFormat->GetAttrSet());
2545 0 : aSet.ClearItem(pEntry->nWID);
2546 0 : if(rPropertyName != UNO_NAME_ANCHOR_TYPE)
2547 0 : pFormat->SetFormatAttr(aSet);
2548 0 : }
2549 : }
2550 0 : else if((bNextFrame = (rPropertyName == UNO_NAME_CHAIN_NEXT_NAME))
2551 0 : || rPropertyName == UNO_NAME_CHAIN_PREV_NAME)
2552 : {
2553 0 : SwDoc* pDoc = pFormat->GetDoc();
2554 0 : if(bNextFrame)
2555 0 : pDoc->Unchain(*pFormat);
2556 : else
2557 : {
2558 0 : SwFormatChain aChain( pFormat->GetChain() );
2559 0 : SwFrameFormat *pPrev = aChain.GetPrev();
2560 0 : if(pPrev)
2561 0 : pDoc->Unchain(*pPrev);
2562 : }
2563 : }
2564 : }
2565 0 : else if(!IsDescriptor())
2566 0 : throw uno::RuntimeException();
2567 :
2568 0 : }
2569 :
2570 0 : uno::Any SwXFrame::getPropertyDefault( const OUString& rPropertyName )
2571 : throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception)
2572 : {
2573 0 : SolarMutexGuard aGuard;
2574 0 : uno::Any aRet;
2575 0 : SwFrameFormat* pFormat = GetFrameFormat();
2576 0 : if(pFormat)
2577 : {
2578 0 : const SfxItemPropertySimpleEntry* pEntry = m_pPropSet->getPropertyMap().getByName(rPropertyName);
2579 0 : if(pEntry)
2580 : {
2581 0 : if ( pEntry->nWID < RES_FRMATR_END )
2582 : {
2583 : const SfxPoolItem& rDefItem =
2584 0 : pFormat->GetDoc()->GetAttrPool().GetDefaultItem(pEntry->nWID);
2585 : //UUUU
2586 0 : const sal_uInt8 nMemberId(pEntry->nMemberId & (~SFX_METRIC_ITEM));
2587 :
2588 0 : rDefItem.QueryValue(aRet, nMemberId);
2589 : }
2590 : }
2591 : else
2592 0 : throw beans::UnknownPropertyException( "Unknown property: " + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
2593 : }
2594 0 : else if(!IsDescriptor())
2595 0 : throw uno::RuntimeException();
2596 0 : return aRet;
2597 : }
2598 :
2599 0 : void SAL_CALL SwXFrame::addEventListener(
2600 : const uno::Reference<lang::XEventListener> & xListener)
2601 : throw (uno::RuntimeException, std::exception)
2602 : {
2603 : // no need to lock here as m_pImpl is const and container threadsafe
2604 0 : m_pImpl->m_EventListeners.addInterface(xListener);
2605 0 : }
2606 :
2607 0 : void SAL_CALL SwXFrame::removeEventListener(
2608 : const uno::Reference<lang::XEventListener> & xListener)
2609 : throw (uno::RuntimeException, std::exception)
2610 : {
2611 : // no need to lock here as m_pImpl is const and container threadsafe
2612 0 : m_pImpl->m_EventListeners.removeInterface(xListener);
2613 0 : }
2614 :
2615 13453 : void SwXFrame::Modify(const SfxPoolItem* pOld, const SfxPoolItem *pNew)
2616 : {
2617 13453 : ClientModify(this, pOld, pNew);
2618 13453 : if (GetRegisteredIn())
2619 : {
2620 26742 : return; // core object still alive
2621 : }
2622 82 : mxStyleData.clear();
2623 82 : mxStyleFamily.clear();
2624 82 : m_pDoc = 0;
2625 82 : uno::Reference<uno::XInterface> const xThis(m_pImpl->m_wThis);
2626 82 : if (!xThis.is())
2627 : { // fdo#72695: if UNO object is already dead, don't revive it with event
2628 0 : return;
2629 : }
2630 164 : lang::EventObject const ev(xThis);
2631 164 : m_pImpl->m_EventListeners.disposeAndClear(ev);
2632 : }
2633 :
2634 6 : void SwXFrame::dispose() throw( uno::RuntimeException, std::exception )
2635 : {
2636 6 : SolarMutexGuard aGuard;
2637 6 : SwFrameFormat* pFormat = GetFrameFormat();
2638 6 : if ( pFormat )
2639 : {
2640 6 : SdrObject* pObj = pFormat->FindSdrObject();
2641 : // OD 11.09.2003 #112039# - add condition to perform delete of
2642 : // format/anchor sign, not only if the object is inserted, but also
2643 : // if a contact object is registered, which isn't in the destruction.
2644 18 : if ( pObj &&
2645 7 : ( pObj->IsInserted() ||
2646 2 : ( pObj->GetUserCall() &&
2647 1 : !static_cast<SwContact*>(pObj->GetUserCall())->IsInDTOR() ) ) )
2648 : {
2649 6 : if (pFormat->GetAnchor().GetAnchorId() == FLY_AS_CHAR)
2650 : {
2651 1 : const SwPosition &rPos = *(pFormat->GetAnchor().GetContentAnchor());
2652 1 : SwTextNode *pTextNode = rPos.nNode.GetNode().GetTextNode();
2653 1 : const sal_Int32 nIdx = rPos.nContent.GetIndex();
2654 1 : pTextNode->DeleteAttributes( RES_TXTATR_FLYCNT, nIdx, nIdx );
2655 : }
2656 : else
2657 5 : pFormat->GetDoc()->getIDocumentLayoutAccess().DelLayoutFormat(pFormat);
2658 : }
2659 6 : }
2660 :
2661 6 : }
2662 :
2663 55 : uno::Reference< text::XTextRange > SwXFrame::getAnchor() throw( uno::RuntimeException, std::exception )
2664 : {
2665 55 : SolarMutexGuard aGuard;
2666 55 : uno::Reference< text::XTextRange > aRef;
2667 55 : SwFrameFormat* pFormat = GetFrameFormat();
2668 55 : if(pFormat)
2669 : {
2670 55 : const SwFormatAnchor& rAnchor = pFormat->GetAnchor();
2671 : // return an anchor for non-page bound frames
2672 : // and for page bound frames that have a page no == NULL and a content position
2673 110 : if ((rAnchor.GetAnchorId() != FLY_AT_PAGE) ||
2674 0 : (rAnchor.GetContentAnchor() && !rAnchor.GetPageNum()))
2675 : {
2676 55 : const SwPosition &rPos = *(rAnchor.GetContentAnchor());
2677 55 : aRef = SwXTextRange::CreateXTextRange(*pFormat->GetDoc(), rPos, 0);
2678 : }
2679 : }
2680 : else
2681 0 : throw uno::RuntimeException();
2682 55 : return aRef;
2683 : }
2684 :
2685 1754 : void SwXFrame::ResetDescriptor()
2686 : {
2687 1754 : bIsDescriptor = false;
2688 1754 : mxStyleData.clear();
2689 1754 : mxStyleFamily.clear();
2690 1754 : DELETEZ(pProps);
2691 1754 : }
2692 :
2693 1754 : void SwXFrame::attachToRange(const uno::Reference< text::XTextRange > & xTextRange)
2694 : throw (lang::IllegalArgumentException, uno::RuntimeException, std::exception)
2695 : {
2696 1754 : SolarMutexGuard aGuard;
2697 1754 : if(!IsDescriptor())
2698 0 : throw uno::RuntimeException();
2699 3508 : uno::Reference<lang::XUnoTunnel> xRangeTunnel( xTextRange, uno::UNO_QUERY);
2700 1754 : SwXTextRange* pRange = 0;
2701 1754 : OTextCursorHelper* pCursor = 0;
2702 1754 : if(xRangeTunnel.is())
2703 : {
2704 : pRange = reinterpret_cast< SwXTextRange * >(
2705 1754 : sal::static_int_cast< sal_IntPtr >( xRangeTunnel->getSomething( SwXTextRange::getUnoTunnelId()) ));
2706 : pCursor = reinterpret_cast< OTextCursorHelper * >(
2707 1754 : sal::static_int_cast< sal_IntPtr >( xRangeTunnel->getSomething( OTextCursorHelper::getUnoTunnelId()) ));
2708 : }
2709 :
2710 1754 : SwDoc* pDoc = pRange ? pRange->GetDoc() : pCursor ? pCursor->GetDoc() : 0;
2711 1754 : if(pDoc)
2712 : {
2713 1754 : SwUnoInternalPaM aIntPam(*pDoc);
2714 : // this now needs to return TRUE
2715 1754 : ::sw::XTextRangeToSwPaM(aIntPam, xTextRange);
2716 :
2717 1754 : SwNode& rNode = pDoc->GetNodes().GetEndOfContent();
2718 3508 : SwPaM aPam(rNode);
2719 1754 : aPam.Move( fnMoveBackward, fnGoDoc );
2720 : static sal_uInt16 const aFrmAttrRange[] =
2721 : {
2722 : RES_FRMATR_BEGIN, RES_FRMATR_END-1,
2723 : RES_UNKNOWNATR_CONTAINER, RES_UNKNOWNATR_CONTAINER,
2724 :
2725 : //UUUU FillAttribute support
2726 : XATTR_FILL_FIRST, XATTR_FILL_LAST,
2727 :
2728 : SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER,
2729 : 0
2730 : };
2731 : static sal_uInt16 const aGrAttrRange[] =
2732 : {
2733 : RES_GRFATR_BEGIN, RES_GRFATR_END-1,
2734 : 0
2735 : };
2736 3508 : SfxItemSet aGrSet(pDoc->GetAttrPool(), aGrAttrRange );
2737 :
2738 3508 : SfxItemSet aFrmSet(pDoc->GetAttrPool(), aFrmAttrRange );
2739 :
2740 : //UUUU set correct parent to get the XFILL_NONE FillStyle as needed
2741 1754 : aFrmSet.SetParent(&pDoc->GetDfltFrameFormat()->GetAttrSet());
2742 :
2743 : // no the related items need to be added to the set
2744 : bool bSizeFound;
2745 1754 : if(!pProps->AnyToItemSet( pDoc, aFrmSet, aGrSet, bSizeFound))
2746 0 : throw lang::IllegalArgumentException();
2747 : // a TextRange is handled separately
2748 1754 : *aPam.GetPoint() = *aIntPam.GetPoint();
2749 1754 : if(aIntPam.HasMark())
2750 : {
2751 104 : aPam.SetMark();
2752 104 : *aPam.GetMark() = *aIntPam.GetMark();
2753 : }
2754 :
2755 : const SfxPoolItem* pItem;
2756 1754 : RndStdIds eAnchorId = FLY_AT_PARA;
2757 1754 : if(SfxItemState::SET == aFrmSet.GetItemState(RES_ANCHOR, false, &pItem) )
2758 : {
2759 1754 : eAnchorId = static_cast<const SwFormatAnchor*>(pItem)->GetAnchorId();
2760 1754 : if( FLY_AT_FLY == eAnchorId &&
2761 0 : !aPam.GetNode().FindFlyStartNode())
2762 : {
2763 : // framebound only where a frame exists
2764 0 : SwFormatAnchor aAnchor(FLY_AT_PARA);
2765 0 : aFrmSet.Put(aAnchor);
2766 : }
2767 1851 : else if ((FLY_AT_PAGE == eAnchorId) &&
2768 97 : 0 == static_cast<const SwFormatAnchor*>(pItem)->GetPageNum() )
2769 : {
2770 1 : SwFormatAnchor aAnchor( *static_cast<const SwFormatAnchor*>(pItem) );
2771 1 : aAnchor.SetAnchor( aPam.GetPoint() );
2772 1 : aFrmSet.Put(aAnchor);
2773 : }
2774 : }
2775 :
2776 : const ::uno::Any* pStyle;
2777 1754 : SwFrameFormat *pParentFrameFormat = 0;
2778 1754 : if(pProps->GetProperty(FN_UNO_FRAME_STYLE_NAME, 0, pStyle))
2779 354 : pParentFrameFormat = lcl_GetFrameFormat( *pStyle, pDoc );
2780 :
2781 1754 : SwFlyFrameFormat* pFormat = 0;
2782 1754 : if( eType == FLYCNTTYPE_FRM)
2783 : {
2784 871 : UnoActionContext aCont(pDoc);
2785 871 : if(m_pCopySource)
2786 : {
2787 104 : SwFormatAnchor* pAnchorItem = 0;
2788 : // the frame is inserted bound to page
2789 : // to prevent conflicts if the to-be-anchored position is part of the to-be-copied text
2790 104 : if (eAnchorId != FLY_AT_PAGE)
2791 : {
2792 104 : pAnchorItem = static_cast<SwFormatAnchor*>(aFrmSet.Get(RES_ANCHOR).Clone());
2793 104 : aFrmSet.Put( SwFormatAnchor( FLY_AT_PAGE, 1 ));
2794 : }
2795 :
2796 104 : aPam.DeleteMark(); // mark position node will be deleted!
2797 104 : aIntPam.DeleteMark(); // mark position node will be deleted!
2798 : pFormat = pDoc->MakeFlyAndMove( *m_pCopySource, aFrmSet,
2799 : 0,
2800 104 : pParentFrameFormat );
2801 104 : if(pAnchorItem && pFormat)
2802 : {
2803 104 : pFormat->DelFrms();
2804 104 : pAnchorItem->SetAnchor( m_pCopySource->Start() );
2805 104 : SfxItemSet aAnchorSet( pDoc->GetAttrPool(), RES_ANCHOR, RES_ANCHOR );
2806 104 : aAnchorSet.Put( *pAnchorItem );
2807 104 : pDoc->SetFlyFrmAttr( *pFormat, aAnchorSet );
2808 104 : delete pAnchorItem;
2809 : }
2810 104 : DELETEZ( m_pCopySource );
2811 : }
2812 : else
2813 : {
2814 767 : pFormat = pDoc->MakeFlySection( FLY_AT_PARA, aPam.GetPoint(),
2815 767 : &aFrmSet, pParentFrameFormat );
2816 : }
2817 871 : if(pFormat)
2818 : {
2819 871 : pFormat->Add(this);
2820 871 : if(!m_sName.isEmpty())
2821 188 : pDoc->SetFlyName((SwFlyFrameFormat&)*pFormat, m_sName);
2822 : }
2823 : // wake up the SwXTextFrame
2824 871 : static_cast<SwXTextFrame*>(this)->SetDoc( bIsDescriptor ? m_pDoc : GetFrameFormat()->GetDoc() );
2825 : }
2826 883 : else if( eType == FLYCNTTYPE_GRF)
2827 : {
2828 474 : UnoActionContext aCont(pDoc);
2829 : const ::uno::Any* pGraphicURL;
2830 948 : OUString sGraphicURL;
2831 474 : GraphicObject *pGrfObj = 0;
2832 474 : if(pProps->GetProperty(FN_UNO_GRAPHIC_U_R_L, 0, pGraphicURL))
2833 : {
2834 197 : (*pGraphicURL) >>= sGraphicURL;
2835 197 : if( sGraphicURL.startsWith(sPackageProtocol) )
2836 : {
2837 63 : pGrfObj = new GraphicObject;
2838 63 : pGrfObj->SetUserData( sGraphicURL );
2839 63 : sGraphicURL.clear();
2840 : }
2841 134 : else if( sGraphicURL.startsWith(sGraphicObjectProtocol) )
2842 : {
2843 : OString sId(OUStringToOString(
2844 : sGraphicURL.copy( sizeof(sGraphicObjectProtocol)-1 ),
2845 125 : RTL_TEXTENCODING_ASCII_US));
2846 125 : pGrfObj = new GraphicObject( sId );
2847 125 : sGraphicURL.clear();
2848 : }
2849 : }
2850 948 : Graphic aGraphic;
2851 : const ::uno::Any* pGraphic;
2852 474 : if( pProps->GetProperty( FN_UNO_GRAPHIC, 0, pGraphic ))
2853 : {
2854 276 : uno::Reference< graphic::XGraphic > xGraphic;
2855 276 : (*pGraphic) >>= xGraphic;
2856 276 : aGraphic = Graphic( xGraphic );
2857 : }
2858 :
2859 948 : OUString sFltName;
2860 : const ::uno::Any* pFilter;
2861 474 : if(pProps->GetProperty(FN_UNO_GRAPHIC_FILTER, 0, pFilter))
2862 : {
2863 197 : (*pFilter) >>= sFltName;
2864 : }
2865 :
2866 : pFormat =
2867 188 : pGrfObj ? pDoc->getIDocumentContentOperations().Insert( aPam, *pGrfObj, &aFrmSet, &aGrSet,
2868 188 : pParentFrameFormat )
2869 286 : : pDoc->getIDocumentContentOperations().Insert( aPam, sGraphicURL, sFltName, &aGraphic,
2870 948 : &aFrmSet, &aGrSet, pParentFrameFormat );
2871 474 : delete pGrfObj;
2872 474 : if(pFormat)
2873 : {
2874 948 : SwGrfNode *pGrfNd = pDoc->GetNodes()[ pFormat->GetContent().GetContentIdx()
2875 948 : ->GetIndex()+1 ]->GetGrfNode();
2876 474 : if (pGrfNd)
2877 474 : pGrfNd->SetChgTwipSize( !bSizeFound );
2878 474 : pFormat->Add(this);
2879 474 : if(!m_sName.isEmpty())
2880 418 : pDoc->SetFlyName((SwFlyFrameFormat&)*pFormat, m_sName);
2881 :
2882 : }
2883 : const ::uno::Any* pSurroundContour;
2884 474 : if(pProps->GetProperty(RES_SURROUND, MID_SURROUND_CONTOUR, pSurroundContour))
2885 91 : setPropertyValue(UNO_NAME_SURROUND_CONTOUR, *pSurroundContour);
2886 : const ::uno::Any* pContourOutside;
2887 474 : if(pProps->GetProperty(RES_SURROUND, MID_SURROUND_CONTOUROUTSIDE, pContourOutside))
2888 90 : setPropertyValue(UNO_NAME_CONTOUR_OUTSIDE, *pContourOutside);
2889 : const ::uno::Any* pContourPoly;
2890 474 : if(pProps->GetProperty(FN_PARAM_COUNTOUR_PP, 0, pContourPoly))
2891 276 : setPropertyValue(UNO_NAME_CONTOUR_POLY_POLYGON, *pContourPoly);
2892 : const ::uno::Any* pPixelContour;
2893 474 : if(pProps->GetProperty(FN_UNO_IS_PIXEL_CONTOUR, 0, pPixelContour))
2894 0 : setPropertyValue(UNO_NAME_IS_PIXEL_CONTOUR, *pPixelContour);
2895 : const ::uno::Any* pAutoContour;
2896 474 : if(pProps->GetProperty(FN_UNO_IS_AUTOMATIC_CONTOUR, 0, pAutoContour))
2897 474 : setPropertyValue(UNO_NAME_IS_AUTOMATIC_CONTOUR, *pAutoContour);
2898 : }
2899 : else
2900 : {
2901 409 : const ::uno::Any* pCLSID = 0;
2902 409 : const ::uno::Any* pStreamName = 0;
2903 409 : const ::uno::Any* pEmbeddedObject = 0;
2904 818 : if(!pProps->GetProperty(FN_UNO_CLSID, 0, pCLSID)
2905 403 : && !pProps->GetProperty( FN_UNO_STREAM_NAME, 0, pStreamName )
2906 762 : && !pProps->GetProperty( FN_EMBEDDED_OBJECT, 0, pEmbeddedObject ))
2907 0 : throw uno::RuntimeException();
2908 409 : if(pCLSID)
2909 : {
2910 6 : OUString aCLSID;
2911 12 : SvGlobalName aClassName;
2912 12 : uno::Reference < embed::XEmbeddedObject > xIPObj;
2913 12 : std::unique_ptr < comphelper::EmbeddedObjectContainer > pCnt;
2914 6 : if( (*pCLSID) >>= aCLSID )
2915 : {
2916 6 : if( !aClassName.MakeId( aCLSID ) )
2917 : {
2918 0 : lang::IllegalArgumentException aExcept;
2919 0 : aExcept.Message = "CLSID invalid";
2920 0 : throw aExcept;
2921 : }
2922 :
2923 6 : pCnt.reset( new comphelper::EmbeddedObjectContainer );
2924 6 : OUString aName;
2925 6 : xIPObj = pCnt->CreateEmbeddedObject( aClassName.GetByteSequence(), aName );
2926 : }
2927 6 : if ( xIPObj.is() )
2928 : {
2929 6 : UnoActionContext aAction(pDoc);
2930 6 : pDoc->GetIDocumentUndoRedo().StartUndo(UNDO_INSERT, NULL);
2931 6 : if(!bSizeFound)
2932 : {
2933 : //TODO/LATER: from where do I get a ViewAspect? And how do I transport it to the OLENode?
2934 0 : sal_Int64 nAspect = embed::Aspects::MSOLE_CONTENT;
2935 :
2936 : // TODO/LEAN: VisualArea still needs running state
2937 0 : svt::EmbeddedObjectRef::TryRunningState( xIPObj );
2938 :
2939 : // set parent to get correct VisArea(in case of object needing parent printer)
2940 0 : uno::Reference < container::XChild > xChild( xIPObj, uno::UNO_QUERY );
2941 0 : if ( xChild.is() )
2942 0 : xChild->setParent( pDoc->GetDocShell()->GetModel() );
2943 :
2944 : //The Size should be suggested by the OLE server if not manually set
2945 0 : MapUnit aRefMap = VCLUnoHelper::UnoEmbed2VCLMapUnit( xIPObj->getMapUnit( nAspect ) );
2946 0 : awt::Size aSize;
2947 : try
2948 : {
2949 0 : aSize = xIPObj->getVisualAreaSize( nAspect );
2950 : }
2951 0 : catch ( embed::NoVisualAreaSizeException& )
2952 : {
2953 : // the default size will be set later
2954 : }
2955 :
2956 0 : Size aSz( aSize.Width, aSize.Height );
2957 0 : if ( !aSz.Width() || !aSz.Height() )
2958 : {
2959 0 : aSz.Width() = aSz.Height() = 5000;
2960 : aSz = OutputDevice::LogicToLogic
2961 0 : ( aSz, MapMode( MAP_100TH_MM ), aRefMap );
2962 : }
2963 0 : MapMode aMyMap( MAP_TWIP );
2964 0 : aSz = OutputDevice::LogicToLogic( aSz, aRefMap, aMyMap );
2965 0 : SwFormatFrmSize aFrmSz;
2966 0 : aFrmSz.SetSize(aSz);
2967 0 : aFrmSet.Put(aFrmSz);
2968 : }
2969 6 : SwFlyFrameFormat* pFormat2 = 0;
2970 :
2971 : // TODO/LATER: Is it the only possible aspect here?
2972 6 : sal_Int64 nAspect = embed::Aspects::MSOLE_CONTENT;
2973 12 : ::svt::EmbeddedObjectRef xObjRef( xIPObj, nAspect );
2974 6 : pFormat2 = pDoc->getIDocumentContentOperations().Insert(aPam, xObjRef, &aFrmSet, NULL, NULL );
2975 : assert(pFormat2 && "Doc->Insert(notxt) failed.");
2976 :
2977 6 : pDoc->GetIDocumentUndoRedo().EndUndo(UNDO_INSERT, NULL);
2978 6 : pFormat2->Add(this);
2979 6 : if(!m_sName.isEmpty())
2980 6 : pDoc->SetFlyName((SwFlyFrameFormat&)*pFormat2, m_sName);
2981 6 : }
2982 : }
2983 403 : else if( pStreamName )
2984 : {
2985 50 : OUString sStreamName;
2986 50 : (*pStreamName) >>= sStreamName;
2987 50 : pDoc->GetIDocumentUndoRedo().StartUndo(UNDO_INSERT, NULL);
2988 :
2989 50 : SwFlyFrameFormat* pFrameFormat = 0;
2990 50 : pFrameFormat = pDoc->getIDocumentContentOperations().InsertOLE( aPam, sStreamName, embed::Aspects::MSOLE_CONTENT, &aFrmSet, NULL, NULL );
2991 50 : pDoc->GetIDocumentUndoRedo().EndUndo(UNDO_INSERT, NULL);
2992 50 : pFrameFormat->Add(this);
2993 50 : if(!m_sName.isEmpty())
2994 0 : pDoc->SetFlyName((SwFlyFrameFormat&)*pFrameFormat, m_sName);
2995 : }
2996 353 : else if( pEmbeddedObject || pStreamName )
2997 : {
2998 353 : uno::Reference< embed::XEmbeddedObject > obj;
2999 353 : (*pEmbeddedObject) >>= obj;
3000 706 : svt::EmbeddedObjectRef xObj;
3001 353 : xObj.Assign( obj, embed::Aspects::MSOLE_CONTENT );
3002 :
3003 353 : pDoc->GetIDocumentUndoRedo().StartUndo(UNDO_INSERT, NULL);
3004 :
3005 : // Not sure if these setParent() and InsertEmbeddedObject() calls are really
3006 : // needed, it seems to work without, but logic from code elsewhere suggests
3007 : // they should be done.
3008 353 : SfxObjectShell& mrPers = *pDoc->GetPersist();
3009 706 : uno::Reference < container::XChild > xChild( obj, uno::UNO_QUERY );
3010 353 : if ( xChild.is() )
3011 353 : xChild->setParent( mrPers.GetModel() );
3012 706 : OUString rName;
3013 353 : mrPers.GetEmbeddedObjectContainer().InsertEmbeddedObject( obj, rName );
3014 :
3015 353 : SwFlyFrameFormat* pFrameFormat = 0;
3016 353 : pFrameFormat = pDoc->getIDocumentContentOperations().Insert( aPam, xObj, &aFrmSet, NULL, NULL );
3017 353 : pDoc->GetIDocumentUndoRedo().EndUndo(UNDO_INSERT, NULL);
3018 353 : pFrameFormat->Add(this);
3019 353 : if(!m_sName.isEmpty())
3020 353 : pDoc->SetFlyName((SwFlyFrameFormat&)*pFrameFormat, m_sName);
3021 : }
3022 : }
3023 1754 : if( pFormat && pDoc->getIDocumentDrawModelAccess().GetDrawModel() )
3024 1345 : GetOrCreateSdrObject(*pFormat);
3025 : const ::uno::Any* pOrder;
3026 1754 : if( pProps->GetProperty(FN_UNO_Z_ORDER, 0, pOrder) )
3027 165 : setPropertyValue(UNO_NAME_Z_ORDER, *pOrder);
3028 : const ::uno::Any* pReplacement;
3029 1754 : if( pProps->GetProperty(FN_UNO_REPLACEMENT_GRAPHIC, 0, pReplacement) )
3030 55 : setPropertyValue(UNO_NAME_GRAPHIC, *pReplacement);
3031 : // new attribute Title
3032 : const ::uno::Any* pTitle;
3033 1754 : if ( pProps->GetProperty(FN_UNO_TITLE, 0, pTitle) )
3034 : {
3035 276 : setPropertyValue(UNO_NAME_TITLE, *pTitle);
3036 : }
3037 : // new attribute Description
3038 : const ::uno::Any* pDescription;
3039 1754 : if ( pProps->GetProperty(FN_UNO_DESCRIPTION, 0, pDescription) )
3040 : {
3041 276 : setPropertyValue(UNO_NAME_DESCRIPTION, *pDescription);
3042 : }
3043 :
3044 : // For grabbag
3045 : const uno::Any* pFrameIntropgrabbagItem;
3046 1754 : if( pProps->GetProperty(RES_FRMATR_GRABBAG, 0, pFrameIntropgrabbagItem) )
3047 : {
3048 142 : setPropertyValue(UNO_NAME_FRAME_INTEROP_GRAB_BAG, *pFrameIntropgrabbagItem);
3049 1754 : }
3050 : }
3051 : else
3052 0 : throw lang::IllegalArgumentException();
3053 : // reset the flag and delete Descriptor pointer
3054 3508 : ResetDescriptor();
3055 1754 : }
3056 :
3057 1886 : void SwXFrame::attach(const uno::Reference< text::XTextRange > & xTextRange)
3058 : throw (lang::IllegalArgumentException, uno::RuntimeException, std::exception)
3059 : {
3060 : SwFrameFormat* pFormat;
3061 1886 : if(IsDescriptor())
3062 1754 : attachToRange(xTextRange);
3063 132 : else if(0 != (pFormat = GetFrameFormat()))
3064 : {
3065 132 : uno::Reference<lang::XUnoTunnel> xRangeTunnel( xTextRange, uno::UNO_QUERY);
3066 132 : SwDoc* pDoc = pFormat->GetDoc();
3067 264 : SwUnoInternalPaM aIntPam(*pDoc);
3068 132 : if (::sw::XTextRangeToSwPaM(aIntPam, xTextRange))
3069 : {
3070 132 : SfxItemSet aSet( pDoc->GetAttrPool(), RES_ANCHOR, RES_ANCHOR );
3071 132 : aSet.SetParent(&pFormat->GetAttrSet());
3072 264 : SwFormatAnchor aAnchor = static_cast<const SwFormatAnchor&>(aSet.Get(RES_ANCHOR));
3073 132 : aAnchor.SetAnchor( aIntPam.Start() );
3074 132 : aSet.Put(aAnchor);
3075 264 : pDoc->SetFlyFrmAttr( *pFormat, aSet );
3076 : }
3077 : else
3078 132 : throw lang::IllegalArgumentException();
3079 : }
3080 1886 : }
3081 :
3082 75 : awt::Point SwXFrame::getPosition() throw( uno::RuntimeException, std::exception )
3083 : {
3084 75 : SolarMutexGuard aGuard;
3085 150 : uno::RuntimeException aRuntime;
3086 75 : aRuntime.Message = "position cannot be determined with this method";
3087 150 : throw aRuntime;
3088 : }
3089 :
3090 0 : void SwXFrame::setPosition(const awt::Point& /*aPosition*/) throw( uno::RuntimeException, std::exception )
3091 : {
3092 0 : SolarMutexGuard aGuard;
3093 0 : uno::RuntimeException aRuntime;
3094 0 : aRuntime.Message = "position cannot be changed with this method";
3095 0 : throw aRuntime;
3096 : }
3097 :
3098 83 : awt::Size SwXFrame::getSize() throw( uno::RuntimeException, std::exception )
3099 : {
3100 83 : const ::uno::Any aVal = getPropertyValue("Size");
3101 83 : awt::Size const * pRet = static_cast<awt::Size const *>(aVal.getValue());
3102 83 : return *pRet;
3103 : }
3104 :
3105 126 : void SwXFrame::setSize(const awt::Size& aSize)
3106 : throw( beans::PropertyVetoException, uno::RuntimeException, std::exception )
3107 : {
3108 126 : const ::uno::Any aVal(&aSize, ::cppu::UnoType<awt::Size>::get());
3109 126 : setPropertyValue("Size", aVal);
3110 126 : }
3111 :
3112 7 : OUString SwXFrame::getShapeType() throw( uno::RuntimeException, std::exception )
3113 : {
3114 7 : return OUString("FrameShape");
3115 : }
3116 :
3117 872 : SwXTextFrame::SwXTextFrame( SwDoc *_pDoc ) :
3118 : SwXText(0, CURSOR_FRAME),
3119 872 : SwXFrame(FLYCNTTYPE_FRM, aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_FRAME), _pDoc )
3120 : {
3121 872 : }
3122 :
3123 10873 : SwXTextFrame::SwXTextFrame(SwFrameFormat& rFormat) :
3124 : SwXText(rFormat.GetDoc(), CURSOR_FRAME),
3125 10873 : SwXFrame(rFormat, FLYCNTTYPE_FRM, aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_FRAME))
3126 : {
3127 :
3128 10873 : }
3129 :
3130 23490 : SwXTextFrame::~SwXTextFrame()
3131 : {
3132 23490 : }
3133 :
3134 : uno::Reference<text::XTextFrame>
3135 13869 : SwXTextFrame::CreateXTextFrame(SwDoc & rDoc, SwFrameFormat *const pFrameFormat)
3136 : {
3137 13869 : return CreateXFrame<text::XTextFrame, SwXTextFrame>(rDoc, pFrameFormat);
3138 : }
3139 :
3140 126497 : void SAL_CALL SwXTextFrame::acquire( )throw()
3141 : {
3142 126497 : SwXFrame::acquire();
3143 126497 : }
3144 :
3145 126497 : void SAL_CALL SwXTextFrame::release( )throw()
3146 : {
3147 126497 : SwXFrame::release();
3148 126497 : }
3149 :
3150 54701 : ::uno::Any SAL_CALL SwXTextFrame::queryInterface( const uno::Type& aType )
3151 : throw (uno::RuntimeException, std::exception)
3152 : {
3153 54701 : ::uno::Any aRet = SwXFrame::queryInterface(aType);
3154 54701 : if(aRet.getValueType() == cppu::UnoType<void>::get())
3155 8109 : aRet = SwXText::queryInterface(aType);
3156 54701 : if(aRet.getValueType() == cppu::UnoType<void>::get())
3157 5653 : aRet = SwXTextFrameBaseClass::queryInterface(aType);
3158 54701 : return aRet;
3159 : }
3160 :
3161 0 : uno::Sequence< uno::Type > SAL_CALL SwXTextFrame::getTypes( ) throw(uno::RuntimeException, std::exception)
3162 : {
3163 0 : uno::Sequence< uno::Type > aTextFrameTypes = SwXTextFrameBaseClass::getTypes();
3164 0 : uno::Sequence< uno::Type > aFrameTypes = SwXFrame::getTypes();
3165 0 : uno::Sequence< uno::Type > aTextTypes = SwXText::getTypes();
3166 :
3167 0 : long nIndex = aTextFrameTypes.getLength();
3168 : aTextFrameTypes.realloc(
3169 0 : aTextFrameTypes.getLength() +
3170 0 : aFrameTypes.getLength() +
3171 0 : aTextTypes.getLength());
3172 :
3173 0 : uno::Type* pTextFrameTypes = aTextFrameTypes.getArray();
3174 0 : const uno::Type* pFrameTypes = aFrameTypes.getConstArray();
3175 : long nPos;
3176 0 : for(nPos = 0; nPos <aFrameTypes.getLength(); nPos++)
3177 0 : pTextFrameTypes[nIndex++] = pFrameTypes[nPos];
3178 :
3179 0 : const uno::Type* pTextTypes = aTextTypes.getConstArray();
3180 0 : for(nPos = 0; nPos <aTextTypes.getLength(); nPos++)
3181 0 : pTextFrameTypes[nIndex++] = pTextTypes[nPos];
3182 :
3183 0 : return aTextFrameTypes;
3184 : }
3185 :
3186 0 : uno::Sequence< sal_Int8 > SAL_CALL SwXTextFrame::getImplementationId( ) throw(uno::RuntimeException, std::exception)
3187 : {
3188 0 : return css::uno::Sequence<sal_Int8>();
3189 : }
3190 :
3191 268 : uno::Reference< text::XText > SwXTextFrame::getText() throw( uno::RuntimeException, std::exception )
3192 : {
3193 268 : return this;
3194 : }
3195 :
3196 1982 : const SwStartNode *SwXTextFrame::GetStartNode() const
3197 : {
3198 1982 : const SwStartNode *pSttNd = 0;
3199 :
3200 1982 : const SwFrameFormat* pFormat = GetFrameFormat();
3201 1982 : if(pFormat)
3202 : {
3203 1982 : const SwFormatContent& rFlyContent = pFormat->GetContent();
3204 1982 : if( rFlyContent.GetContentIdx() )
3205 1982 : pSttNd = rFlyContent.GetContentIdx()->GetNode().GetStartNode();
3206 : }
3207 :
3208 1982 : return pSttNd;
3209 : }
3210 :
3211 : uno::Reference< text::XTextCursor >
3212 4053 : SwXTextFrame::CreateCursor() throw (uno::RuntimeException)
3213 : {
3214 4053 : return createTextCursor();
3215 : }
3216 :
3217 6333 : uno::Reference< text::XTextCursor > SwXTextFrame::createTextCursor() throw( uno::RuntimeException, std::exception )
3218 : {
3219 6333 : SolarMutexGuard aGuard;
3220 6333 : uno::Reference< text::XTextCursor > aRef;
3221 6333 : SwFrameFormat* pFormat = GetFrameFormat();
3222 6333 : if(pFormat)
3223 : {
3224 : //save current start node to be able to check if there is content after the table -
3225 : //otherwise the cursor would be in the body text!
3226 6332 : const SwNode& rNode = pFormat->GetContent().GetContentIdx()->GetNode();
3227 6332 : const SwStartNode* pOwnStartNode = rNode.FindSttNodeByType(SwFlyStartNode);
3228 :
3229 6332 : SwPaM aPam(rNode);
3230 6332 : aPam.Move(fnMoveForward, fnGoNode);
3231 6332 : SwTableNode* pTableNode = aPam.GetNode().FindTableNode();
3232 6332 : SwContentNode* pCont = 0;
3233 12697 : while( pTableNode )
3234 : {
3235 33 : aPam.GetPoint()->nNode = *pTableNode->EndOfSectionNode();
3236 33 : pCont = GetDoc()->GetNodes().GoNext(&aPam.GetPoint()->nNode);
3237 33 : pTableNode = pCont->FindTableNode();
3238 : }
3239 6332 : if(pCont)
3240 33 : aPam.GetPoint()->nContent.Assign(pCont, 0);
3241 :
3242 : const SwStartNode* pNewStartNode =
3243 6332 : aPam.GetNode().FindSttNodeByType(SwFlyStartNode);
3244 6332 : if(!pNewStartNode || pNewStartNode != pOwnStartNode)
3245 : {
3246 0 : uno::RuntimeException aExcept;
3247 0 : aExcept.Message = "no text available";
3248 0 : throw aExcept;
3249 : }
3250 :
3251 : SwXTextCursor *const pXCursor = new SwXTextCursor(
3252 6332 : *pFormat->GetDoc(), this, CURSOR_FRAME, *aPam.GetPoint());
3253 6332 : aRef = static_cast<text::XWordCursor*>(pXCursor);
3254 : }
3255 : else
3256 1 : throw uno::RuntimeException();
3257 6333 : return aRef;
3258 : }
3259 :
3260 668 : uno::Reference< text::XTextCursor > SwXTextFrame::createTextCursorByRange(const uno::Reference< text::XTextRange > & aTextPosition) throw( uno::RuntimeException, std::exception )
3261 : {
3262 668 : SolarMutexGuard aGuard;
3263 668 : uno::Reference< text::XTextCursor > aRef;
3264 668 : SwFrameFormat* pFormat = GetFrameFormat();
3265 1336 : SwUnoInternalPaM aPam(*GetDoc());
3266 668 : if (pFormat && ::sw::XTextRangeToSwPaM(aPam, aTextPosition))
3267 : {
3268 668 : SwNode& rNode = pFormat->GetContent().GetContentIdx()->GetNode();
3269 668 : if(aPam.GetNode().FindFlyStartNode() == rNode.FindFlyStartNode())
3270 : {
3271 : aRef = static_cast<text::XWordCursor*>(
3272 668 : new SwXTextCursor(*pFormat->GetDoc(), this, CURSOR_FRAME,
3273 668 : *aPam.GetPoint(), aPam.GetMark()));
3274 : }
3275 : }
3276 : else
3277 0 : throw uno::RuntimeException();
3278 1336 : return aRef;
3279 : }
3280 :
3281 86 : uno::Reference< container::XEnumeration > SwXTextFrame::createEnumeration() throw( uno::RuntimeException, std::exception )
3282 : {
3283 86 : SolarMutexGuard aGuard;
3284 86 : SwFrameFormat* pFormat = GetFrameFormat();
3285 86 : if(!pFormat)
3286 0 : return nullptr;
3287 172 : SwPosition aPos(pFormat->GetContent().GetContentIdx()->GetNode());
3288 172 : auto pUnoCursor(GetDoc()->CreateUnoCrsr(aPos, false));
3289 86 : pUnoCursor->Move(fnMoveForward, fnGoNode);
3290 172 : return SwXParagraphEnumeration::Create(this, pUnoCursor, CURSOR_FRAME);
3291 : }
3292 :
3293 0 : uno::Type SwXTextFrame::getElementType() throw( uno::RuntimeException, std::exception )
3294 : {
3295 0 : return cppu::UnoType<text::XTextRange>::get();
3296 : }
3297 :
3298 0 : sal_Bool SwXTextFrame::hasElements() throw( uno::RuntimeException, std::exception )
3299 : {
3300 0 : return sal_True;
3301 : }
3302 :
3303 1002 : void SwXTextFrame::attach(const uno::Reference< text::XTextRange > & xTextRange)
3304 : throw( lang::IllegalArgumentException, uno::RuntimeException, std::exception )
3305 : {
3306 1002 : SwXFrame::attach(xTextRange);
3307 1002 : }
3308 :
3309 6 : uno::Reference< text::XTextRange > SwXTextFrame::getAnchor() throw( uno::RuntimeException, std::exception )
3310 : {
3311 6 : SolarMutexGuard aGuard;
3312 6 : return SwXFrame::getAnchor();
3313 : }
3314 :
3315 3 : void SwXTextFrame::dispose() throw( uno::RuntimeException, std::exception )
3316 : {
3317 3 : SolarMutexGuard aGuard;
3318 3 : SwXFrame::dispose();
3319 3 : }
3320 :
3321 0 : void SwXTextFrame::addEventListener(const uno::Reference< lang::XEventListener > & aListener) throw( uno::RuntimeException, std::exception )
3322 : {
3323 0 : SwXFrame::addEventListener(aListener);
3324 0 : }
3325 :
3326 0 : void SwXTextFrame::removeEventListener(const uno::Reference< lang::XEventListener > & aListener) throw( uno::RuntimeException, std::exception )
3327 : {
3328 0 : SwXFrame::removeEventListener(aListener);
3329 0 : }
3330 :
3331 0 : OUString SwXTextFrame::getImplementationName() throw( uno::RuntimeException, std::exception )
3332 : {
3333 0 : return OUString("SwXTextFrame");
3334 : }
3335 :
3336 957 : sal_Bool SwXTextFrame::supportsService(const OUString& rServiceName) throw( uno::RuntimeException, std::exception )
3337 : {
3338 957 : return cppu::supportsService(this, rServiceName);
3339 : }
3340 :
3341 957 : uno::Sequence< OUString > SwXTextFrame::getSupportedServiceNames() throw( uno::RuntimeException, std::exception )
3342 : {
3343 957 : uno::Sequence < OUString > aRet = SwXFrame::getSupportedServiceNames();
3344 957 : aRet.realloc(aRet.getLength() + 2);
3345 957 : OUString* pArray = aRet.getArray();
3346 957 : pArray[aRet.getLength() - 2] = "com.sun.star.text.TextFrame";
3347 957 : pArray[aRet.getLength() - 1] = "com.sun.star.text.Text";
3348 957 : return aRet;
3349 : }
3350 :
3351 11745 : void * SAL_CALL SwXTextFrame::operator new( size_t t) throw()
3352 : {
3353 11745 : return SwXTextFrameBaseClass::operator new( t);
3354 : }
3355 :
3356 11745 : void SAL_CALL SwXTextFrame::operator delete( void * p) throw()
3357 : {
3358 11745 : SwXTextFrameBaseClass::operator delete(p);
3359 11745 : }
3360 :
3361 59 : uno::Reference<container::XNameReplace > SAL_CALL SwXTextFrame::getEvents()
3362 : throw(uno::RuntimeException, std::exception)
3363 : {
3364 59 : return new SwFrameEventDescriptor( *this );
3365 : }
3366 :
3367 8467 : sal_Int64 SAL_CALL SwXTextFrame::getSomething( const uno::Sequence< sal_Int8 >& rId )
3368 : throw(uno::RuntimeException, std::exception)
3369 : {
3370 8467 : sal_Int64 nRet = SwXFrame::getSomething( rId );
3371 8467 : if( !nRet )
3372 8467 : nRet = SwXText::getSomething( rId );
3373 :
3374 8467 : return nRet;
3375 : }
3376 :
3377 6710 : ::uno::Any SwXTextFrame::getPropertyValue(const OUString& rPropertyName)
3378 : throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException, std::exception )
3379 : {
3380 6710 : SolarMutexGuard aGuard;
3381 6710 : ::uno::Any aRet;
3382 13358 : if(rPropertyName == UNO_NAME_START_REDLINE||
3383 6648 : rPropertyName == UNO_NAME_END_REDLINE)
3384 : {
3385 : //redline can only be returned if it's a living object
3386 124 : if(!IsDescriptor())
3387 124 : aRet = SwXText::getPropertyValue(rPropertyName);
3388 : }
3389 : else
3390 6586 : aRet = SwXFrame::getPropertyValue(rPropertyName);
3391 6701 : return aRet;
3392 : }
3393 :
3394 474 : SwXTextGraphicObject::SwXTextGraphicObject( SwDoc *pDoc ) :
3395 474 : SwXFrame(FLYCNTTYPE_GRF, aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_GRAPHIC), pDoc)
3396 : {
3397 474 : }
3398 :
3399 380 : SwXTextGraphicObject::SwXTextGraphicObject(SwFrameFormat& rFormat) :
3400 380 : SwXFrame(rFormat, FLYCNTTYPE_GRF, aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_GRAPHIC))
3401 : {
3402 :
3403 380 : }
3404 :
3405 1708 : SwXTextGraphicObject::~SwXTextGraphicObject()
3406 : {
3407 :
3408 1708 : }
3409 :
3410 : uno::Reference<text::XTextContent>
3411 855 : SwXTextGraphicObject::CreateXTextGraphicObject(SwDoc & rDoc, SwFrameFormat *const pFrameFormat)
3412 : {
3413 855 : return CreateXFrame<text::XTextContent, SwXTextGraphicObject>(rDoc, pFrameFormat);
3414 : }
3415 :
3416 10744 : void SAL_CALL SwXTextGraphicObject::acquire( )throw()
3417 : {
3418 10744 : SwXFrame::acquire();
3419 10744 : }
3420 :
3421 10744 : void SAL_CALL SwXTextGraphicObject::release( )throw()
3422 : {
3423 10744 : SwXFrame::release();
3424 10744 : }
3425 :
3426 6897 : ::uno::Any SAL_CALL SwXTextGraphicObject::queryInterface( const uno::Type& aType )
3427 : throw(uno::RuntimeException, std::exception)
3428 : {
3429 6897 : ::uno::Any aRet = SwXFrame::queryInterface(aType);
3430 6897 : if(aRet.getValueType() == cppu::UnoType<void>::get())
3431 962 : aRet = SwXTextGraphicObjectBaseClass::queryInterface(aType);
3432 6897 : return aRet;
3433 : }
3434 :
3435 : uno::Sequence< uno::Type > SAL_CALL
3436 0 : SwXTextGraphicObject::getTypes( ) throw(uno::RuntimeException, std::exception)
3437 : {
3438 0 : uno::Sequence< uno::Type > aGraphicTypes = SwXTextGraphicObjectBaseClass::getTypes();
3439 0 : uno::Sequence< uno::Type > aFrameTypes = SwXFrame::getTypes();
3440 :
3441 0 : long nIndex = aGraphicTypes.getLength();
3442 : aGraphicTypes.realloc(
3443 0 : aGraphicTypes.getLength() +
3444 0 : aFrameTypes.getLength());
3445 :
3446 0 : uno::Type* pGraphicTypes = aGraphicTypes.getArray();
3447 0 : const uno::Type* pFrameTypes = aFrameTypes.getConstArray();
3448 : long nPos;
3449 0 : for(nPos = 0; nPos <aFrameTypes.getLength(); nPos++)
3450 0 : pGraphicTypes[nIndex++] = pFrameTypes[nPos];
3451 :
3452 0 : return aGraphicTypes;
3453 : }
3454 :
3455 0 : uno::Sequence< sal_Int8 > SAL_CALL SwXTextGraphicObject::getImplementationId( ) throw(uno::RuntimeException, std::exception)
3456 : {
3457 0 : return css::uno::Sequence<sal_Int8>();
3458 : }
3459 :
3460 475 : void SwXTextGraphicObject::attach(const uno::Reference< text::XTextRange > & xTextRange) throw( lang::IllegalArgumentException, uno::RuntimeException, std::exception )
3461 : {
3462 475 : SwXFrame::attach(xTextRange);
3463 475 : }
3464 :
3465 0 : uno::Reference< text::XTextRange > SwXTextGraphicObject::getAnchor() throw( uno::RuntimeException, std::exception )
3466 : {
3467 0 : SolarMutexGuard aGuard;
3468 0 : return SwXFrame::getAnchor();
3469 : }
3470 :
3471 3 : void SwXTextGraphicObject::dispose() throw( uno::RuntimeException, std::exception )
3472 : {
3473 3 : SolarMutexGuard aGuard;
3474 3 : SwXFrame::dispose();
3475 3 : }
3476 :
3477 0 : void SwXTextGraphicObject::addEventListener(const uno::Reference< lang::XEventListener > & aListener)
3478 : throw( uno::RuntimeException, std::exception )
3479 : {
3480 0 : SwXFrame::addEventListener(aListener);
3481 0 : }
3482 :
3483 0 : void SwXTextGraphicObject::removeEventListener(const uno::Reference< lang::XEventListener > & aListener)
3484 : throw( uno::RuntimeException, std::exception )
3485 : {
3486 0 : SwXFrame::removeEventListener(aListener);
3487 0 : }
3488 :
3489 0 : OUString SwXTextGraphicObject::getImplementationName() throw( uno::RuntimeException, std::exception )
3490 : {
3491 0 : return OUString("SwXTextGraphicObject");
3492 : }
3493 :
3494 110 : sal_Bool SwXTextGraphicObject::supportsService(const OUString& rServiceName) throw( uno::RuntimeException, std::exception )
3495 : {
3496 110 : return cppu::supportsService(this, rServiceName);
3497 : }
3498 :
3499 110 : uno::Sequence< OUString > SwXTextGraphicObject::getSupportedServiceNames()
3500 : throw( uno::RuntimeException, std::exception )
3501 : {
3502 110 : uno::Sequence < OUString > aRet = SwXFrame::getSupportedServiceNames();
3503 110 : aRet.realloc(aRet.getLength() + 1);
3504 110 : OUString* pArray = aRet.getArray();
3505 110 : pArray[aRet.getLength() - 1] = "com.sun.star.text.TextGraphicObject";
3506 110 : return aRet;
3507 : }
3508 :
3509 854 : void * SAL_CALL SwXTextGraphicObject::operator new( size_t t) throw()
3510 : {
3511 854 : return SwXTextGraphicObjectBaseClass::operator new(t);
3512 : }
3513 :
3514 854 : void SAL_CALL SwXTextGraphicObject::operator delete( void * p) throw()
3515 : {
3516 854 : SwXTextGraphicObjectBaseClass::operator delete(p);
3517 854 : }
3518 :
3519 : uno::Reference<container::XNameReplace> SAL_CALL
3520 6 : SwXTextGraphicObject::getEvents()
3521 : throw(uno::RuntimeException, std::exception)
3522 : {
3523 6 : return new SwFrameEventDescriptor( *this );
3524 : }
3525 :
3526 409 : SwXTextEmbeddedObject::SwXTextEmbeddedObject( SwDoc *pDoc )
3527 : : SwXFrame(FLYCNTTYPE_OLE, aSwMapProvider.GetPropertySet(PROPERTY_MAP_EMBEDDED_OBJECT), pDoc)
3528 409 : , m_xOLEListener(nullptr)
3529 409 : { }
3530 :
3531 504 : SwXTextEmbeddedObject::SwXTextEmbeddedObject(SwFrameFormat& rFormat) :
3532 504 : SwXFrame(rFormat, FLYCNTTYPE_OLE, aSwMapProvider.GetPropertySet(PROPERTY_MAP_EMBEDDED_OBJECT))
3533 : {
3534 :
3535 504 : }
3536 :
3537 1826 : SwXTextEmbeddedObject::~SwXTextEmbeddedObject()
3538 : {
3539 :
3540 1826 : }
3541 :
3542 : uno::Reference<text::XTextContent>
3543 914 : SwXTextEmbeddedObject::CreateXTextEmbeddedObject(SwDoc & rDoc, SwFrameFormat *const pFrameFormat)
3544 : {
3545 914 : return CreateXFrame<text::XTextContent, SwXTextEmbeddedObject>(rDoc, pFrameFormat);
3546 : }
3547 :
3548 7623 : void SAL_CALL SwXTextEmbeddedObject::acquire()throw()
3549 : {
3550 7623 : SwXFrame::acquire();
3551 7623 : }
3552 :
3553 7623 : void SAL_CALL SwXTextEmbeddedObject::release()throw()
3554 : {
3555 7623 : SwXFrame::release();
3556 7623 : }
3557 :
3558 4784 : ::uno::Any SAL_CALL SwXTextEmbeddedObject::queryInterface( const uno::Type& aType )
3559 : throw( uno::RuntimeException, std::exception)
3560 : {
3561 4784 : ::uno::Any aRet = SwXFrame::queryInterface(aType);;
3562 4784 : if(aRet.getValueType() == cppu::UnoType<void>::get())
3563 619 : aRet = SwXTextEmbeddedObjectBaseClass::queryInterface(aType);
3564 4784 : return aRet;
3565 : }
3566 :
3567 0 : uno::Sequence< uno::Type > SAL_CALL SwXTextEmbeddedObject::getTypes( ) throw(uno::RuntimeException, std::exception)
3568 : {
3569 0 : uno::Sequence< uno::Type > aTextEmbeddedTypes = SwXTextEmbeddedObjectBaseClass::getTypes();
3570 0 : uno::Sequence< uno::Type > aFrameTypes = SwXFrame::getTypes();
3571 :
3572 0 : long nIndex = aTextEmbeddedTypes.getLength();
3573 : aTextEmbeddedTypes.realloc(
3574 0 : aTextEmbeddedTypes.getLength() +
3575 0 : aFrameTypes.getLength());
3576 :
3577 0 : uno::Type* pTextEmbeddedTypes = aTextEmbeddedTypes.getArray();
3578 :
3579 0 : const uno::Type* pFrameTypes = aFrameTypes.getConstArray();
3580 : long nPos;
3581 0 : for(nPos = 0; nPos <aFrameTypes.getLength(); nPos++)
3582 0 : pTextEmbeddedTypes[nIndex++] = pFrameTypes[nPos];
3583 :
3584 0 : return aTextEmbeddedTypes;
3585 : }
3586 :
3587 0 : uno::Sequence< sal_Int8 > SAL_CALL SwXTextEmbeddedObject::getImplementationId( ) throw(uno::RuntimeException, std::exception)
3588 : {
3589 0 : return css::uno::Sequence<sal_Int8>();
3590 : }
3591 :
3592 409 : void SwXTextEmbeddedObject::attach(const uno::Reference< text::XTextRange > & xTextRange) throw( lang::IllegalArgumentException, uno::RuntimeException, std::exception )
3593 : {
3594 409 : SwXFrame::attach(xTextRange);
3595 409 : }
3596 :
3597 49 : uno::Reference< text::XTextRange > SwXTextEmbeddedObject::getAnchor() throw( uno::RuntimeException, std::exception )
3598 : {
3599 49 : SolarMutexGuard aGuard;
3600 49 : return SwXFrame::getAnchor();
3601 : }
3602 :
3603 0 : void SwXTextEmbeddedObject::dispose() throw( uno::RuntimeException, std::exception )
3604 : {
3605 0 : SolarMutexGuard aGuard;
3606 0 : SwXFrame::dispose();
3607 0 : }
3608 :
3609 0 : void SwXTextEmbeddedObject::addEventListener(const uno::Reference< lang::XEventListener > & aListener) throw( uno::RuntimeException, std::exception )
3610 : {
3611 0 : SwXFrame::addEventListener(aListener);
3612 0 : }
3613 :
3614 0 : void SwXTextEmbeddedObject::removeEventListener(const uno::Reference< lang::XEventListener > & aListener) throw( uno::RuntimeException, std::exception )
3615 : {
3616 0 : SwXFrame::removeEventListener(aListener);
3617 0 : }
3618 :
3619 12 : uno::Reference< lang::XComponent > SwXTextEmbeddedObject::getEmbeddedObject() throw( uno::RuntimeException, std::exception )
3620 : {
3621 12 : uno::Reference<embed::XEmbeddedObject> xObj(getExtendedControlOverEmbeddedObject());
3622 12 : return xObj.is() ? uno::Reference<lang::XComponent>(xObj->getComponent(), uno::UNO_QUERY) : nullptr;
3623 : }
3624 :
3625 12 : uno::Reference< embed::XEmbeddedObject > SAL_CALL SwXTextEmbeddedObject::getExtendedControlOverEmbeddedObject()
3626 : throw( uno::RuntimeException, std::exception )
3627 : {
3628 12 : uno::Reference< embed::XEmbeddedObject > xResult;
3629 12 : SwFrameFormat* pFormat = GetFrameFormat();
3630 12 : if(pFormat)
3631 : {
3632 12 : SwDoc* pDoc = pFormat->GetDoc();
3633 12 : const SwFormatContent* pCnt = &pFormat->GetContent();
3634 : OSL_ENSURE( pCnt->GetContentIdx() &&
3635 : pDoc->GetNodes()[ pCnt->GetContentIdx()->
3636 : GetIndex() + 1 ]->GetOLENode(), "kein OLE-Node?");
3637 :
3638 12 : SwOLENode* pOleNode = pDoc->GetNodes()[ pCnt->GetContentIdx()
3639 24 : ->GetIndex() + 1 ]->GetOLENode();
3640 12 : xResult = pOleNode->GetOLEObj().GetOleRef();
3641 12 : if ( svt::EmbeddedObjectRef::TryRunningState( xResult ) )
3642 : {
3643 : // TODO/LATER: the listener registered after client creation should be able to handle scaling, after that the client is not necessary here
3644 12 : if ( pDoc->GetDocShell() )
3645 12 : pDoc->GetDocShell()->GetIPClient( svt::EmbeddedObjectRef( xResult, embed::Aspects::MSOLE_CONTENT ) );
3646 :
3647 12 : uno::Reference < lang::XComponent > xComp( xResult->getComponent(), uno::UNO_QUERY );
3648 24 : uno::Reference< util::XModifyBroadcaster > xBrdcst( xComp, uno::UNO_QUERY);
3649 24 : uno::Reference< frame::XModel > xModel( xComp, uno::UNO_QUERY);
3650 12 : if(xBrdcst.is() && xModel.is() && !m_xOLEListener.is())
3651 : {
3652 12 : m_xOLEListener = new SwXOLEListener(*pFormat, xModel);
3653 12 : xBrdcst->addModifyListener( m_xOLEListener );
3654 12 : }
3655 : }
3656 : }
3657 12 : return xResult;
3658 : }
3659 :
3660 0 : sal_Int64 SAL_CALL SwXTextEmbeddedObject::getAspect() throw (uno::RuntimeException, std::exception)
3661 : {
3662 0 : SwFrameFormat* pFormat = GetFrameFormat();
3663 0 : if(pFormat)
3664 : {
3665 0 : SwDoc* pDoc = pFormat->GetDoc();
3666 0 : const SwFormatContent* pCnt = &pFormat->GetContent();
3667 : OSL_ENSURE( pCnt->GetContentIdx() &&
3668 : pDoc->GetNodes()[ pCnt->GetContentIdx()->
3669 : GetIndex() + 1 ]->GetOLENode(), "kein OLE-Node?");
3670 :
3671 0 : return pDoc->GetNodes()[ pCnt->GetContentIdx()->GetIndex() + 1 ]->GetOLENode()->GetAspect();
3672 : }
3673 :
3674 0 : return embed::Aspects::MSOLE_CONTENT; // return the default value
3675 : }
3676 :
3677 0 : void SAL_CALL SwXTextEmbeddedObject::setAspect( sal_Int64 nAspect ) throw (uno::RuntimeException, std::exception)
3678 : {
3679 0 : SwFrameFormat* pFormat = GetFrameFormat();
3680 0 : if(pFormat)
3681 : {
3682 0 : SwDoc* pDoc = pFormat->GetDoc();
3683 0 : const SwFormatContent* pCnt = &pFormat->GetContent();
3684 : OSL_ENSURE( pCnt->GetContentIdx() &&
3685 : pDoc->GetNodes()[ pCnt->GetContentIdx()->
3686 : GetIndex() + 1 ]->GetOLENode(), "kein OLE-Node?");
3687 :
3688 0 : pDoc->GetNodes()[ pCnt->GetContentIdx()->GetIndex() + 1 ]->GetOLENode()->SetAspect( nAspect );
3689 : }
3690 0 : }
3691 :
3692 1 : uno::Reference< graphic::XGraphic > SAL_CALL SwXTextEmbeddedObject::getReplacementGraphic() throw (uno::RuntimeException, std::exception)
3693 : {
3694 1 : SwFrameFormat* pFormat = GetFrameFormat();
3695 1 : if(pFormat)
3696 : {
3697 1 : SwDoc* pDoc = pFormat->GetDoc();
3698 1 : const SwFormatContent* pCnt = &pFormat->GetContent();
3699 : OSL_ENSURE( pCnt->GetContentIdx() &&
3700 : pDoc->GetNodes()[ pCnt->GetContentIdx()->
3701 : GetIndex() + 1 ]->GetOLENode(), "kein OLE-Node?");
3702 :
3703 1 : const Graphic* pGraphic = pDoc->GetNodes()[ pCnt->GetContentIdx()->GetIndex() + 1 ]->GetOLENode()->GetGraphic();
3704 1 : if ( pGraphic )
3705 1 : return pGraphic->GetXGraphic();
3706 : }
3707 :
3708 0 : return uno::Reference< graphic::XGraphic >();
3709 : }
3710 :
3711 0 : OUString SwXTextEmbeddedObject::getImplementationName() throw( uno::RuntimeException, std::exception )
3712 : {
3713 0 : return OUString("SwXTextEmbeddedObject");
3714 : }
3715 :
3716 58 : sal_Bool SwXTextEmbeddedObject::supportsService(const OUString& rServiceName) throw( uno::RuntimeException, std::exception )
3717 : {
3718 58 : return cppu::supportsService(this, rServiceName);
3719 : }
3720 :
3721 58 : uno::Sequence< OUString > SwXTextEmbeddedObject::getSupportedServiceNames()
3722 : throw( uno::RuntimeException, std::exception )
3723 : {
3724 58 : uno::Sequence < OUString > aRet = SwXFrame::getSupportedServiceNames();
3725 58 : aRet.realloc(aRet.getLength() + 1);
3726 58 : OUString* pArray = aRet.getArray();
3727 58 : pArray[aRet.getLength() - 1] = "com.sun.star.text.TextEmbeddedObject";
3728 58 : return aRet;
3729 : }
3730 :
3731 913 : void * SAL_CALL SwXTextEmbeddedObject::operator new( size_t t) throw()
3732 : {
3733 913 : return SwXTextEmbeddedObjectBaseClass::operator new(t);
3734 : }
3735 :
3736 913 : void SAL_CALL SwXTextEmbeddedObject::operator delete( void * p) throw()
3737 : {
3738 913 : SwXTextEmbeddedObjectBaseClass::operator delete(p);
3739 913 : }
3740 :
3741 : uno::Reference<container::XNameReplace> SAL_CALL
3742 9 : SwXTextEmbeddedObject::getEvents()
3743 : throw(uno::RuntimeException, std::exception)
3744 : {
3745 9 : return new SwFrameEventDescriptor( *this );
3746 : }
3747 :
3748 198 : TYPEINIT1(SwXOLEListener, SwClient);
3749 :
3750 12 : SwXOLEListener::SwXOLEListener( SwFormat& rOLEFormat, uno::Reference< XModel > xOLE) :
3751 : SwClient(&rOLEFormat),
3752 12 : xOLEModel(xOLE)
3753 : {
3754 12 : }
3755 :
3756 24 : SwXOLEListener::~SwXOLEListener()
3757 24 : {}
3758 :
3759 262 : void SwXOLEListener::modified( const lang::EventObject& /*rEvent*/ )
3760 : throw( uno::RuntimeException, std::exception )
3761 : {
3762 262 : SolarMutexGuard aGuard;
3763 :
3764 262 : SwOLENode* pNd = 0;
3765 262 : SwFormat* pFormat = GetFormat();
3766 262 : if(pFormat)
3767 262 : {const SwNodeIndex* pIdx = pFormat->GetContent().GetContentIdx();
3768 262 : if(pIdx)
3769 : {
3770 262 : SwNodeIndex aIdx(*pIdx, 1);
3771 262 : SwNoTextNode* pNoText = aIdx.GetNode().GetNoTextNode();
3772 262 : pNd = pNoText->GetOLENode();
3773 : }
3774 : }
3775 262 : if(!pNd)
3776 0 : throw uno::RuntimeException();
3777 :
3778 524 : uno::Reference < embed::XEmbeddedObject > xIP = pNd->GetOLEObj().GetOleRef();
3779 262 : if ( xIP.is() )
3780 : {
3781 262 : sal_Int32 nState = xIP->getCurrentState();
3782 262 : if ( nState == embed::EmbedStates::INPLACE_ACTIVE || nState == embed::EmbedStates::UI_ACTIVE )
3783 262 : return;
3784 : }
3785 :
3786 : // if the OLE-Node is UI-Active do nothing
3787 262 : pNd->SetOLESizeInvalid(true);
3788 524 : pNd->GetDoc()->SetOLEObjModified();
3789 : }
3790 :
3791 12 : void SwXOLEListener::disposing( const lang::EventObject& rEvent )
3792 : throw( uno::RuntimeException, std::exception )
3793 : {
3794 12 : SolarMutexGuard aGuard;
3795 :
3796 24 : uno::Reference< util::XModifyListener > xListener( this );
3797 :
3798 24 : uno::Reference< frame::XModel > xModel( rEvent.Source, uno::UNO_QUERY );
3799 24 : uno::Reference< util::XModifyBroadcaster > xBrdcst(xModel, uno::UNO_QUERY);
3800 :
3801 : try
3802 : {
3803 12 : if( xBrdcst.is() )
3804 12 : xBrdcst->removeModifyListener( xListener );
3805 : }
3806 0 : catch(uno::Exception const &)
3807 : {
3808 : OSL_FAIL("OLE Listener couldn't be removed");
3809 12 : }
3810 12 : }
3811 :
3812 22 : void SwXOLEListener::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
3813 : {
3814 22 : ClientModify(this, pOld, pNew);
3815 22 : if(!GetRegisteredIn())
3816 8 : xOLEModel = 0;
3817 199 : }
3818 :
3819 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|