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 "hintids.hxx"
21 : #include <vcl/graph.hxx>
22 : #include <svx/htmlmode.hxx>
23 : #include <sfx2/objsh.hxx>
24 : #include <svl/intitem.hxx>
25 : #include <editeng/opaqitem.hxx>
26 : #include <editeng/ulspitem.hxx>
27 : #include <editeng/lrspitem.hxx>
28 : // #i18732#
29 : #include <fmtfollowtextflow.hxx>
30 : #include <svx/swframevalidation.hxx>
31 :
32 :
33 : #include "cmdid.h"
34 : #include "uitool.hxx"
35 : #include "wrtsh.hxx"
36 : #include "swmodule.hxx"
37 : #include "viewopt.hxx"
38 : #include "frmatr.hxx"
39 : #include "frmmgr.hxx"
40 : #include "globals.hrc"
41 : #include "frmui.hrc"
42 : #include "wrap.hrc"
43 : #include "wrap.hxx"
44 :
45 : using namespace ::com::sun::star;
46 :
47 : static sal_uInt16 aWrapPageRg[] = {
48 : RES_LR_SPACE, RES_UL_SPACE,
49 : RES_PROTECT, RES_SURROUND,
50 : RES_PRINT, RES_PRINT,
51 : 0
52 : };
53 :
54 0 : SwWrapDlg::SwWrapDlg(Window* pParent, SfxItemSet& rSet, SwWrtShell* pSh, sal_Bool bDrawMode) :
55 : SfxSingleTabDialog(pParent, rSet, 0),
56 0 : pWrtShell(pSh)
57 :
58 : {
59 : // create TabPage
60 0 : SwWrapTabPage* pNewPage = (SwWrapTabPage*) SwWrapTabPage::Create(this, rSet);
61 0 : pNewPage->SetFormatUsed(sal_False, bDrawMode);
62 0 : pNewPage->SetShell(pWrtShell);
63 0 : SetTabPage(pNewPage);
64 :
65 0 : String sTitle(SW_RES(STR_FRMUI_WRAP));
66 0 : SetText(sTitle);
67 0 : }
68 :
69 0 : SwWrapDlg::~SwWrapDlg()
70 : {
71 0 : }
72 :
73 0 : SwWrapTabPage::SwWrapTabPage(Window *pParent, const SfxItemSet &rSet) :
74 : SfxTabPage(pParent, SW_RES(TP_FRM_WRAP), rSet),
75 :
76 : aWrapFLC (this, SW_RES(C_WRAP_FL)),
77 : aNoWrapRB (this, SW_RES(RB_NO_WRAP)),
78 : aWrapLeftRB (this, SW_RES(RB_WRAP_LEFT)),
79 : aWrapRightRB (this, SW_RES(RB_WRAP_RIGHT)),
80 : aWrapParallelRB (this, SW_RES(RB_WRAP_PARALLEL)),
81 : aWrapThroughRB (this, SW_RES(RB_WRAP_THROUGH)),
82 : aIdealWrapRB (this, SW_RES(RB_WRAP_IDEAL)),
83 :
84 : aMarginFL (this, SW_RES(FL_MARGIN)),
85 : aLeftMarginFT (this, SW_RES(FT_LEFT_MARGIN)),
86 : aLeftMarginED (this, SW_RES(ED_LEFT_MARGIN)),
87 : aRightMarginFT (this, SW_RES(FT_RIGHT_MARGIN)),
88 : aRightMarginED (this, SW_RES(ED_RIGHT_MARGIN)),
89 : aTopMarginFT (this, SW_RES(FT_TOP_MARGIN)),
90 : aTopMarginED (this, SW_RES(ED_TOP_MARGIN)),
91 : aBottomMarginFT (this, SW_RES(FT_BOTTOM_MARGIN)),
92 : aBottomMarginED (this, SW_RES(ED_BOTTOM_MARGIN)),
93 :
94 : aOptionsSepFL (this, SW_RES(FL_OPTION_SEP)),
95 : aOptionsFL (this, SW_RES(FL_OPTION)),
96 : aWrapAnchorOnlyCB (this, SW_RES(CB_ANCHOR_ONLY)),
97 : aWrapTransparentCB (this, SW_RES(CB_TRANSPARENT)),
98 : aWrapOutlineCB (this, SW_RES(CB_OUTLINE)),
99 : aWrapOutsideCB (this, SW_RES(CB_ONLYOUTSIDE)),
100 :
101 : aWrapIL (SW_RES(IL_WRAP)),
102 :
103 : nAnchorId(FLY_AT_PARA),
104 : nHtmlMode(0),
105 :
106 : pWrtSh(0),
107 :
108 : bFormat(sal_False),
109 : bNew(sal_True),
110 : bHtmlMode(sal_False),
111 0 : bContourImage(sal_False)
112 :
113 : {
114 0 : FreeResource();
115 0 : SetExchangeSupport();
116 :
117 0 : Link aLk = LINK(this, SwWrapTabPage, RangeModifyHdl);
118 0 : aLeftMarginED.SetUpHdl(aLk);
119 0 : aLeftMarginED.SetDownHdl(aLk);
120 0 : aLeftMarginED.SetFirstHdl(aLk);
121 0 : aLeftMarginED.SetLastHdl(aLk);
122 0 : aLeftMarginED.SetLoseFocusHdl(aLk);
123 :
124 0 : aRightMarginED.SetUpHdl(aLk);
125 0 : aRightMarginED.SetDownHdl(aLk);
126 0 : aRightMarginED.SetFirstHdl(aLk);
127 0 : aRightMarginED.SetLastHdl(aLk);
128 0 : aRightMarginED.SetLoseFocusHdl(aLk);
129 :
130 0 : aTopMarginED.SetUpHdl(aLk);
131 0 : aTopMarginED.SetDownHdl(aLk);
132 0 : aTopMarginED.SetFirstHdl(aLk);
133 0 : aTopMarginED.SetLastHdl(aLk);
134 0 : aTopMarginED.SetLoseFocusHdl(aLk);
135 :
136 0 : aBottomMarginED.SetUpHdl(aLk);
137 0 : aBottomMarginED.SetDownHdl(aLk);
138 0 : aBottomMarginED.SetFirstHdl(aLk);
139 0 : aBottomMarginED.SetLastHdl(aLk);
140 0 : aBottomMarginED.SetLoseFocusHdl(aLk);
141 :
142 0 : aLk = LINK(this, SwWrapTabPage, WrapTypeHdl);
143 0 : aNoWrapRB.SetClickHdl(aLk);
144 0 : aWrapLeftRB.SetClickHdl(aLk);
145 0 : aWrapRightRB.SetClickHdl(aLk);
146 0 : aWrapParallelRB.SetClickHdl(aLk);
147 0 : aWrapThroughRB.SetClickHdl(aLk);
148 0 : aIdealWrapRB.SetClickHdl(aLk);
149 0 : ApplyImageList();
150 0 : aWrapOutlineCB.SetClickHdl(LINK(this, SwWrapTabPage, ContourHdl));
151 0 : }
152 :
153 0 : SwWrapTabPage::~SwWrapTabPage()
154 : {
155 0 : }
156 :
157 0 : SfxTabPage* SwWrapTabPage::Create(Window *pParent, const SfxItemSet &rSet)
158 : {
159 0 : return new SwWrapTabPage(pParent, rSet);
160 : }
161 :
162 0 : void SwWrapTabPage::Reset(const SfxItemSet &rSet)
163 : {
164 : // contour for Draw, Graphic and OLE (Insert/Graphic/Properties still missing!)
165 0 : if( bDrawMode )
166 : {
167 0 : aWrapOutlineCB.Show();
168 0 : aWrapOutsideCB.Show();
169 :
170 : aWrapTransparentCB.Check( 0 == ((const SfxInt16Item&)rSet.Get(
171 0 : FN_DRAW_WRAP_DLG)).GetValue() );
172 0 : aWrapTransparentCB.SaveValue();
173 : }
174 : else
175 : {
176 0 : sal_Bool bShowCB = bFormat;
177 0 : if( !bFormat )
178 : {
179 0 : int nSelType = pWrtSh->GetSelectionType();
180 0 : if( ( nSelType & nsSelectionType::SEL_GRF ) ||
181 : ( nSelType & nsSelectionType::SEL_OLE && GRAPHIC_NONE !=
182 0 : pWrtSh->GetIMapGraphic().GetType() ))
183 0 : bShowCB = sal_True;
184 : }
185 0 : if( bShowCB )
186 : {
187 0 : aWrapOutlineCB.Show();
188 0 : aWrapOutsideCB.Show();
189 : }
190 : }
191 :
192 0 : nHtmlMode = ::GetHtmlMode((const SwDocShell*)SfxObjectShell::Current());
193 0 : bHtmlMode = nHtmlMode & HTMLMODE_ON ? sal_True : sal_False;
194 :
195 0 : FieldUnit aMetric = ::GetDfltMetric(bHtmlMode);
196 0 : SetMetric( aLeftMarginED , aMetric );
197 0 : SetMetric( aRightMarginED , aMetric );
198 0 : SetMetric( aTopMarginED , aMetric );
199 0 : SetMetric( aBottomMarginED, aMetric );
200 :
201 0 : const SwFmtSurround& rSurround = (const SwFmtSurround&)rSet.Get(RES_SURROUND);
202 :
203 0 : SwSurround nSur = rSurround.GetSurround();
204 0 : const SwFmtAnchor &rAnch = (const SwFmtAnchor&)rSet.Get(RES_ANCHOR);
205 0 : nAnchorId = rAnch.GetAnchorId();
206 :
207 0 : if (((nAnchorId == FLY_AT_PARA) || (nAnchorId == FLY_AT_CHAR))
208 : && (nSur != SURROUND_NONE))
209 : {
210 0 : aWrapAnchorOnlyCB.Check( rSurround.IsAnchorOnly() );
211 : }
212 : else
213 : {
214 0 : aWrapAnchorOnlyCB.Enable( sal_False );
215 : }
216 :
217 0 : sal_Bool bContour = rSurround.IsContour();
218 0 : aWrapOutlineCB.Check( bContour );
219 0 : aWrapOutsideCB.Check( rSurround.IsOutside() );
220 0 : aWrapThroughRB.Enable(!aWrapOutlineCB.IsChecked());
221 0 : bContourImage = !bContour;
222 :
223 0 : ImageRadioButton* pBtn = NULL;
224 :
225 0 : switch (nSur)
226 : {
227 : case SURROUND_NONE:
228 : {
229 0 : pBtn = &aNoWrapRB;
230 0 : break;
231 : }
232 :
233 : case SURROUND_THROUGHT:
234 : {
235 : // transparent ?
236 0 : pBtn = &aWrapThroughRB;
237 :
238 0 : if (!bDrawMode)
239 : {
240 0 : const SvxOpaqueItem& rOpaque = (const SvxOpaqueItem&)rSet.Get(RES_OPAQUE);
241 0 : aWrapTransparentCB.Check(!rOpaque.GetValue());
242 : }
243 0 : break;
244 : }
245 :
246 : case SURROUND_PARALLEL:
247 : {
248 0 : pBtn = &aWrapParallelRB;
249 0 : break;
250 : }
251 :
252 : case SURROUND_IDEAL:
253 : {
254 0 : pBtn = &aIdealWrapRB;
255 0 : break;
256 : }
257 :
258 : default:
259 : {
260 0 : if (nSur == SURROUND_LEFT)
261 0 : pBtn = &aWrapLeftRB;
262 0 : else if (nSur == SURROUND_RIGHT)
263 0 : pBtn = &aWrapRightRB;
264 : }
265 : }
266 0 : if (pBtn)
267 : {
268 0 : pBtn->Check();
269 0 : WrapTypeHdl(pBtn);
270 : // For character objects that currently are in passage, the default
271 : // "contour on" is prepared here, in case we switch to any other
272 : // passage later.
273 0 : if (bDrawMode && !aWrapOutlineCB.IsEnabled())
274 0 : aWrapOutlineCB.Check();
275 : }
276 0 : aWrapTransparentCB.Enable( pBtn == &aWrapThroughRB && !bHtmlMode );
277 :
278 0 : const SvxULSpaceItem& rUL = (const SvxULSpaceItem&)rSet.Get(RES_UL_SPACE);
279 0 : const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&)rSet.Get(RES_LR_SPACE);
280 :
281 : // gap to text
282 0 : aLeftMarginED.SetValue(aLeftMarginED.Normalize(rLR.GetLeft()), FUNIT_TWIP);
283 0 : aRightMarginED.SetValue(aRightMarginED.Normalize(rLR.GetRight()), FUNIT_TWIP);
284 0 : aTopMarginED.SetValue(aTopMarginED.Normalize(rUL.GetUpper()), FUNIT_TWIP);
285 0 : aBottomMarginED.SetValue(aBottomMarginED.Normalize(rUL.GetLower()), FUNIT_TWIP);
286 :
287 0 : ContourHdl(0);
288 0 : ActivatePage( rSet );
289 0 : }
290 :
291 : /*--------------------------------------------------------------------
292 : Description: stuff attributes into the set when OK
293 : --------------------------------------------------------------------*/
294 0 : sal_Bool SwWrapTabPage::FillItemSet(SfxItemSet &rSet)
295 : {
296 0 : sal_Bool bModified = sal_False;
297 : const SfxPoolItem* pOldItem;
298 :
299 0 : const SwFmtSurround& rOldSur = (const SwFmtSurround&)GetItemSet().Get(RES_SURROUND);
300 0 : SwFmtSurround aSur( rOldSur );
301 :
302 0 : SvxOpaqueItem aOp( RES_OPAQUE);
303 :
304 0 : if (!bDrawMode)
305 : {
306 0 : const SvxOpaqueItem& rOpaque = (const SvxOpaqueItem&)GetItemSet().Get(RES_OPAQUE);
307 0 : aOp = rOpaque;
308 0 : aOp.SetValue(sal_True);
309 : }
310 :
311 0 : if (aNoWrapRB.IsChecked())
312 0 : aSur.SetSurround(SURROUND_NONE);
313 0 : else if (aWrapLeftRB.IsChecked())
314 0 : aSur.SetSurround(SURROUND_LEFT);
315 0 : else if (aWrapRightRB.IsChecked())
316 0 : aSur.SetSurround(SURROUND_RIGHT);
317 0 : else if (aWrapParallelRB.IsChecked())
318 0 : aSur.SetSurround(SURROUND_PARALLEL);
319 0 : else if (aWrapThroughRB.IsChecked())
320 : {
321 0 : aSur.SetSurround(SURROUND_THROUGHT);
322 0 : if (aWrapTransparentCB.IsChecked() && !bDrawMode)
323 0 : aOp.SetValue(sal_False);
324 : }
325 0 : else if (aIdealWrapRB.IsChecked())
326 0 : aSur.SetSurround(SURROUND_IDEAL);
327 :
328 0 : aSur.SetAnchorOnly( aWrapAnchorOnlyCB.IsChecked() );
329 0 : sal_Bool bContour = aWrapOutlineCB.IsChecked() && aWrapOutlineCB.IsEnabled();
330 0 : aSur.SetContour( bContour );
331 :
332 0 : if ( bContour )
333 0 : aSur.SetOutside(aWrapOutsideCB.IsChecked());
334 :
335 0 : if(0 == (pOldItem = GetOldItem( rSet, RES_SURROUND )) ||
336 0 : aSur != *pOldItem )
337 : {
338 0 : rSet.Put(aSur);
339 0 : bModified = sal_True;
340 : }
341 :
342 0 : if (!bDrawMode)
343 : {
344 0 : if(0 == (pOldItem = GetOldItem( rSet, FN_OPAQUE )) ||
345 0 : aOp != *pOldItem )
346 : {
347 0 : rSet.Put(aOp);
348 0 : bModified = sal_True;
349 : }
350 : }
351 :
352 0 : sal_Bool bTopMod = aTopMarginED.IsValueModified();
353 0 : sal_Bool bBottomMod = aBottomMarginED.IsValueModified();
354 :
355 0 : SvxULSpaceItem aUL( RES_UL_SPACE );
356 0 : aUL.SetUpper((sal_uInt16)aTopMarginED.Denormalize(aTopMarginED.GetValue(FUNIT_TWIP)));
357 0 : aUL.SetLower((sal_uInt16)aBottomMarginED.Denormalize(aBottomMarginED.GetValue(FUNIT_TWIP)));
358 :
359 0 : if ( bTopMod || bBottomMod )
360 : {
361 0 : if(0 == (pOldItem = GetOldItem(rSet, RES_UL_SPACE)) ||
362 0 : aUL != *pOldItem )
363 : {
364 0 : rSet.Put( aUL, RES_UL_SPACE );
365 0 : bModified = sal_True;
366 : }
367 : }
368 :
369 0 : sal_Bool bLeftMod = aLeftMarginED.IsValueModified();
370 0 : sal_Bool bRightMod = aRightMarginED.IsValueModified();
371 :
372 0 : SvxLRSpaceItem aLR( RES_LR_SPACE );
373 0 : aLR.SetLeft((sal_uInt16)aLeftMarginED.Denormalize(aLeftMarginED.GetValue(FUNIT_TWIP)));
374 0 : aLR.SetRight((sal_uInt16)aRightMarginED.Denormalize(aRightMarginED.GetValue(FUNIT_TWIP)));
375 :
376 0 : if ( bLeftMod || bRightMod )
377 : {
378 0 : if( 0 == (pOldItem = GetOldItem(rSet, RES_LR_SPACE)) ||
379 0 : aLR != *pOldItem )
380 : {
381 0 : rSet.Put(aLR, RES_LR_SPACE);
382 0 : bModified = sal_True;
383 : }
384 : }
385 :
386 0 : if ( bDrawMode )
387 : {
388 0 : sal_Bool bChecked = aWrapTransparentCB.IsChecked() & aWrapTransparentCB.IsEnabled();
389 0 : if (aWrapTransparentCB.GetSavedValue() != bChecked)
390 0 : bModified |= 0 != rSet.Put(SfxInt16Item(FN_DRAW_WRAP_DLG, bChecked ? 0 : 1));
391 : }
392 :
393 0 : return bModified;
394 : }
395 :
396 : /*--------------------------------------------------------------------
397 : Description: example update
398 : --------------------------------------------------------------------*/
399 0 : void SwWrapTabPage::ActivatePage(const SfxItemSet& rSet)
400 : {
401 : // anchor
402 0 : const SwFmtAnchor &rAnch = (const SwFmtAnchor&)rSet.Get(RES_ANCHOR);
403 0 : nAnchorId = rAnch.GetAnchorId();
404 0 : sal_Bool bEnable = (nAnchorId != FLY_AS_CHAR);
405 :
406 0 : if (!bDrawMode)
407 : {
408 0 : SwWrtShell* pSh = bFormat ? ::GetActiveWrtShell() : pWrtSh;
409 0 : SwFlyFrmAttrMgr aMgr( bNew, pSh, (const SwAttrSet&)GetItemSet() );
410 0 : SvxSwFrameValidation aVal;
411 :
412 : // size
413 0 : const SwFmtFrmSize& rFrmSize = (const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE);
414 0 : Size aSize = rFrmSize.GetSize();
415 :
416 : // margin
417 0 : const SvxULSpaceItem& rUL = (const SvxULSpaceItem&)rSet.Get(RES_UL_SPACE);
418 0 : const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&)rSet.Get(RES_LR_SPACE);
419 0 : nOldLeftMargin = static_cast< sal_uInt16 >(rLR.GetLeft());
420 0 : nOldRightMargin = static_cast< sal_uInt16 >(rLR.GetRight());
421 0 : nOldUpperMargin = static_cast< sal_uInt16 >(rUL.GetUpper());
422 0 : nOldLowerMargin = static_cast< sal_uInt16 >(rUL.GetLower());
423 :
424 : // position
425 0 : const SwFmtHoriOrient& rHori = (const SwFmtHoriOrient&)rSet.Get(RES_HORI_ORIENT);
426 0 : const SwFmtVertOrient& rVert = (const SwFmtVertOrient&)rSet.Get(RES_VERT_ORIENT);
427 :
428 0 : aVal.nAnchorType = static_cast< sal_Int16 >(nAnchorId);
429 0 : aVal.bAutoHeight = rFrmSize.GetHeightSizeType() == ATT_MIN_SIZE;
430 0 : aVal.bAutoWidth = rFrmSize.GetWidthSizeType() == ATT_MIN_SIZE;
431 0 : aVal.bMirror = rHori.IsPosToggle();
432 : // #i18732#
433 : aVal.bFollowTextFlow =
434 0 : static_cast<const SwFmtFollowTextFlow&>(rSet.Get(RES_FOLLOW_TEXT_FLOW)).GetValue();
435 :
436 0 : aVal.nHoriOrient = (short)rHori.GetHoriOrient();
437 0 : aVal.nVertOrient = (short)rVert.GetVertOrient();
438 :
439 0 : aVal.nHPos = rHori.GetPos();
440 0 : aVal.nHRelOrient = rHori.GetRelationOrient();
441 0 : aVal.nVPos = rVert.GetPos();
442 0 : aVal.nVRelOrient = rVert.GetRelationOrient();
443 :
444 0 : if (rFrmSize.GetWidthPercent() && rFrmSize.GetWidthPercent() != 0xff)
445 0 : aSize.Width() = aSize.Width() * rFrmSize.GetWidthPercent() / 100;
446 :
447 0 : if (rFrmSize.GetHeightPercent() && rFrmSize.GetHeightPercent() != 0xff)
448 0 : aSize.Height() = aSize.Height() * rFrmSize.GetHeightPercent() / 100;
449 :
450 0 : aVal.nWidth = aSize.Width();
451 0 : aVal.nHeight = aSize.Height();
452 0 : aFrmSize = aSize;
453 :
454 0 : aMgr.ValidateMetrics(aVal, 0);
455 :
456 : SwTwips nLeft;
457 : SwTwips nRight;
458 : SwTwips nTop;
459 : SwTwips nBottom;
460 :
461 0 : nLeft = aVal.nHPos - aVal.nMinHPos;
462 0 : nRight = aVal.nMaxWidth - aVal.nWidth;
463 0 : nTop = aVal.nVPos - aVal.nMinVPos;
464 0 : nBottom = aVal.nMaxHeight - aVal.nHeight;
465 :
466 : {
467 0 : if (aVal.nAnchorType == FLY_AS_CHAR)
468 : {
469 0 : nLeft = nRight;
470 :
471 0 : if (aVal.nVPos < 0)
472 : {
473 0 : if (aVal.nVPos <= aVal.nMaxHeight)
474 0 : nTop = aVal.nMaxVPos - aVal.nHeight;
475 : else
476 0 : nTop = nBottom = 0; // no passage
477 : }
478 : else
479 0 : nTop = aVal.nMaxVPos - aVal.nHeight - aVal.nVPos;
480 : }
481 : else
482 : {
483 0 : nLeft += nRight;
484 0 : nTop += nBottom;
485 : }
486 :
487 0 : nBottom = nTop;
488 0 : nRight = nLeft;
489 : }
490 :
491 0 : aLeftMarginED.SetMax(aLeftMarginED.Normalize(nLeft), FUNIT_TWIP);
492 0 : aRightMarginED.SetMax(aRightMarginED.Normalize(nRight), FUNIT_TWIP);
493 :
494 0 : aTopMarginED.SetMax(aTopMarginED.Normalize(nTop), FUNIT_TWIP);
495 0 : aBottomMarginED.SetMax(aBottomMarginED.Normalize(nBottom), FUNIT_TWIP);
496 :
497 0 : RangeModifyHdl(&aLeftMarginED);
498 0 : RangeModifyHdl(&aTopMarginED);
499 : }
500 :
501 0 : const SwFmtSurround& rSurround = (const SwFmtSurround&)rSet.Get(RES_SURROUND);
502 0 : SwSurround nSur = rSurround.GetSurround();
503 :
504 0 : aWrapTransparentCB.Enable( bEnable && !bHtmlMode && nSur == SURROUND_THROUGHT );
505 0 : if(bHtmlMode)
506 : {
507 0 : const SwFmtHoriOrient& rHori = (const SwFmtHoriOrient&)rSet.Get(RES_HORI_ORIENT);
508 0 : sal_Int16 eHOrient = rHori.GetHoriOrient();
509 0 : sal_Int16 eHRelOrient = rHori.GetRelationOrient();
510 0 : aWrapOutlineCB.Hide();
511 : const bool bAllHtmlModes =
512 : ((nAnchorId == FLY_AT_PARA) || (nAnchorId == FLY_AT_CHAR)) &&
513 0 : (eHOrient == text::HoriOrientation::RIGHT || eHOrient == text::HoriOrientation::LEFT);
514 0 : aWrapAnchorOnlyCB.Enable( bAllHtmlModes && nSur != SURROUND_NONE );
515 0 : aWrapOutsideCB.Hide();
516 0 : aIdealWrapRB.Enable( sal_False );
517 :
518 :
519 0 : aWrapTransparentCB.Enable( sal_False );
520 0 : aNoWrapRB.Enable( FLY_AT_PARA == nAnchorId );
521 0 : aWrapParallelRB.Enable( sal_False );
522 : aWrapLeftRB .Enable
523 : ( (FLY_AT_PARA == nAnchorId)
524 : || ( (FLY_AT_CHAR == nAnchorId)
525 : && (eHOrient == text::HoriOrientation::RIGHT)
526 0 : && (eHRelOrient == text::RelOrientation::PRINT_AREA)));
527 : aWrapRightRB .Enable
528 : ( (FLY_AT_PARA == nAnchorId)
529 : || ( (FLY_AT_CHAR == nAnchorId)
530 : && (eHOrient == text::HoriOrientation::LEFT)
531 0 : && (eHRelOrient == text::RelOrientation::PRINT_AREA)));
532 :
533 : aWrapThroughRB.Enable
534 : ( ( (FLY_AT_PAGE == nAnchorId)
535 : || ( (FLY_AT_CHAR == nAnchorId)
536 : && (eHRelOrient != text::RelOrientation::PRINT_AREA))
537 : || (FLY_AT_PARA == nAnchorId))
538 0 : && (eHOrient != text::HoriOrientation::RIGHT));
539 0 : if(aNoWrapRB.IsChecked() && !aNoWrapRB.IsEnabled())
540 : {
541 0 : if(aWrapThroughRB.IsEnabled())
542 0 : aWrapThroughRB.Check(sal_True);
543 0 : else if(aWrapLeftRB.IsEnabled())
544 0 : aWrapLeftRB.Check();
545 0 : else if(aWrapRightRB.IsEnabled())
546 0 : aWrapRightRB.Check();
547 :
548 : }
549 0 : if(aWrapLeftRB.IsChecked() && !aWrapLeftRB.IsEnabled())
550 : {
551 0 : if(aWrapRightRB.IsEnabled())
552 0 : aWrapRightRB.Check();
553 0 : else if(aWrapThroughRB.IsEnabled())
554 0 : aWrapThroughRB.Check();
555 : }
556 0 : if(aWrapRightRB.IsChecked() && !aWrapRightRB.IsEnabled())
557 : {
558 0 : if(aWrapLeftRB.IsEnabled())
559 0 : aWrapLeftRB.Check();
560 0 : else if(aWrapThroughRB.IsEnabled())
561 0 : aWrapThroughRB.Check();
562 : }
563 0 : if(aWrapThroughRB.IsChecked() && !aWrapThroughRB.IsEnabled())
564 0 : if(aNoWrapRB.IsEnabled())
565 0 : aNoWrapRB.Check();
566 :
567 0 : if(aWrapParallelRB.IsChecked() && !aWrapParallelRB.IsEnabled())
568 0 : aWrapThroughRB.Check();
569 : }
570 : else
571 : {
572 0 : aNoWrapRB.Enable( bEnable );
573 0 : aWrapLeftRB.Enable( bEnable );
574 0 : aWrapRightRB.Enable( bEnable );
575 0 : aIdealWrapRB.Enable( bEnable );
576 0 : aWrapThroughRB.Enable( bEnable );
577 0 : aWrapParallelRB.Enable( bEnable );
578 : aWrapAnchorOnlyCB.Enable(
579 : ((nAnchorId == FLY_AT_PARA) || (nAnchorId == FLY_AT_CHAR))
580 0 : && nSur != SURROUND_NONE );
581 : }
582 0 : ContourHdl(0);
583 0 : }
584 :
585 0 : int SwWrapTabPage::DeactivatePage(SfxItemSet* _pSet)
586 : {
587 0 : if(_pSet)
588 0 : FillItemSet(*_pSet);
589 :
590 0 : return sal_True;
591 : }
592 :
593 : /*--------------------------------------------------------------------
594 : Description: range check
595 : --------------------------------------------------------------------*/
596 0 : IMPL_LINK( SwWrapTabPage, RangeModifyHdl, MetricField *, pEdit )
597 : {
598 0 : sal_Int64 nValue = pEdit->GetValue();
599 0 : MetricField *pOpposite = 0;
600 :
601 0 : if (pEdit == &aLeftMarginED)
602 0 : pOpposite = &aRightMarginED;
603 0 : else if (pEdit == &aRightMarginED)
604 0 : pOpposite = &aLeftMarginED;
605 0 : else if (pEdit == &aTopMarginED)
606 0 : pOpposite = &aBottomMarginED;
607 0 : else if (pEdit == &aBottomMarginED)
608 0 : pOpposite = &aTopMarginED;
609 :
610 : OSL_ASSERT(pOpposite);
611 :
612 0 : if (pOpposite)
613 : {
614 0 : sal_Int64 nOpposite = pOpposite->GetValue();
615 :
616 0 : if (nValue + nOpposite > Max(pEdit->GetMax(), pOpposite->GetMax()))
617 0 : pOpposite->SetValue(pOpposite->GetMax() - nValue);
618 : }
619 :
620 0 : return 0;
621 : }
622 :
623 0 : IMPL_LINK( SwWrapTabPage, WrapTypeHdl, ImageRadioButton *, pBtn )
624 : {
625 0 : sal_Bool bWrapThrough = (pBtn == &aWrapThroughRB);
626 0 : aWrapTransparentCB.Enable( bWrapThrough && !bHtmlMode );
627 0 : bWrapThrough |= ( nAnchorId == FLY_AS_CHAR );
628 0 : aWrapOutlineCB.Enable( !bWrapThrough && pBtn != &aNoWrapRB);
629 0 : aWrapOutsideCB.Enable( !bWrapThrough && aWrapOutlineCB.IsChecked() );
630 : aWrapAnchorOnlyCB.Enable(
631 : ((nAnchorId == FLY_AT_PARA) || (nAnchorId == FLY_AT_CHAR)) &&
632 0 : (pBtn != &aNoWrapRB) );
633 :
634 0 : ContourHdl(0);
635 0 : return 0;
636 : }
637 :
638 0 : IMPL_LINK_NOARG(SwWrapTabPage, ContourHdl)
639 : {
640 0 : sal_Bool bEnable = !(aWrapOutlineCB.IsChecked() && aWrapOutlineCB.IsEnabled());
641 :
642 0 : aWrapOutsideCB.Enable(!bEnable);
643 :
644 0 : bEnable = !aWrapOutlineCB.IsChecked();
645 0 : if (bEnable == bContourImage) // so that it doesn't always flicker
646 : {
647 0 : bContourImage = !bEnable;
648 0 : ApplyImageList();
649 : }
650 :
651 0 : return 0;
652 : }
653 :
654 0 : sal_uInt16* SwWrapTabPage::GetRanges()
655 : {
656 0 : return aWrapPageRg;
657 : }
658 :
659 0 : void SwWrapTabPage::DataChanged( const DataChangedEvent& rDCEvt )
660 : {
661 0 : if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
662 0 : (rDCEvt.GetFlags() & SETTINGS_STYLE) )
663 0 : ApplyImageList();
664 :
665 0 : SfxTabPage::DataChanged( rDCEvt );
666 0 : }
667 :
668 0 : void SwWrapTabPage::ApplyImageList()
669 : {
670 0 : ImageList& rImgLst = aWrapIL;
671 :
672 0 : aWrapThroughRB.SetModeRadioImage(rImgLst.GetImage(IMG_THROUGH));
673 0 : sal_Bool bWrapOutline = !aWrapOutlineCB.IsChecked();
674 0 : if(bWrapOutline)
675 : {
676 0 : aNoWrapRB.SetModeRadioImage( rImgLst.GetImage( IMG_NONE ));
677 0 : aWrapLeftRB.SetModeRadioImage( rImgLst.GetImage( IMG_LEFT ));
678 0 : aWrapRightRB.SetModeRadioImage( rImgLst.GetImage( IMG_RIGHT ));
679 0 : aWrapParallelRB.SetModeRadioImage( rImgLst.GetImage( IMG_PARALLEL ));
680 0 : aIdealWrapRB.SetModeRadioImage( rImgLst.GetImage( IMG_IDEAL ));
681 : }
682 : else
683 : {
684 0 : aNoWrapRB.SetModeRadioImage( rImgLst.GetImage( IMG_KON_NONE ));
685 0 : aWrapLeftRB.SetModeRadioImage( rImgLst.GetImage( IMG_KON_LEFT ));
686 0 : aWrapRightRB.SetModeRadioImage( rImgLst.GetImage( IMG_KON_RIGHT ));
687 0 : aWrapParallelRB.SetModeRadioImage( rImgLst.GetImage( IMG_KON_PARALLEL ));
688 0 : aIdealWrapRB.SetModeRadioImage( rImgLst.GetImage( IMG_KON_IDEAL ));
689 : }
690 0 : }
691 :
692 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|