LCOV - code coverage report
Current view: top level - sw/source/ui/frmdlg - wrap.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 0 369 0.0 %
Date: 2014-11-03 Functions: 0 20 0.0 %
Legend: Lines: hit not hit

          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: */

Generated by: LCOV version 1.10