1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26
27 #ifdef SW_DLLIMPLEMENTATION
28 #undef SW_DLLIMPLEMENTATION
29 #endif
30
31
32 #include "hintids.hxx"
33 #include <vcl/graph.hxx>
34 #include <svx/htmlmode.hxx>
35 #include <sfx2/objsh.hxx>
36 #include <svl/intitem.hxx>
37 #include <editeng/opaqitem.hxx>
38 #include <editeng/ulspitem.hxx>
39 #include <editeng/lrspitem.hxx>
40 // OD 18.09.2003 #i18732#
41 #include <fmtfollowtextflow.hxx>
42 #include <svx/swframevalidation.hxx>
43
44
45 #include "cmdid.h"
46 #include "uitool.hxx"
47 #include "wrtsh.hxx"
48 #include "swmodule.hxx"
49 #include "viewopt.hxx"
50 #include "frmatr.hxx"
51 #include "frmmgr.hxx"
52 #include "globals.hrc"
53 #include "frmui.hrc"
54 #include "wrap.hrc"
55 #include "wrap.hxx"
56
57 using namespace ::com::sun::star;
58
59
60 /*--------------------------------------------------------------------
61 Beschreibung:
62 --------------------------------------------------------------------*/
63
64 static sal_uInt16 __FAR_DATA aWrapPageRg[] = {
65 RES_LR_SPACE, RES_UL_SPACE,
66 RES_PROTECT, RES_SURROUND,
67 RES_PRINT, RES_PRINT,
68 0
69 };
70
71
72 /*--------------------------------------------------------------------
73 Beschreibung:
74 --------------------------------------------------------------------*/
75
76
77
SwWrapDlg(Window * pParent,SfxItemSet & rSet,SwWrtShell * pSh,sal_Bool bDrawMode)78 SwWrapDlg::SwWrapDlg(Window* pParent, SfxItemSet& rSet, SwWrtShell* pSh, sal_Bool bDrawMode) :
79 SfxSingleTabDialog(pParent, rSet, 0),
80 pWrtShell(pSh)
81
82 {
83 // TabPage erzeugen
84 SwWrapTabPage* pNewPage = (SwWrapTabPage*) SwWrapTabPage::Create(this, rSet);
85 pNewPage->SetFormatUsed(sal_False, bDrawMode);
86 pNewPage->SetShell(pWrtShell);
87 SetTabPage(pNewPage);
88
89 String sTitle(SW_RES(STR_FRMUI_WRAP));
90 SetText(sTitle);
91 }
92
93
94
~SwWrapDlg()95 SwWrapDlg::~SwWrapDlg()
96 {
97 }
98
99 /*--------------------------------------------------------------------
100 Beschreibung:
101 --------------------------------------------------------------------*/
102
103
104
SwWrapTabPage(Window * pParent,const SfxItemSet & rSet)105 SwWrapTabPage::SwWrapTabPage(Window *pParent, const SfxItemSet &rSet) :
106 SfxTabPage(pParent, SW_RES(TP_FRM_WRAP), rSet),
107
108 aWrapFLC (this, SW_RES(C_WRAP_FL)),
109 aNoWrapRB (this, SW_RES(RB_NO_WRAP)),
110 aWrapLeftRB (this, SW_RES(RB_WRAP_LEFT)),
111 aWrapRightRB (this, SW_RES(RB_WRAP_RIGHT)),
112 aWrapParallelRB (this, SW_RES(RB_WRAP_PARALLEL)),
113 aWrapThroughRB (this, SW_RES(RB_WRAP_THROUGH)),
114 aIdealWrapRB (this, SW_RES(RB_WRAP_IDEAL)),
115
116 aMarginFL (this, SW_RES(FL_MARGIN)),
117 aLeftMarginFT (this, SW_RES(FT_LEFT_MARGIN)),
118 aLeftMarginED (this, SW_RES(ED_LEFT_MARGIN)),
119 aRightMarginFT (this, SW_RES(FT_RIGHT_MARGIN)),
120 aRightMarginED (this, SW_RES(ED_RIGHT_MARGIN)),
121 aTopMarginFT (this, SW_RES(FT_TOP_MARGIN)),
122 aTopMarginED (this, SW_RES(ED_TOP_MARGIN)),
123 aBottomMarginFT (this, SW_RES(FT_BOTTOM_MARGIN)),
124 aBottomMarginED (this, SW_RES(ED_BOTTOM_MARGIN)),
125
126 aOptionsSepFL (this, SW_RES(FL_OPTION_SEP)),
127 aOptionsFL (this, SW_RES(FL_OPTION)),
128 aWrapAnchorOnlyCB (this, SW_RES(CB_ANCHOR_ONLY)),
129 aWrapTransparentCB (this, SW_RES(CB_TRANSPARENT)),
130 aWrapOutlineCB (this, SW_RES(CB_OUTLINE)),
131 aWrapOutsideCB (this, SW_RES(CB_ONLYOUTSIDE)),
132
133 aWrapIL (SW_RES(IL_WRAP)),
134 aWrapILH (SW_RES(ILH_WRAP)),
135
136 nAnchorId(FLY_AT_PARA),
137 nHtmlMode(0),
138
139 pWrtSh(0),
140
141 bFormat(sal_False),
142 bNew(sal_True),
143 bHtmlMode(sal_False),
144 bContourImage(sal_False)
145
146 {
147 FreeResource();
148 SetExchangeSupport();
149
150 Link aLk = LINK(this, SwWrapTabPage, RangeModifyHdl);
151 aLeftMarginED.SetUpHdl(aLk);
152 aLeftMarginED.SetDownHdl(aLk);
153 aLeftMarginED.SetFirstHdl(aLk);
154 aLeftMarginED.SetLastHdl(aLk);
155 aLeftMarginED.SetLoseFocusHdl(aLk);
156
157 aRightMarginED.SetUpHdl(aLk);
158 aRightMarginED.SetDownHdl(aLk);
159 aRightMarginED.SetFirstHdl(aLk);
160 aRightMarginED.SetLastHdl(aLk);
161 aRightMarginED.SetLoseFocusHdl(aLk);
162
163 aTopMarginED.SetUpHdl(aLk);
164 aTopMarginED.SetDownHdl(aLk);
165 aTopMarginED.SetFirstHdl(aLk);
166 aTopMarginED.SetLastHdl(aLk);
167 aTopMarginED.SetLoseFocusHdl(aLk);
168
169 aBottomMarginED.SetUpHdl(aLk);
170 aBottomMarginED.SetDownHdl(aLk);
171 aBottomMarginED.SetFirstHdl(aLk);
172 aBottomMarginED.SetLastHdl(aLk);
173 aBottomMarginED.SetLoseFocusHdl(aLk);
174
175 aLk = LINK(this, SwWrapTabPage, WrapTypeHdl);
176 aNoWrapRB.SetClickHdl(aLk);
177 aWrapLeftRB.SetClickHdl(aLk);
178 aWrapRightRB.SetClickHdl(aLk);
179 aWrapParallelRB.SetClickHdl(aLk);
180 aWrapThroughRB.SetClickHdl(aLk);
181 aIdealWrapRB.SetClickHdl(aLk);
182 ApplyImageList();
183 aWrapOutlineCB.SetClickHdl(LINK(this, SwWrapTabPage, ContourHdl));
184 }
185
186
187
~SwWrapTabPage()188 SwWrapTabPage::~SwWrapTabPage()
189 {
190 }
191
192
193
Create(Window * pParent,const SfxItemSet & rSet)194 SfxTabPage* SwWrapTabPage::Create(Window *pParent, const SfxItemSet &rSet)
195 {
196 return new SwWrapTabPage(pParent, rSet);
197 }
198 /*--------------------------------------------------------------------
199 Beschreibung:
200 --------------------------------------------------------------------*/
201
202
203
Reset(const SfxItemSet & rSet)204 void SwWrapTabPage::Reset(const SfxItemSet &rSet)
205 {
206 //Contour fuer Draw, Grafik und OLE (Einfuegen/Grafik/Eigenschaften fehlt noch!)
207 if( bDrawMode )
208 {
209 aWrapOutlineCB.Show();
210 aWrapOutsideCB.Show();
211
212 aWrapTransparentCB.Check( 0 == ((const SfxInt16Item&)rSet.Get(
213 FN_DRAW_WRAP_DLG)).GetValue() );
214 aWrapTransparentCB.SaveValue();
215 }
216 else
217 {
218 sal_Bool bShowCB = bFormat;
219 if( !bFormat )
220 {
221 int nSelType = pWrtSh->GetSelectionType();
222 if( ( nSelType & nsSelectionType::SEL_GRF ) ||
223 ( nSelType & nsSelectionType::SEL_OLE && GRAPHIC_NONE !=
224 pWrtSh->GetIMapGraphic().GetType() ))
225 bShowCB = sal_True;
226 }
227 if( bShowCB )
228 {
229 aWrapOutlineCB.Show();
230 aWrapOutsideCB.Show();
231 }
232 }
233
234 nHtmlMode = ::GetHtmlMode((const SwDocShell*)SfxObjectShell::Current());
235 bHtmlMode = nHtmlMode & HTMLMODE_ON ? sal_True : sal_False;
236
237 FieldUnit aMetric = ::GetDfltMetric(bHtmlMode);
238 SetMetric( aLeftMarginED , aMetric );
239 SetMetric( aRightMarginED , aMetric );
240 SetMetric( aTopMarginED , aMetric );
241 SetMetric( aBottomMarginED, aMetric );
242
243 const SwFmtSurround& rSurround = (const SwFmtSurround&)rSet.Get(RES_SURROUND);
244
245 SwSurround nSur = rSurround.GetSurround();
246 const SwFmtAnchor &rAnch = (const SwFmtAnchor&)rSet.Get(RES_ANCHOR);
247 nAnchorId = rAnch.GetAnchorId();
248
249 if (((nAnchorId == FLY_AT_PARA) || (nAnchorId == FLY_AT_CHAR))
250 && (nSur != SURROUND_NONE))
251 {
252 aWrapAnchorOnlyCB.Check( rSurround.IsAnchorOnly() );
253 }
254 else
255 {
256 aWrapAnchorOnlyCB.Enable( sal_False );
257 }
258
259 sal_Bool bContour = rSurround.IsContour();
260 aWrapOutlineCB.Check( bContour );
261 aWrapOutsideCB.Check( rSurround.IsOutside() );
262 aWrapThroughRB.Enable(!aWrapOutlineCB.IsChecked());
263 bContourImage = !bContour;
264
265 ImageRadioButton* pBtn = NULL;
266
267 switch (nSur)
268 {
269 case SURROUND_NONE:
270 {
271 pBtn = &aNoWrapRB;
272 break;
273 }
274
275 case SURROUND_THROUGHT:
276 {
277 // transparent ?
278 pBtn = &aWrapThroughRB;
279
280 if (!bDrawMode)
281 {
282 const SvxOpaqueItem& rOpaque = (const SvxOpaqueItem&)rSet.Get(RES_OPAQUE);
283 aWrapTransparentCB.Check(!rOpaque.GetValue());
284 }
285 break;
286 }
287
288 case SURROUND_PARALLEL:
289 {
290 pBtn = &aWrapParallelRB;
291 break;
292 }
293
294 case SURROUND_IDEAL:
295 {
296 pBtn = &aIdealWrapRB;
297 break;
298 }
299
300 default:
301 {
302 if (nSur == SURROUND_LEFT)
303 pBtn = &aWrapLeftRB;
304 else if (nSur == SURROUND_RIGHT)
305 pBtn = &aWrapRightRB;
306 }
307 }
308 if (pBtn)
309 {
310 pBtn->Check();
311 WrapTypeHdl(pBtn);
312 // Hier wird fuer Zeichenobjekte, die im Moment auf Durchlauf stehen,
313 // schon mal der Default "Kontur an" vorbereitet, falls man spaeter auf
314 // irgendeinen Umlauf umschaltet.
315 if (bDrawMode && !aWrapOutlineCB.IsEnabled())
316 aWrapOutlineCB.Check();
317 }
318 aWrapTransparentCB.Enable( pBtn == &aWrapThroughRB && !bHtmlMode );
319
320 const SvxULSpaceItem& rUL = (const SvxULSpaceItem&)rSet.Get(RES_UL_SPACE);
321 const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&)rSet.Get(RES_LR_SPACE);
322
323 // Abstand zum Text
324 aLeftMarginED.SetValue(aLeftMarginED.Normalize(rLR.GetLeft()), FUNIT_TWIP);
325 aRightMarginED.SetValue(aRightMarginED.Normalize(rLR.GetRight()), FUNIT_TWIP);
326 aTopMarginED.SetValue(aTopMarginED.Normalize(rUL.GetUpper()), FUNIT_TWIP);
327 aBottomMarginED.SetValue(aBottomMarginED.Normalize(rUL.GetLower()), FUNIT_TWIP);
328
329 ContourHdl(0);
330 ActivatePage( rSet );
331 }
332
333 /*--------------------------------------------------------------------
334 Beschreibung: Attribute in den Set stopfen bei OK
335 --------------------------------------------------------------------*/
336
337
338
FillItemSet(SfxItemSet & rSet)339 sal_Bool SwWrapTabPage::FillItemSet(SfxItemSet &rSet)
340 {
341 sal_Bool bModified = sal_False;
342 const SfxPoolItem* pOldItem;
343
344 const SwFmtSurround& rOldSur = (const SwFmtSurround&)GetItemSet().Get(RES_SURROUND);
345 SwFmtSurround aSur( rOldSur );
346
347 SvxOpaqueItem aOp( RES_OPAQUE);
348
349 if (!bDrawMode)
350 {
351 const SvxOpaqueItem& rOpaque = (const SvxOpaqueItem&)GetItemSet().Get(RES_OPAQUE);
352 aOp = rOpaque;
353 aOp.SetValue(sal_True);
354 }
355
356 if (aNoWrapRB.IsChecked())
357 aSur.SetSurround(SURROUND_NONE);
358 else if (aWrapLeftRB.IsChecked())
359 aSur.SetSurround(SURROUND_LEFT);
360 else if (aWrapRightRB.IsChecked())
361 aSur.SetSurround(SURROUND_RIGHT);
362 else if (aWrapParallelRB.IsChecked())
363 aSur.SetSurround(SURROUND_PARALLEL);
364 else if (aWrapThroughRB.IsChecked())
365 {
366 aSur.SetSurround(SURROUND_THROUGHT);
367 if (aWrapTransparentCB.IsChecked() && !bDrawMode)
368 aOp.SetValue(sal_False);
369 }
370 else if (aIdealWrapRB.IsChecked())
371 aSur.SetSurround(SURROUND_IDEAL);
372
373 aSur.SetAnchorOnly( aWrapAnchorOnlyCB.IsChecked() );
374 sal_Bool bContour = aWrapOutlineCB.IsChecked() && aWrapOutlineCB.IsEnabled();
375 aSur.SetContour( bContour );
376
377 if ( bContour )
378 aSur.SetOutside(aWrapOutsideCB.IsChecked());
379
380 if(0 == (pOldItem = GetOldItem( rSet, RES_SURROUND )) ||
381 aSur != *pOldItem )
382 {
383 rSet.Put(aSur);
384 bModified = sal_True;
385 }
386
387 if (!bDrawMode)
388 {
389 if(0 == (pOldItem = GetOldItem( rSet, FN_OPAQUE )) ||
390 aOp != *pOldItem )
391 {
392 rSet.Put(aOp);
393 bModified = sal_True;
394 }
395 }
396
397 sal_Bool bTopMod = aTopMarginED.IsValueModified();
398 sal_Bool bBottomMod = aBottomMarginED.IsValueModified();
399
400 SvxULSpaceItem aUL( RES_UL_SPACE );
401 aUL.SetUpper((sal_uInt16)aTopMarginED.Denormalize(aTopMarginED.GetValue(FUNIT_TWIP)));
402 aUL.SetLower((sal_uInt16)aBottomMarginED.Denormalize(aBottomMarginED.GetValue(FUNIT_TWIP)));
403
404 if ( bTopMod || bBottomMod )
405 {
406 if(0 == (pOldItem = GetOldItem(rSet, RES_UL_SPACE)) ||
407 aUL != *pOldItem )
408 {
409 rSet.Put( aUL, RES_UL_SPACE );
410 bModified = sal_True;
411 }
412 }
413
414 sal_Bool bLeftMod = aLeftMarginED.IsValueModified();
415 sal_Bool bRightMod = aRightMarginED.IsValueModified();
416
417 SvxLRSpaceItem aLR( RES_LR_SPACE );
418 aLR.SetLeft((sal_uInt16)aLeftMarginED.Denormalize(aLeftMarginED.GetValue(FUNIT_TWIP)));
419 aLR.SetRight((sal_uInt16)aRightMarginED.Denormalize(aRightMarginED.GetValue(FUNIT_TWIP)));
420
421 if ( bLeftMod || bRightMod )
422 {
423 if( 0 == (pOldItem = GetOldItem(rSet, RES_LR_SPACE)) ||
424 aLR != *pOldItem )
425 {
426 rSet.Put(aLR, RES_LR_SPACE);
427 bModified = sal_True;
428 }
429 }
430
431 if ( bDrawMode )
432 {
433 sal_Bool bChecked = aWrapTransparentCB.IsChecked() & aWrapTransparentCB.IsEnabled();
434 if (aWrapTransparentCB.GetSavedValue() != bChecked)
435 bModified |= 0 != rSet.Put(SfxInt16Item(FN_DRAW_WRAP_DLG, bChecked ? 0 : 1));
436 }
437
438 return bModified;
439 }
440
441 /*--------------------------------------------------------------------
442 Beschreibung: Bsp - Update
443 --------------------------------------------------------------------*/
444
445
446
ActivatePage(const SfxItemSet & rSet)447 void SwWrapTabPage::ActivatePage(const SfxItemSet& rSet)
448 {
449 // Anchor
450 const SwFmtAnchor &rAnch = (const SwFmtAnchor&)rSet.Get(RES_ANCHOR);
451 nAnchorId = rAnch.GetAnchorId();
452 sal_Bool bEnable = (nAnchorId != FLY_AS_CHAR);
453
454 if (!bDrawMode)
455 {
456 SwWrtShell* pSh = bFormat ? ::GetActiveWrtShell() : pWrtSh;
457 SwFlyFrmAttrMgr aMgr( bNew, pSh, (const SwAttrSet&)GetItemSet() );
458 SvxSwFrameValidation aVal;
459
460 // Size
461 const SwFmtFrmSize& rFrmSize = (const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE);
462 Size aSize = rFrmSize.GetSize();
463
464 // Rand
465 const SvxULSpaceItem& rUL = (const SvxULSpaceItem&)rSet.Get(RES_UL_SPACE);
466 const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&)rSet.Get(RES_LR_SPACE);
467 nOldLeftMargin = static_cast< sal_uInt16 >(rLR.GetLeft());
468 nOldRightMargin = static_cast< sal_uInt16 >(rLR.GetRight());
469 nOldUpperMargin = static_cast< sal_uInt16 >(rUL.GetUpper());
470 nOldLowerMargin = static_cast< sal_uInt16 >(rUL.GetLower());
471
472 // Position
473 const SwFmtHoriOrient& rHori = (const SwFmtHoriOrient&)rSet.Get(RES_HORI_ORIENT);
474 const SwFmtVertOrient& rVert = (const SwFmtVertOrient&)rSet.Get(RES_VERT_ORIENT);
475
476 aVal.nAnchorType = static_cast< sal_Int16 >(nAnchorId);
477 aVal.bAutoHeight = rFrmSize.GetHeightSizeType() == ATT_MIN_SIZE;
478 aVal.bAutoWidth = rFrmSize.GetWidthSizeType() == ATT_MIN_SIZE;
479 aVal.bMirror = rHori.IsPosToggle();
480 // OD 18.09.2003 #i18732#
481 aVal.bFollowTextFlow =
482 static_cast<const SwFmtFollowTextFlow&>(rSet.Get(RES_FOLLOW_TEXT_FLOW)).GetValue();
483
484 aVal.nHoriOrient = (short)rHori.GetHoriOrient();
485 aVal.nVertOrient = (short)rVert.GetVertOrient();
486
487 aVal.nHPos = rHori.GetPos();
488 aVal.nHRelOrient = rHori.GetRelationOrient();
489 aVal.nVPos = rVert.GetPos();
490 aVal.nVRelOrient = rVert.GetRelationOrient();
491
492 if (rFrmSize.GetWidthPercent() && rFrmSize.GetWidthPercent() != 0xff)
493 aSize.Width() = aSize.Width() * rFrmSize.GetWidthPercent() / 100;
494
495 if (rFrmSize.GetHeightPercent() && rFrmSize.GetHeightPercent() != 0xff)
496 aSize.Height() = aSize.Height() * rFrmSize.GetHeightPercent() / 100;
497
498 aVal.nWidth = aSize.Width();
499 aVal.nHeight = aSize.Height();
500 aFrmSize = aSize;
501
502 aMgr.ValidateMetrics(aVal, 0);
503
504 SwTwips nLeft;
505 SwTwips nRight;
506 SwTwips nTop;
507 SwTwips nBottom;
508
509 nLeft = aVal.nHPos - aVal.nMinHPos;
510 nRight = aVal.nMaxWidth - aVal.nWidth;
511 nTop = aVal.nVPos - aVal.nMinVPos;
512 nBottom = aVal.nMaxHeight - aVal.nHeight;
513
514 if (bHtmlMode && 0 == (nHtmlMode & HTMLMODE_FULL_ABS_POS))
515 {
516 nLeft = nRight = ( nLeft + nRight ) / 2;
517 nTop = nBottom = ( nTop + nBottom ) / 2;
518 }
519 else
520 {
521 if (aVal.nAnchorType == FLY_AS_CHAR)
522 {
523 nLeft = nRight;
524
525 if (aVal.nVPos < 0)
526 {
527 if (aVal.nVPos <= aVal.nMaxHeight)
528 nTop = aVal.nMaxVPos - aVal.nHeight;
529 else
530 nTop = nBottom = 0; // Kein Umlauf
531 }
532 else
533 nTop = aVal.nMaxVPos - aVal.nHeight - aVal.nVPos;
534 }
535 else
536 {
537 nLeft += nRight;
538 nTop += nBottom;
539 }
540
541 nBottom = nTop;
542 nRight = nLeft;
543 }
544
545 aLeftMarginED.SetMax(aLeftMarginED.Normalize(nLeft), FUNIT_TWIP);
546 aRightMarginED.SetMax(aRightMarginED.Normalize(nRight), FUNIT_TWIP);
547
548 aTopMarginED.SetMax(aTopMarginED.Normalize(nTop), FUNIT_TWIP);
549 aBottomMarginED.SetMax(aBottomMarginED.Normalize(nBottom), FUNIT_TWIP);
550
551 RangeModifyHdl(&aLeftMarginED);
552 RangeModifyHdl(&aTopMarginED);
553 }
554
555 const SwFmtSurround& rSurround = (const SwFmtSurround&)rSet.Get(RES_SURROUND);
556 SwSurround nSur = rSurround.GetSurround();
557
558 aWrapTransparentCB.Enable( bEnable && !bHtmlMode && nSur == SURROUND_THROUGHT );
559 if(bHtmlMode)
560 {
561 sal_Bool bSomeAbsPos = 0 != (nHtmlMode & HTMLMODE_SOME_ABS_POS);
562 const SwFmtHoriOrient& rHori = (const SwFmtHoriOrient&)rSet.Get(RES_HORI_ORIENT);
563 sal_Int16 eHOrient = rHori.GetHoriOrient();
564 sal_Int16 eHRelOrient = rHori.GetRelationOrient();
565 aWrapOutlineCB.Hide();
566 const bool bAllHtmlModes =
567 ((nAnchorId == FLY_AT_PARA) || (nAnchorId == FLY_AT_CHAR)) &&
568 (eHOrient == text::HoriOrientation::RIGHT || eHOrient == text::HoriOrientation::LEFT);
569 aWrapAnchorOnlyCB.Enable( bAllHtmlModes && nSur != SURROUND_NONE );
570 aWrapOutsideCB.Hide();
571 aIdealWrapRB.Enable( sal_False );
572
573
574 aWrapTransparentCB.Enable( sal_False );
575 aNoWrapRB.Enable( FLY_AT_PARA == nAnchorId );
576 aWrapParallelRB.Enable( sal_False );
577 aWrapLeftRB .Enable
578 ( (FLY_AT_PARA == nAnchorId)
579 || ( (FLY_AT_CHAR == nAnchorId)
580 && (eHOrient == text::HoriOrientation::RIGHT)
581 && (eHRelOrient == text::RelOrientation::PRINT_AREA)));
582 aWrapRightRB .Enable
583 ( (FLY_AT_PARA == nAnchorId)
584 || ( (FLY_AT_CHAR == nAnchorId)
585 && (eHOrient == text::HoriOrientation::LEFT)
586 && (eHRelOrient == text::RelOrientation::PRINT_AREA)));
587
588 aWrapThroughRB.Enable
589 ( ( (FLY_AT_PAGE == nAnchorId)
590 || ( (FLY_AT_CHAR == nAnchorId)
591 && (eHRelOrient != text::RelOrientation::PRINT_AREA))
592 || (FLY_AT_PARA == nAnchorId))
593 && bSomeAbsPos
594 && (eHOrient != text::HoriOrientation::RIGHT));
595 if(aNoWrapRB.IsChecked() && !aNoWrapRB.IsEnabled())
596 {
597 if(aWrapThroughRB.IsEnabled())
598 aWrapThroughRB.Check(sal_True);
599 else if(aWrapLeftRB.IsEnabled())
600 aWrapLeftRB.Check();
601 else if(aWrapRightRB.IsEnabled())
602 aWrapRightRB.Check();
603
604 }
605 if(aWrapLeftRB.IsChecked() && !aWrapLeftRB.IsEnabled())
606 {
607 if(aWrapRightRB.IsEnabled())
608 aWrapRightRB.Check();
609 else if(aWrapThroughRB.IsEnabled())
610 aWrapThroughRB.Check();
611 }
612 if(aWrapRightRB.IsChecked() && !aWrapRightRB.IsEnabled())
613 {
614 if(aWrapLeftRB.IsEnabled())
615 aWrapLeftRB.Check();
616 else if(aWrapThroughRB.IsEnabled())
617 aWrapThroughRB.Check();
618 }
619 if(aWrapThroughRB.IsChecked() && !aWrapThroughRB.IsEnabled())
620 if(aNoWrapRB.IsEnabled())
621 aNoWrapRB.Check();
622
623 if(aWrapParallelRB.IsChecked() && !aWrapParallelRB.IsEnabled())
624 aWrapThroughRB.Check();
625 }
626 else
627 {
628 aNoWrapRB.Enable( bEnable );
629 aWrapLeftRB.Enable( bEnable );
630 aWrapRightRB.Enable( bEnable );
631 aIdealWrapRB.Enable( bEnable );
632 aWrapThroughRB.Enable( bEnable );
633 aWrapParallelRB.Enable( bEnable );
634 aWrapAnchorOnlyCB.Enable(
635 ((nAnchorId == FLY_AT_PARA) || (nAnchorId == FLY_AT_CHAR))
636 && nSur != SURROUND_NONE );
637 }
638 ContourHdl(0);
639 }
640
641
642
DeactivatePage(SfxItemSet * _pSet)643 int SwWrapTabPage::DeactivatePage(SfxItemSet* _pSet)
644 {
645 if(_pSet)
646 FillItemSet(*_pSet);
647
648 return sal_True;
649 }
650
651 /*--------------------------------------------------------------------
652 Beschreibung: Bereichspruefung
653 --------------------------------------------------------------------*/
654
655
656
IMPL_LINK(SwWrapTabPage,RangeModifyHdl,MetricField *,pEdit)657 IMPL_LINK( SwWrapTabPage, RangeModifyHdl, MetricField *, pEdit )
658 {
659 if(bHtmlMode && 0 == (nHtmlMode & HTMLMODE_FULL_ABS_POS))
660 {
661 sal_Int64 nValue = pEdit->GetValue();
662 if (pEdit == &aLeftMarginED)
663 aRightMarginED.SetUserValue(nValue, FUNIT_NONE);
664 else if (pEdit == &aRightMarginED)
665 aLeftMarginED.SetUserValue(nValue, FUNIT_NONE);
666 else if (pEdit == &aTopMarginED)
667 aBottomMarginED.SetUserValue(nValue, FUNIT_NONE);
668 else if (pEdit == &aBottomMarginED)
669 aTopMarginED.SetUserValue(nValue, FUNIT_NONE);
670 }
671 else
672 {
673 sal_Int64 nValue = pEdit->GetValue();
674 MetricField *pOpposite = 0;
675
676 if (pEdit == &aLeftMarginED)
677 pOpposite = &aRightMarginED;
678 else if (pEdit == &aRightMarginED)
679 pOpposite = &aLeftMarginED;
680 else if (pEdit == &aTopMarginED)
681 pOpposite = &aBottomMarginED;
682 else if (pEdit == &aBottomMarginED)
683 pOpposite = &aTopMarginED;
684
685 sal_Int64 nOpposite = pOpposite->GetValue();
686
687 if (nValue + nOpposite > Max(pEdit->GetMax(), pOpposite->GetMax()))
688 pOpposite->SetValue(pOpposite->GetMax() - nValue);
689 }
690
691 return 0;
692 }
693
694 /*--------------------------------------------------------------------
695 Beschreibung:
696 --------------------------------------------------------------------*/
697
698
699
IMPL_LINK(SwWrapTabPage,WrapTypeHdl,ImageRadioButton *,pBtn)700 IMPL_LINK( SwWrapTabPage, WrapTypeHdl, ImageRadioButton *, pBtn )
701 {
702 sal_Bool bWrapThrough = (pBtn == &aWrapThroughRB);
703 aWrapTransparentCB.Enable( bWrapThrough && !bHtmlMode );
704 bWrapThrough |= ( nAnchorId == FLY_AS_CHAR );
705 aWrapOutlineCB.Enable( !bWrapThrough && pBtn != &aNoWrapRB);
706 aWrapOutsideCB.Enable( !bWrapThrough && aWrapOutlineCB.IsChecked() );
707 aWrapAnchorOnlyCB.Enable(
708 ((nAnchorId == FLY_AT_PARA) || (nAnchorId == FLY_AT_CHAR)) &&
709 (pBtn != &aNoWrapRB) );
710
711 ContourHdl(0);
712 return 0;
713 }
714
715 /*--------------------------------------------------------------------
716 Beschreibung:
717 --------------------------------------------------------------------*/
718
719
720
IMPL_LINK(SwWrapTabPage,ContourHdl,CheckBox *,EMPTYARG)721 IMPL_LINK( SwWrapTabPage, ContourHdl, CheckBox *, EMPTYARG )
722 {
723 sal_Bool bEnable = !(aWrapOutlineCB.IsChecked() && aWrapOutlineCB.IsEnabled());
724
725 aWrapOutsideCB.Enable(!bEnable);
726
727 bEnable = !aWrapOutlineCB.IsChecked();
728 if (bEnable == bContourImage) // damit es nicht immer flackert
729 {
730 bContourImage = !bEnable;
731 ApplyImageList();
732 }
733
734 return 0;
735 }
736
737 /*--------------------------------------------------------------------
738 Beschreibung:
739 --------------------------------------------------------------------*/
GetRanges()740 sal_uInt16* SwWrapTabPage::GetRanges()
741 {
742 return aWrapPageRg;
743 }
744 /* -----------------------------08.05.2002 14:28------------------------------
745
746 ---------------------------------------------------------------------------*/
DataChanged(const DataChangedEvent & rDCEvt)747 void SwWrapTabPage::DataChanged( const DataChangedEvent& rDCEvt )
748 {
749 if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
750 (rDCEvt.GetFlags() & SETTINGS_STYLE) )
751 ApplyImageList();
752
753 SfxTabPage::DataChanged( rDCEvt );
754 }
755 /* -----------------------------08.05.2002 14:28------------------------------
756
757 ---------------------------------------------------------------------------*/
ApplyImageList()758 void SwWrapTabPage::ApplyImageList()
759 {
760 ImageList& rImgLst = GetSettings().GetStyleSettings().GetHighContrastMode() ?
761 aWrapILH : aWrapIL;
762
763 aWrapThroughRB.SetModeRadioImage(rImgLst.GetImage(IMG_THROUGH));
764 sal_Bool bWrapOutline = !aWrapOutlineCB.IsChecked();
765 if(bWrapOutline)
766 {
767 aNoWrapRB.SetModeRadioImage(rImgLst.GetImage(IMG_NONE));
768 aWrapLeftRB.SetModeRadioImage(rImgLst.GetImage(IMG_LEFT));
769 aWrapRightRB.SetModeRadioImage(rImgLst.GetImage(IMG_RIGHT));
770 aWrapParallelRB.SetModeRadioImage(rImgLst.GetImage(IMG_PARALLEL));
771 aIdealWrapRB.SetModeRadioImage(rImgLst.GetImage(IMG_IDEAL));
772 }
773 else
774 {
775 aNoWrapRB.SetModeRadioImage(rImgLst.GetImage( IMG_KON_NONE ));
776 aWrapLeftRB.SetModeRadioImage(rImgLst.GetImage( IMG_KON_LEFT ));
777 aWrapRightRB.SetModeRadioImage(rImgLst.GetImage( IMG_KON_RIGHT ));
778 aWrapParallelRB.SetModeRadioImage(rImgLst.GetImage(IMG_KON_PARALLEL ));
779 aIdealWrapRB.SetModeRadioImage(rImgLst.GetImage( IMG_KON_IDEAL ));
780 }
781 }
782