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