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 :
21 : #include "cmdid.h"
22 : #include "hintids.hxx"
23 :
24 : #include <svl/stritem.hxx>
25 : #include <editeng/protitem.hxx>
26 : #include <editeng/boxitem.hxx>
27 : #include <editeng/opaqitem.hxx>
28 : #include <editeng/lrspitem.hxx>
29 : #include <editeng/ulspitem.hxx>
30 : #include <editeng/shaditem.hxx>
31 : #include <svx/swframevalidation.hxx>
32 : #include <fmtclds.hxx>
33 : #include "wrtsh.hxx"
34 : #include "view.hxx"
35 : #include "viewopt.hxx"
36 : #include "uitool.hxx"
37 : #include "frmmgr.hxx"
38 : #include "format.hxx"
39 : #include "mdiexp.hxx"
40 : #include "poolfmt.hxx"
41 : #include <com/sun/star/text/TextContentAnchorType.hpp>
42 : #include <com/sun/star/text/HoriOrientation.hpp>
43 : #include <com/sun/star/text/VertOrientation.hpp>
44 : #include <com/sun/star/text/RelOrientation.hpp>
45 :
46 : using namespace ::com::sun::star;
47 :
48 : static sal_uInt16 aFrmMgrRange[] = {
49 : RES_FRMATR_BEGIN, RES_FRMATR_END-1,
50 : SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER,
51 : FN_SET_FRM_NAME, FN_SET_FRM_NAME,
52 : 0};
53 :
54 : /*--------------------------------------------------------------------
55 : Description: determine frame attributes via Shell
56 : --------------------------------------------------------------------*/
57 0 : SwFlyFrmAttrMgr::SwFlyFrmAttrMgr( sal_Bool bNew, SwWrtShell* pSh, sal_uInt8 nType ) :
58 0 : aSet( (SwAttrPool&)pSh->GetAttrPool(), aFrmMgrRange ),
59 : pOwnSh( pSh ),
60 : bAbsPos( sal_False ),
61 : bNewFrm( bNew ),
62 : bIsInVertical( sal_False ),
63 0 : bIsInVerticalL2R( sal_False )
64 : {
65 0 : if ( bNewFrm )
66 : {
67 : // set defaults:
68 0 : sal_uInt16 nId = 0;
69 0 : switch ( nType )
70 : {
71 0 : case FRMMGR_TYPE_TEXT: nId = RES_POOLFRM_FRAME; break;
72 0 : case FRMMGR_TYPE_OLE: nId = RES_POOLFRM_OLE; break;
73 0 : case FRMMGR_TYPE_GRF: nId = RES_POOLFRM_GRAPHIC; break;
74 : }
75 0 : aSet.SetParent( &pOwnSh->GetFmtFromPool( nId )->GetAttrSet());
76 0 : aSet.Put( SwFmtFrmSize( ATT_MIN_SIZE, DFLT_WIDTH, DFLT_HEIGHT ));
77 0 : if ( 0 != ::GetHtmlMode(pSh->GetView().GetDocShell()) )
78 0 : aSet.Put( SwFmtHoriOrient( 0, text::HoriOrientation::LEFT, text::RelOrientation::PRINT_AREA ) );
79 : }
80 0 : else if ( nType == FRMMGR_TYPE_NONE )
81 : {
82 0 : pOwnSh->GetFlyFrmAttr( aSet );
83 : sal_Bool bRightToLeft;
84 0 : bIsInVertical = pOwnSh->IsFrmVertical(sal_True, bRightToLeft, bIsInVerticalL2R);
85 : }
86 0 : ::PrepareBoxInfo( aSet, *pOwnSh );
87 0 : }
88 :
89 0 : SwFlyFrmAttrMgr::SwFlyFrmAttrMgr( sal_Bool bNew, SwWrtShell* pSh, const SfxItemSet &rSet ) :
90 : aSet( rSet ),
91 : pOwnSh( pSh ),
92 : bAbsPos( sal_False ),
93 : bNewFrm( bNew ),
94 : bIsInVertical(sal_False),
95 0 : bIsInVerticalL2R(sal_False)
96 : {
97 0 : if(!bNew)
98 : {
99 : sal_Bool bRightToLeft;
100 0 : bIsInVertical = pSh->IsFrmVertical(sal_True, bRightToLeft, bIsInVerticalL2R);
101 : }
102 0 : }
103 :
104 : /*--------------------------------------------------------------------
105 : Description: Initialise
106 : --------------------------------------------------------------------*/
107 0 : void SwFlyFrmAttrMgr::UpdateAttrMgr()
108 : {
109 0 : if ( !bNewFrm && pOwnSh->IsFrmSelected() )
110 0 : pOwnSh->GetFlyFrmAttr( aSet );
111 0 : ::PrepareBoxInfo( aSet, *pOwnSh );
112 0 : }
113 :
114 0 : void SwFlyFrmAttrMgr::_UpdateFlyFrm()
115 : {
116 0 : const SfxPoolItem* pItem = 0;
117 :
118 0 : if (aSet.GetItemState(FN_SET_FRM_NAME, sal_False, &pItem) == SFX_ITEM_SET)
119 0 : pOwnSh->SetFlyName(((SfxStringItem *)pItem)->GetValue());
120 :
121 0 : pOwnSh->SetModified();
122 :
123 0 : if ( bAbsPos )
124 : {
125 0 : pOwnSh->SetFlyPos( aAbsPos );
126 0 : bAbsPos = sal_False;
127 : }
128 0 : }
129 :
130 : /*--------------------------------------------------------------------
131 : Description: change existing Fly-Frame
132 : --------------------------------------------------------------------*/
133 0 : void SwFlyFrmAttrMgr::UpdateFlyFrm()
134 : {
135 : OSL_ENSURE( pOwnSh->IsFrmSelected(),
136 : "no frame selected or no shell, update not possible");
137 :
138 0 : if( pOwnSh->IsFrmSelected() )
139 : {
140 : //JP 6.8.2001: set never an invalid anchor into the core.
141 : const SfxPoolItem *pGItem, *pItem;
142 0 : if( SFX_ITEM_SET == aSet.GetItemState( RES_ANCHOR, sal_False, &pItem ))
143 : {
144 0 : SfxItemSet aGetSet( *aSet.GetPool(), RES_ANCHOR, RES_ANCHOR );
145 0 : if( pOwnSh->GetFlyFrmAttr( aGetSet ) && 1 == aGetSet.Count() &&
146 0 : SFX_ITEM_SET == aGetSet.GetItemState( RES_ANCHOR, sal_False, &pGItem )
147 0 : && ((SwFmtAnchor*)pGItem)->GetAnchorId() ==
148 0 : ((SwFmtAnchor*)pItem)->GetAnchorId() )
149 0 : aSet.ClearItem( RES_ANCHOR );
150 : }
151 :
152 : // return wg. BASIC
153 0 : if( aSet.Count() )
154 : {
155 0 : pOwnSh->StartAllAction();
156 0 : pOwnSh->SetFlyFrmAttr( aSet );
157 0 : _UpdateFlyFrm();
158 0 : pOwnSh->EndAllAction();
159 : }
160 : }
161 0 : }
162 :
163 : /*--------------------------------------------------------------------
164 : Description: insert frame
165 : --------------------------------------------------------------------*/
166 0 : sal_Bool SwFlyFrmAttrMgr::InsertFlyFrm()
167 : {
168 0 : pOwnSh->StartAllAction();
169 :
170 0 : sal_Bool bRet = 0 != pOwnSh->NewFlyFrm( aSet );
171 :
172 : // turn on the right mode at the shell, frame got selected automatically.
173 0 : if ( bRet )
174 : {
175 0 : _UpdateFlyFrm();
176 0 : pOwnSh->EnterSelFrmMode();
177 0 : FrameNotify(pOwnSh, FLY_DRAG_START);
178 : }
179 0 : pOwnSh->EndAllAction();
180 0 : return bRet;
181 : }
182 :
183 : /*------------------------------------------------------------------------
184 : Description: Insert frames of type eAnchorType. Position and size are
185 : being set explicitly.
186 : Not-allowed values of the enumeration type get corrected.
187 : ------------------------------------------------------------------------*/
188 0 : void SwFlyFrmAttrMgr::InsertFlyFrm(RndStdIds eAnchorType,
189 : const Point &rPos,
190 : const Size &rSize,
191 : sal_Bool bAbs )
192 : {
193 : OSL_ENSURE( eAnchorType == FLY_AT_PAGE ||
194 : eAnchorType == FLY_AT_PARA ||
195 : eAnchorType == FLY_AT_CHAR ||
196 : eAnchorType == FLY_AT_FLY ||
197 : eAnchorType == FLY_AS_CHAR, "invalid frame type" );
198 :
199 0 : if ( bAbs )
200 0 : SetAbsPos( rPos );
201 : else
202 0 : SetPos( rPos );
203 :
204 0 : SetSize( rSize );
205 0 : SetAnchor( eAnchorType );
206 0 : InsertFlyFrm();
207 0 : }
208 :
209 : /*--------------------------------------------------------------------
210 : Description: set anchor
211 : --------------------------------------------------------------------*/
212 0 : void SwFlyFrmAttrMgr::SetAnchor( RndStdIds eId )
213 : {
214 : sal_uInt16 nPhyPageNum, nVirtPageNum;
215 0 : pOwnSh->GetPageNum( nPhyPageNum, nVirtPageNum );
216 :
217 0 : aSet.Put( SwFmtAnchor( eId, nPhyPageNum ) );
218 0 : if ((FLY_AT_PAGE == eId) || (FLY_AT_PARA == eId) || (FLY_AT_CHAR == eId)
219 : || (FLY_AT_FLY == eId))
220 : {
221 0 : SwFmtVertOrient aVertOrient( GetVertOrient() );
222 0 : SwFmtHoriOrient aHoriOrient( GetHoriOrient() );
223 0 : aHoriOrient.SetRelationOrient( text::RelOrientation::FRAME );
224 0 : aVertOrient.SetRelationOrient( text::RelOrientation::FRAME );
225 0 : aSet.Put( aVertOrient );
226 0 : aSet.Put( aHoriOrient );
227 : }
228 0 : }
229 :
230 : /*------------------------------------------------------------------------
231 : Description: set the attribute for columns
232 : ------------------------------------------------------------------------*/
233 0 : void SwFlyFrmAttrMgr::SetCol( const SwFmtCol &rCol )
234 : {
235 0 : aSet.Put( rCol );
236 0 : }
237 :
238 : /*--------------------------------------------------------------------
239 : Description: set absolute position
240 : --------------------------------------------------------------------*/
241 0 : void SwFlyFrmAttrMgr::SetAbsPos( const Point& rPoint )
242 : {
243 0 : bAbsPos = sal_True;
244 0 : aAbsPos = rPoint;
245 :
246 0 : SwFmtVertOrient aVertOrient( GetVertOrient() );
247 0 : SwFmtHoriOrient aHoriOrient( GetHoriOrient() );
248 0 : aHoriOrient.SetHoriOrient( text::HoriOrientation::NONE );
249 0 : aVertOrient.SetVertOrient( text::VertOrientation::NONE );
250 0 : aSet.Put( aVertOrient );
251 0 : aSet.Put( aHoriOrient );
252 0 : }
253 :
254 : /*--------------------------------------------------------------------
255 : Description: check metrics for correctness
256 : --------------------------------------------------------------------*/
257 0 : void SwFlyFrmAttrMgr::ValidateMetrics( SvxSwFrameValidation& rVal,
258 : const SwPosition* pToCharCntntPos,
259 : sal_Bool bOnlyPercentRefValue )
260 : {
261 0 : if (!bOnlyPercentRefValue)
262 : {
263 0 : rVal.nMinHeight = MINFLY + CalcTopSpace() + CalcBottomSpace();
264 0 : rVal.nMinWidth = MINFLY + CalcLeftSpace()+ CalcRightSpace();
265 : }
266 :
267 0 : SwRect aBoundRect;
268 :
269 : // OD 18.09.2003 #i18732# - adjustment for allowing vertical position
270 : // aligned to page for fly frame anchored to paragraph or to character.
271 0 : const RndStdIds eAnchorType = static_cast<RndStdIds >(rVal.nAnchorType);
272 : pOwnSh->CalcBoundRect( aBoundRect, eAnchorType,
273 : rVal.nHRelOrient,
274 : rVal.nVRelOrient,
275 : pToCharCntntPos,
276 : rVal.bFollowTextFlow,
277 0 : rVal.bMirror, NULL, &rVal.aPercentSize);
278 :
279 0 : if (bOnlyPercentRefValue)
280 0 : return;
281 :
282 : // --> OD 2009-09-01 #mongolianlayout#
283 0 : if ( bIsInVertical || bIsInVerticalL2R )
284 : {
285 0 : Point aPos(aBoundRect.Pos());
286 0 : long nTmp = aPos.X();
287 0 : aPos.X() = aPos.Y();
288 0 : aPos.Y() = nTmp;
289 0 : Size aSize(aBoundRect.SSize());
290 0 : nTmp = aSize.Width();
291 0 : aSize.Width() = aSize.Height();
292 0 : aSize.Height() = nTmp;
293 0 : aBoundRect.Chg( aPos, aSize );
294 : //exchange width/height to enable correct values
295 0 : nTmp = rVal.nWidth;
296 0 : rVal.nWidth = rVal.nHeight;
297 0 : rVal.nHeight = nTmp;
298 : }
299 0 : if ((eAnchorType == FLY_AT_PAGE) || (eAnchorType == FLY_AT_FLY))
300 : {
301 : // MinimalPosition
302 0 : rVal.nMinHPos = aBoundRect.Left();
303 0 : rVal.nMinVPos = aBoundRect.Top();
304 0 : SwTwips nH = rVal.nHPos;
305 0 : SwTwips nV = rVal.nVPos;
306 :
307 0 : if (rVal.nHPos + rVal.nWidth > aBoundRect.Right())
308 : {
309 0 : if (rVal.nHoriOrient == text::HoriOrientation::NONE)
310 : {
311 0 : rVal.nHPos -= ((rVal.nHPos + rVal.nWidth) - aBoundRect.Right());
312 0 : nH = rVal.nHPos;
313 : }
314 : else
315 0 : rVal.nWidth = aBoundRect.Right() - rVal.nHPos;
316 : }
317 :
318 0 : if (rVal.nHPos + rVal.nWidth > aBoundRect.Right())
319 0 : rVal.nWidth = aBoundRect.Right() - rVal.nHPos;
320 :
321 0 : if (rVal.nVPos + rVal.nHeight > aBoundRect.Bottom())
322 : {
323 0 : if (rVal.nVertOrient == text::VertOrientation::NONE)
324 : {
325 0 : rVal.nVPos -= ((rVal.nVPos + rVal.nHeight) - aBoundRect.Bottom());
326 0 : nV = rVal.nVPos;
327 : }
328 : else
329 0 : rVal.nHeight = aBoundRect.Bottom() - rVal.nVPos;
330 : }
331 :
332 0 : if (rVal.nVPos + rVal.nHeight > aBoundRect.Bottom())
333 0 : rVal.nHeight = aBoundRect.Bottom() - rVal.nVPos;
334 :
335 0 : if ( rVal.nVertOrient != text::VertOrientation::NONE )
336 0 : nV = aBoundRect.Top();
337 :
338 0 : if ( rVal.nHoriOrient != text::HoriOrientation::NONE )
339 0 : nH = aBoundRect.Left();
340 :
341 0 : rVal.nMaxHPos = aBoundRect.Right() - rVal.nWidth;
342 0 : rVal.nMaxHeight = aBoundRect.Bottom() - nV;
343 :
344 0 : rVal.nMaxVPos = aBoundRect.Bottom() - rVal.nHeight;
345 0 : rVal.nMaxWidth = aBoundRect.Right() - nH;
346 : }
347 : // OD 12.11.2003 #i22341# - handle to character anchored objects vertical
348 : // aligned at character or top of line in a special case
349 0 : else if ((eAnchorType == FLY_AT_PARA) ||
350 : ((eAnchorType == FLY_AT_CHAR) &&
351 0 : !(rVal.nVRelOrient == text::RelOrientation::CHAR) &&
352 0 : !(rVal.nVRelOrient == text::RelOrientation::TEXT_LINE) ) )
353 : {
354 0 : if (rVal.nHPos + rVal.nWidth > aBoundRect.Right())
355 : {
356 0 : if (rVal.nHoriOrient == text::HoriOrientation::NONE)
357 : {
358 0 : rVal.nHPos -= ((rVal.nHPos + rVal.nWidth) - aBoundRect.Right());
359 : }
360 : else
361 0 : rVal.nWidth = aBoundRect.Right() - rVal.nHPos;
362 : }
363 :
364 : // OD 29.09.2003 #i17567#, #i18732# - consider following the text flow
365 : // and alignment at page areas.
366 0 : const bool bMaxVPosAtBottom = !rVal.bFollowTextFlow ||
367 : rVal.nVRelOrient == text::RelOrientation::PAGE_FRAME ||
368 0 : rVal.nVRelOrient == text::RelOrientation::PAGE_PRINT_AREA;
369 : {
370 : SwTwips nTmpMaxVPos = ( bMaxVPosAtBottom
371 : ? aBoundRect.Bottom()
372 : : aBoundRect.Height() ) -
373 0 : rVal.nHeight;
374 0 : if ( rVal.nVPos > nTmpMaxVPos )
375 : {
376 0 : if (rVal.nVertOrient == text::VertOrientation::NONE)
377 : {
378 0 : rVal.nVPos = nTmpMaxVPos;
379 : }
380 : else
381 : {
382 : rVal.nHeight = ( bMaxVPosAtBottom
383 : ? aBoundRect.Bottom()
384 0 : : aBoundRect.Height() ) - rVal.nVPos;
385 : }
386 : }
387 : }
388 :
389 0 : rVal.nMinHPos = aBoundRect.Left();
390 0 : rVal.nMaxHPos = aBoundRect.Right() - rVal.nWidth;
391 :
392 0 : rVal.nMinVPos = aBoundRect.Top();
393 : // OD 26.09.2003 #i17567#, #i18732# - determine maximum vertical position
394 0 : if ( bMaxVPosAtBottom )
395 : {
396 0 : rVal.nMaxVPos = aBoundRect.Bottom() - rVal.nHeight;
397 : }
398 : else
399 : {
400 0 : rVal.nMaxVPos = aBoundRect.Height() - rVal.nHeight;
401 : }
402 :
403 : // maximum width height
404 : const SwTwips nH = ( rVal.nHoriOrient != text::HoriOrientation::NONE )
405 : ? aBoundRect.Left()
406 0 : : rVal.nHPos;
407 : const SwTwips nV = ( rVal.nVertOrient != text::VertOrientation::NONE )
408 : ? aBoundRect.Top()
409 0 : : rVal.nVPos;
410 0 : rVal.nMaxHeight = rVal.nMaxVPos + rVal.nHeight - nV;
411 0 : rVal.nMaxWidth = rVal.nMaxHPos + rVal.nWidth - nH;
412 : }
413 : // OD 12.11.2003 #i22341# - special case for to character anchored objects
414 : // vertical aligned at character or top of line.
415 : // Note: (1) positive vertical values are positions above the top of line
416 : // (2) negative vertical values are positions below the top of line
417 0 : else if ( (eAnchorType == FLY_AT_CHAR) &&
418 : ( rVal.nVRelOrient == text::RelOrientation::CHAR ||
419 : rVal.nVRelOrient == text::RelOrientation::TEXT_LINE ) )
420 : {
421 : // determine horizontal values
422 0 : rVal.nMinHPos = aBoundRect.Left();
423 :
424 0 : rVal.nMaxHPos = aBoundRect.Right() - rVal.nWidth;
425 0 : if (rVal.nHPos + rVal.nWidth > aBoundRect.Right())
426 : {
427 0 : if (rVal.nHoriOrient == text::HoriOrientation::NONE)
428 : {
429 0 : rVal.nHPos -= ((rVal.nHPos + rVal.nWidth) - aBoundRect.Right());
430 : }
431 : else
432 0 : rVal.nWidth = aBoundRect.Right() - rVal.nHPos;
433 : }
434 :
435 : const SwTwips nH = ( rVal.nHoriOrient != text::HoriOrientation::NONE )
436 : ? aBoundRect.Left()
437 0 : : rVal.nHPos;
438 0 : rVal.nMaxWidth = rVal.nMaxHPos + rVal.nWidth - nH;
439 :
440 : // determine vertical values
441 0 : rVal.nMinVPos = -( aBoundRect.Bottom() - rVal.nHeight );
442 0 : if ( rVal.nVPos < rVal.nMinVPos &&
443 : rVal.nVertOrient == text::VertOrientation::NONE )
444 : {
445 0 : rVal.nVPos = rVal.nMinVPos;
446 : }
447 :
448 0 : rVal.nMaxVPos = -aBoundRect.Top();
449 0 : if ( rVal.nVPos > rVal.nMaxVPos &&
450 : rVal.nVertOrient == text::VertOrientation::NONE )
451 : {
452 0 : rVal.nVPos = rVal.nMaxVPos;
453 : }
454 :
455 0 : if ( rVal.nVertOrient == text::VertOrientation::NONE )
456 : {
457 0 : rVal.nMaxHeight = aBoundRect.Bottom() + rVal.nVPos;
458 : }
459 : else
460 : {
461 0 : rVal.nMaxHeight = aBoundRect.Height();
462 0 : }
463 : }
464 0 : else if ( eAnchorType == FLY_AS_CHAR )
465 : {
466 0 : rVal.nMinHPos = 0;
467 0 : rVal.nMaxHPos = 0;
468 :
469 0 : rVal.nMaxHeight = aBoundRect.Height();
470 0 : rVal.nMaxWidth = aBoundRect.Width();
471 :
472 0 : rVal.nMaxVPos = aBoundRect.Height();
473 0 : rVal.nMinVPos = -aBoundRect.Height() + rVal.nHeight;
474 0 : if (rVal.nMaxVPos < rVal.nMinVPos)
475 : {
476 0 : rVal.nMinVPos = rVal.nMaxVPos;
477 0 : rVal.nMaxVPos = -aBoundRect.Height();
478 : }
479 : }
480 : // --> OD 2009-09-01 #mongolianlayout#
481 0 : if ( bIsInVertical || bIsInVerticalL2R )
482 : {
483 : //restore width/height exchange
484 0 : long nTmp = rVal.nWidth;
485 0 : rVal.nWidth = rVal.nHeight;
486 0 : rVal.nHeight = nTmp;
487 : }
488 :
489 0 : if (rVal.nMaxWidth < rVal.nWidth)
490 0 : rVal.nWidth = rVal.nMaxWidth;
491 0 : if (rVal.nMaxHeight < rVal.nHeight)
492 0 : rVal.nHeight = rVal.nMaxHeight;
493 : }
494 :
495 : /*--------------------------------------------------------------------
496 : Description: correction for border
497 : --------------------------------------------------------------------*/
498 0 : SwTwips SwFlyFrmAttrMgr::CalcTopSpace()
499 : {
500 0 : const SvxShadowItem& rShadow = GetShadow();
501 0 : const SvxBoxItem& rBox = GetBox();
502 0 : return rShadow.CalcShadowSpace(SHADOW_TOP ) + rBox.CalcLineSpace(BOX_LINE_TOP);
503 : }
504 :
505 0 : SwTwips SwFlyFrmAttrMgr::CalcBottomSpace()
506 : {
507 0 : const SvxShadowItem& rShadow = GetShadow();
508 0 : const SvxBoxItem& rBox = GetBox();
509 0 : return rShadow.CalcShadowSpace(SHADOW_BOTTOM) + rBox.CalcLineSpace(BOX_LINE_BOTTOM);
510 : }
511 :
512 0 : SwTwips SwFlyFrmAttrMgr::CalcLeftSpace()
513 : {
514 0 : const SvxShadowItem& rShadow = GetShadow();
515 0 : const SvxBoxItem& rBox = GetBox();
516 0 : return rShadow.CalcShadowSpace(SHADOW_LEFT) + rBox.CalcLineSpace(BOX_LINE_LEFT);
517 : }
518 :
519 0 : SwTwips SwFlyFrmAttrMgr::CalcRightSpace()
520 : {
521 0 : const SvxShadowItem& rShadow = GetShadow();
522 0 : const SvxBoxItem& rBox = GetBox();
523 0 : return rShadow.CalcShadowSpace(SHADOW_RIGHT) + rBox.CalcLineSpace(BOX_LINE_RIGHT);
524 : }
525 :
526 : /*--------------------------------------------------------------------
527 : Description: erase attribute from the set
528 : --------------------------------------------------------------------*/
529 0 : void SwFlyFrmAttrMgr::DelAttr( sal_uInt16 nId )
530 : {
531 0 : aSet.ClearItem( nId );
532 0 : }
533 :
534 0 : void SwFlyFrmAttrMgr::SetLRSpace( long nLeft, long nRight )
535 : {
536 : OSL_ENSURE( LONG_MAX != nLeft && LONG_MAX != nRight, "Welchen Raend setzen?" );
537 :
538 0 : SvxLRSpaceItem aTmp( (SvxLRSpaceItem&)aSet.Get( RES_LR_SPACE ) );
539 0 : if( LONG_MAX != nLeft )
540 0 : aTmp.SetLeft( sal_uInt16(nLeft) );
541 0 : if( LONG_MAX != nRight )
542 0 : aTmp.SetRight( sal_uInt16(nRight) );
543 0 : aSet.Put( aTmp );
544 0 : }
545 :
546 0 : void SwFlyFrmAttrMgr::SetULSpace( long nTop, long nBottom )
547 : {
548 : OSL_ENSURE(LONG_MAX != nTop && LONG_MAX != nBottom, "Welchen Raend setzen?" );
549 :
550 0 : SvxULSpaceItem aTmp( (SvxULSpaceItem&)aSet.Get( RES_UL_SPACE ) );
551 0 : if( LONG_MAX != nTop )
552 0 : aTmp.SetUpper( sal_uInt16(nTop) );
553 0 : if( LONG_MAX != nBottom )
554 0 : aTmp.SetLower( sal_uInt16(nBottom) );
555 0 : aSet.Put( aTmp );
556 0 : }
557 :
558 0 : void SwFlyFrmAttrMgr::SetPos( const Point& rPoint )
559 : {
560 0 : SwFmtVertOrient aVertOrient( GetVertOrient() );
561 0 : SwFmtHoriOrient aHoriOrient( GetHoriOrient() );
562 :
563 0 : aHoriOrient.SetPos ( rPoint.X() );
564 0 : aHoriOrient.SetHoriOrient( text::HoriOrientation::NONE );
565 :
566 0 : aVertOrient.SetPos ( rPoint.Y() );
567 0 : aVertOrient.SetVertOrient( text::VertOrientation::NONE );
568 :
569 0 : aSet.Put( aVertOrient );
570 0 : aSet.Put( aHoriOrient );
571 0 : }
572 :
573 0 : void SwFlyFrmAttrMgr::SetHorzOrientation( sal_Int16 eOrient )
574 : {
575 0 : SwFmtHoriOrient aHoriOrient( GetHoriOrient() );
576 0 : aHoriOrient.SetHoriOrient( eOrient );
577 0 : aSet.Put( aHoriOrient );
578 0 : }
579 :
580 0 : void SwFlyFrmAttrMgr::SetVertOrientation( sal_Int16 eOrient )
581 : {
582 0 : SwFmtVertOrient aVertOrient( GetVertOrient() );
583 0 : aVertOrient.SetVertOrient( eOrient );
584 0 : aSet.Put( aVertOrient );
585 0 : }
586 :
587 0 : void SwFlyFrmAttrMgr::SetHeightSizeType( SwFrmSize eType )
588 : {
589 0 : SwFmtFrmSize aSize( GetFrmSize() );
590 0 : aSize.SetHeightSizeType( eType );
591 0 : aSet.Put( aSize );
592 0 : }
593 :
594 0 : void SwFlyFrmAttrMgr::SetSize( const Size& rSize )
595 : {
596 0 : SwFmtFrmSize aSize( GetFrmSize() );
597 0 : aSize.SetSize(Size(Max(rSize.Width(), long(MINFLY)), Max(rSize.Height(), long(MINFLY))));
598 0 : aSet.Put( aSize );
599 0 : }
600 :
601 0 : void SwFlyFrmAttrMgr::SetAttrSet(const SfxItemSet& rSet)
602 : {
603 0 : aSet.ClearItem();
604 0 : aSet.Put( rSet );
605 0 : }
606 :
607 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|