LCOV - code coverage report
Current view: top level - sw/source/uibase/uiview - viewtab.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 294 1122 26.2 %
Date: 2015-06-13 12:38:46 Functions: 5 10 50.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 "uitool.hxx"
      22             : #include <sfx2/app.hxx>
      23             : #include <svx/rulritem.hxx>
      24             : #include <editeng/tstpitem.hxx>
      25             : #include <sfx2/request.hxx>
      26             : #include <editeng/lrspitem.hxx>
      27             : #include <editeng/ulspitem.hxx>
      28             : #include <editeng/boxitem.hxx>
      29             : #include <editeng/frmdiritem.hxx>
      30             : #include <svl/eitem.hxx>
      31             : #include <svl/whiter.hxx>
      32             : #include <svx/ruler.hxx>
      33             : #include <editeng/protitem.hxx>
      34             : #include <svl/rectitem.hxx>
      35             : #include <sfx2/bindings.hxx>
      36             : #include <fmtfsize.hxx>
      37             : #include <fmthdft.hxx>
      38             : #include <fmtclds.hxx>
      39             : #include <fmtornt.hxx>
      40             : #include <frmatr.hxx>
      41             : #include <edtwin.hxx>
      42             : #include "view.hxx"
      43             : #include "wrtsh.hxx"
      44             : #include "basesh.hxx"
      45             : #include "cmdid.h"
      46             : #include "viewopt.hxx"
      47             : #include "tabcol.hxx"
      48             : #include "frmfmt.hxx"
      49             : #include "pagedesc.hxx"
      50             : #include "wview.hxx"
      51             : #include "fmtcol.hxx"
      52             : #include "section.hxx"
      53             : 
      54             : #include "ndtxt.hxx"
      55             : #include "pam.hxx"
      56             : 
      57             : #include <IDocumentSettingAccess.hxx>
      58             : 
      59             : using namespace ::com::sun::star;
      60             : 
      61             : // Pack columns
      62           0 : static void lcl_FillSvxColumn(const SwFormatCol& rCol,
      63             :                           long nTotalWidth,
      64             :                           SvxColumnItem& rColItem,
      65             :                           long nDistance)
      66             : {
      67           0 :     const SwColumns& rCols = rCol.GetColumns();
      68             : 
      69           0 :     bool bOrtho = rCol.IsOrtho() && rCols.size();
      70           0 :     long nInnerWidth = 0;
      71           0 :     if( bOrtho )
      72             :     {
      73           0 :         nInnerWidth = nTotalWidth;
      74           0 :         for ( size_t i = 0; i < rCols.size(); ++i )
      75             :         {
      76           0 :             const SwColumn* pCol = &rCols[i];
      77           0 :             nInnerWidth -= pCol->GetLeft() + pCol->GetRight();
      78             :         }
      79           0 :         if( nInnerWidth < 0 )
      80           0 :             nInnerWidth = 0;
      81             :         else
      82           0 :             nInnerWidth /= rCols.size();
      83             :     }
      84             : 
      85           0 :     long nWidth = 0;
      86           0 :     for ( size_t i = 0; i < rCols.size(); ++i )
      87             :     {
      88           0 :         const SwColumn* pCol = &rCols[i];
      89           0 :         const long nStart = pCol->GetLeft() + nWidth + nDistance;
      90           0 :         if( bOrtho )
      91           0 :             nWidth += nInnerWidth + pCol->GetLeft() + pCol->GetRight();
      92             :         else
      93           0 :             nWidth += rCol.CalcColWidth(i, static_cast< sal_uInt16 >(nTotalWidth));
      94           0 :         const long nEnd = nWidth - pCol->GetRight() + nDistance;
      95             : 
      96           0 :         SvxColumnDescription aColDesc(nStart, nEnd, true);
      97           0 :         rColItem.Append(aColDesc);
      98             :     }
      99           0 : }
     100             : 
     101             : // Transfer ColumnItem in ColumnInfo
     102           0 : static void lcl_ConvertToCols(const SvxColumnItem& rColItem,
     103             :                           long nTotalWidth,
     104             :                           SwFormatCol& rCols)
     105             : {
     106             :     OSL_ENSURE( rCols.GetNumCols() == rColItem.Count(), "Column count mismatch" );
     107             :     // ruler executes that change the columns shortly after the selection has changed
     108             :     // can result in a crash
     109           0 :     if(rCols.GetNumCols() != rColItem.Count())
     110           0 :         return;
     111             : 
     112           0 :     sal_uInt16 nLeft    = 0;
     113           0 :     SwTwips nSumAll= 0;  // Sum up all columns and margins
     114             : 
     115           0 :     SwColumns& rArr = rCols.GetColumns();
     116             : 
     117             :     // Tabcols sequentially
     118           0 :     for( sal_uInt16 i=0; i < rColItem.Count()-1; ++i )
     119             :     {
     120             :         OSL_ENSURE(rColItem[i+1].nStart >= rColItem[i].nEnd,"overlapping columns" );
     121           0 :         const long nStart = std::max(rColItem[i+1].nStart, rColItem[i].nEnd);
     122           0 :         const sal_uInt16 nRight = static_cast<sal_uInt16>((nStart - rColItem[i].nEnd) / 2);
     123             : 
     124           0 :         const long nWidth = rColItem[i].nEnd - rColItem[i].nStart + nLeft + nRight;
     125             : 
     126           0 :         SwColumn* pCol = &rArr[i];
     127           0 :         pCol->SetWishWidth( sal_uInt16(long(rCols.GetWishWidth()) * nWidth / nTotalWidth ));
     128           0 :         pCol->SetLeft( nLeft );
     129           0 :         pCol->SetRight( nRight );
     130           0 :         nSumAll += pCol->GetWishWidth();
     131             : 
     132           0 :         nLeft = nRight;
     133             :     }
     134           0 :     rArr[rColItem.Count()-1].SetLeft( nLeft );
     135             : 
     136             :     // The difference between the total sum of the desired width and the so far
     137             :     // calculated columns and margins should result in the width of the last column.
     138           0 :     rArr[rColItem.Count()-1].SetWishWidth( rCols.GetWishWidth() - (sal_uInt16)nSumAll );
     139             : 
     140           0 :     rCols.SetOrtho(false, 0, 0 );
     141             : }
     142             : 
     143             : // Delete tabs
     144         542 : static void lcl_EraseDefTabs(SvxTabStopItem& rTabStops)
     145             : {
     146             :     // Delete DefTabs
     147        1626 :     for ( sal_uInt16 i = 0; i < rTabStops.Count(); )
     148             :     {
     149             :         // Here also throw out the DefTab to zero
     150         542 :         if ( SVX_TAB_ADJUST_DEFAULT == rTabStops[i].GetAdjustment() ||
     151           0 :             rTabStops[i].GetTabPos() == 0 )
     152             :         {
     153         542 :             rTabStops.Remove(i);
     154         542 :             continue;
     155             :         }
     156           0 :         ++i;
     157             :     }
     158         542 : }
     159             : 
     160             : // Flip page margin
     161        2609 : void SwView::SwapPageMargin(const SwPageDesc& rDesc, SvxLRSpaceItem& rLRSpace)
     162             : {
     163             :     sal_uInt16 nPhyPage, nVirPage;
     164        2609 :     GetWrtShell().GetPageNum( nPhyPage, nVirPage );
     165             : 
     166        2609 :     if ( rDesc.GetUseOn() == nsUseOnPage::PD_MIRROR && (nPhyPage % 2) == 0 )
     167             :     {
     168           0 :         long nTmp = rLRSpace.GetRight();
     169           0 :         rLRSpace.SetRight( rLRSpace.GetLeft() );
     170           0 :         rLRSpace.SetLeft( nTmp );
     171             :     }
     172        2609 : }
     173             : 
     174             : // If the frame border is moved, the column separator
     175             : // should stay in the same absolute position.
     176           0 : static void lcl_Scale(long& nVal, long nScale)
     177             : {
     178           0 :     nVal *= nScale;
     179           0 :     nVal >>= 8;
     180           0 : }
     181             : 
     182           0 : void ResizeFrameCols(SwFormatCol& rCol,
     183             :                     long nOldWidth,
     184             :                     long nNewWidth,
     185             :                     long nLeftDelta )
     186             : {
     187           0 :     SwColumns& rArr = rCol.GetColumns();
     188           0 :     long nWishSum = (long)rCol.GetWishWidth();
     189           0 :     long nWishDiff = (nWishSum * 100/nOldWidth * nNewWidth) / 100 - nWishSum;
     190           0 :     long nNewWishWidth = nWishSum + nWishDiff;
     191           0 :     if(nNewWishWidth > 0xffffl)
     192             :     {
     193             :         // If the desired width is getting too large, then all values
     194             :         // must be scaled appropriately.
     195           0 :         long nScale = (0xffffl << 8)/ nNewWishWidth;
     196           0 :         for(size_t i = 0; i < rArr.size(); ++i)
     197             :         {
     198           0 :             SwColumn* pCol = &rArr[i];
     199           0 :             long nVal = pCol->GetWishWidth();
     200           0 :             lcl_Scale(nVal, nScale);
     201           0 :             pCol->SetWishWidth((sal_uInt16) nVal);
     202           0 :             nVal = pCol->GetLeft();
     203           0 :             lcl_Scale(nVal, nScale);
     204           0 :             pCol->SetLeft((sal_uInt16) nVal);
     205           0 :             nVal = pCol->GetRight();
     206           0 :             lcl_Scale(nVal, nScale);
     207           0 :             pCol->SetRight((sal_uInt16) nVal);
     208             :         }
     209           0 :         lcl_Scale(nNewWishWidth, nScale);
     210           0 :         lcl_Scale(nWishDiff, nScale);
     211             :     }
     212           0 :     rCol.SetWishWidth( (sal_uInt16) (nNewWishWidth) );
     213             : 
     214           0 :     if( nLeftDelta >= 2 || nLeftDelta <= -2)
     215           0 :         rArr.front().SetWishWidth(rArr.front().GetWishWidth() + (sal_uInt16)nWishDiff);
     216             :     else
     217           0 :         rArr.back().SetWishWidth(rArr.back().GetWishWidth() + (sal_uInt16)nWishDiff);
     218             :     // Reset auto width
     219           0 :     rCol.SetOrtho(false, 0, 0 );
     220           0 : }
     221             : 
     222             : // Here all changes to the tab bar will be shot again into the model.
     223           0 : void SwView::ExecTabWin( SfxRequest& rReq )
     224             : {
     225           0 :     SwWrtShell &rSh         = GetWrtShell();
     226           0 :     const FrmTypeFlags nFrmType   = rSh.IsObjSelected() ?
     227             :                                     FrmTypeFlags::DRAWOBJ :
     228           0 :                                         rSh.GetFrmType(0,true);
     229           0 :     const bool bFrmSelection = rSh.IsFrmSelected();
     230           0 :     const bool bBrowse = rSh.GetViewOptions()->getBrowseMode();
     231             : 
     232           0 :     const sal_uInt16 nSlot      = rReq.GetSlot();
     233           0 :     const SfxItemSet* pReqArgs = rReq.GetArgs();
     234           0 :     const size_t nDescId    = rSh.GetCurPageDesc();
     235           0 :     const SwPageDesc& rDesc = rSh.GetPageDesc( nDescId );
     236             : 
     237           0 :     const bool bVerticalWriting = rSh.IsInVerticalText();
     238           0 :     const SwFormatHeader& rHeaderFormat = rDesc.GetMaster().GetHeader();
     239           0 :     SwFrameFormat *pHeaderFormat = const_cast<SwFrameFormat*>(rHeaderFormat.GetHeaderFormat());
     240             : 
     241           0 :     const SwFormatFooter& rFooterFormat = rDesc.GetMaster().GetFooter();
     242           0 :     SwFrameFormat *pFooterFormat = const_cast<SwFrameFormat*>(rFooterFormat.GetFooterFormat());
     243             : 
     244           0 :     const SwFormatFrmSize &rFrmSize = rDesc.GetMaster().GetFrmSize();
     245             : 
     246           0 :     const SwRect& rPageRect = rSh.GetAnyCurRect(RECT_PAGE);
     247           0 :     const long nPageWidth  = bBrowse ? rPageRect.Width() : rFrmSize.GetWidth();
     248           0 :     const long nPageHeight = bBrowse ? rPageRect.Height() : rFrmSize.GetHeight();
     249             : 
     250           0 :     bool bUnlockView = false;
     251           0 :     rSh.StartAllAction();
     252           0 :     bool bSect = bool(nFrmType & FrmTypeFlags::COLSECT);
     253             : 
     254           0 :     switch  (nSlot)
     255             :     {
     256             :     case SID_ATTR_LONG_LRSPACE:
     257           0 :         if ( pReqArgs )
     258             :         {
     259             :             SvxLongLRSpaceItem aLongLR( static_cast<const SvxLongLRSpaceItem&>(pReqArgs->
     260           0 :                                                         Get( SID_ATTR_LONG_LRSPACE )) );
     261           0 :             SvxLRSpaceItem aLR(RES_LR_SPACE);
     262           0 :             if ( !bSect && (bFrmSelection || nFrmType & FrmTypeFlags::FLY_ANY) )
     263             :             {
     264           0 :                 SwFrameFormat* pFormat = static_cast<SwFrameFormat*>(rSh.GetFlyFrameFormat());
     265           0 :                 const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED);
     266             : 
     267           0 :                 bool bVerticalFrame(false);
     268             :                 {
     269             :                     bool bRTL;
     270             :                     bool bVertL2R;
     271           0 :                     bVerticalFrame = ( bFrmSelection &&
     272           0 :                                        rSh.IsFrmVertical(true, bRTL, bVertL2R) ) ||
     273           0 :                                      ( !bFrmSelection && bVerticalWriting);
     274             :                 }
     275             :                 long nDeltaX = bVerticalFrame ?
     276           0 :                     rRect.Right() - rPageRect.Right() + aLongLR.GetRight() :
     277           0 :                     rPageRect.Left() + aLongLR.GetLeft() - rRect.Left();
     278             : 
     279           0 :                 SfxItemSet aSet( GetPool(), RES_FRM_SIZE, RES_FRM_SIZE,
     280             :                                             RES_VERT_ORIENT, RES_HORI_ORIENT,
     281           0 :                                             RES_COL, RES_COL, 0 );
     282             : 
     283           0 :                 if(bVerticalFrame)
     284             :                 {
     285           0 :                     SwFormatVertOrient aVertOrient(pFormat->GetVertOrient());
     286           0 :                     aVertOrient.SetVertOrient(text::VertOrientation::NONE);
     287           0 :                     aVertOrient.SetPos(aVertOrient.GetPos() + nDeltaX );
     288           0 :                     aSet.Put( aVertOrient );
     289             :                 }
     290             :                 else
     291             :                 {
     292           0 :                     SwFormatHoriOrient aHoriOrient( pFormat->GetHoriOrient() );
     293           0 :                     aHoriOrient.SetHoriOrient( text::HoriOrientation::NONE );
     294           0 :                     aHoriOrient.SetPos( aHoriOrient.GetPos() + nDeltaX );
     295           0 :                     aSet.Put( aHoriOrient );
     296             :                 }
     297             : 
     298           0 :                 SwFormatFrmSize aSize( pFormat->GetFrmSize() );
     299           0 :                 long nOldWidth = (long) aSize.GetWidth();
     300             : 
     301           0 :                 if(aSize.GetWidthPercent())
     302             :                 {
     303           0 :                     SwRect aRect;
     304           0 :                     rSh.CalcBoundRect(aRect, FLY_AS_CHAR);
     305           0 :                     long nPrtWidth = aRect.Width();
     306           0 :                     aSize.SetWidthPercent(sal_uInt8((nPageWidth - aLongLR.GetLeft() - aLongLR.GetRight()) * 100 /nPrtWidth));
     307             :                 }
     308             :                 else
     309             :                     aSize.SetWidth( nPageWidth -
     310           0 :                             (aLongLR.GetLeft() + aLongLR.GetRight()));
     311             : 
     312           0 :                 if( nFrmType & FrmTypeFlags::COLUMN )
     313             :                 {
     314           0 :                     SwFormatCol aCol(pFormat->GetCol());
     315             : 
     316           0 :                     ::ResizeFrameCols(aCol, nOldWidth, (long)aSize.GetWidth(), nDeltaX );
     317           0 :                     aSet.Put(aCol);
     318             :                 }
     319             : 
     320           0 :                 aSet.Put( aSize );
     321             : 
     322           0 :                 rSh.StartAction();
     323           0 :                 rSh.Push();
     324           0 :                 rSh.SetFlyFrmAttr( aSet );
     325             :                 // Cancel the frame selection
     326           0 :                 if(!bFrmSelection && rSh.IsFrmSelected())
     327             :                 {
     328           0 :                     rSh.UnSelectFrm();
     329           0 :                     rSh.LeaveSelFrmMode();
     330             :                 }
     331           0 :                 rSh.Pop();
     332           0 :                 rSh.EndAction();
     333             :             }
     334           0 :             else if ( nFrmType & ( FrmTypeFlags::HEADER | FrmTypeFlags::FOOTER ))
     335             :             {
     336             :                 // Subtract out page margins
     337           0 :                 long nOld = rDesc.GetMaster().GetLRSpace().GetLeft();
     338           0 :                 aLongLR.SetLeft( nOld > aLongLR.GetLeft() ? 0 : aLongLR.GetLeft() - nOld );
     339             : 
     340           0 :                 nOld = rDesc.GetMaster().GetLRSpace().GetRight();
     341           0 :                 aLongLR.SetRight( nOld > aLongLR.GetRight() ? 0 : aLongLR.GetRight() - nOld );
     342           0 :                 aLR.SetLeft(aLongLR.GetLeft());
     343           0 :                 aLR.SetRight(aLongLR.GetRight());
     344             : 
     345           0 :                 if ( nFrmType & FrmTypeFlags::HEADER && pHeaderFormat )
     346           0 :                     pHeaderFormat->SetFormatAttr( aLR );
     347           0 :                 else if( nFrmType & FrmTypeFlags::FOOTER && pFooterFormat )
     348           0 :                     pFooterFormat->SetFormatAttr( aLR );
     349             :             }
     350           0 :             else if( nFrmType == FrmTypeFlags::DRAWOBJ)
     351             :             {
     352           0 :                 SwRect aRect( rSh.GetObjRect() );
     353           0 :                 aRect.Left( aLongLR.GetLeft() + rPageRect.Left() );
     354           0 :                 aRect.Right( rPageRect.Right() - aLongLR.GetRight());
     355           0 :                 rSh.SetObjRect( aRect );
     356             :             }
     357           0 :             else if(bSect || rSh.IsDirectlyInSection())
     358             :             {
     359             :                 //change the section indents and the columns if available
     360             :                 //at first determine the changes
     361           0 :                 SwRect aSectRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, 0);
     362           0 :                 const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, 0);
     363           0 :                 aSectRect.Pos() += aTmpRect.Pos();
     364           0 :                 long nLeftDiff = aLongLR.GetLeft() - (long)(aSectRect.Left() - rPageRect.Left() );
     365           0 :                 long nRightDiff = aLongLR.GetRight() - (long)( rPageRect.Right() - aSectRect.Right());
     366             :                 //change the LRSpaceItem of the section accordingly
     367           0 :                 const SwSection* pCurrSect = rSh.GetCurrSection();
     368           0 :                 const SwSectionFormat* pSectFormat = pCurrSect->GetFormat();
     369           0 :                 SvxLRSpaceItem aLRTmp = pSectFormat->GetLRSpace();
     370           0 :                 aLRTmp.SetLeft(aLRTmp.GetLeft() + nLeftDiff);
     371           0 :                 aLRTmp.SetRight(aLRTmp.GetRight() + nRightDiff);
     372           0 :                 SfxItemSet aSet(rSh.GetAttrPool(), RES_LR_SPACE, RES_LR_SPACE, RES_COL, RES_COL, 0L);
     373           0 :                 aSet.Put(aLRTmp);
     374             :                 //change the first/last column
     375           0 :                 if(bSect)
     376             :                 {
     377           0 :                     SwFormatCol aCols( pSectFormat->GetCol() );
     378           0 :                     long nDiffWidth = nLeftDiff + nRightDiff;
     379           0 :                     ::ResizeFrameCols(aCols, aSectRect.Width(), aSectRect.Width() - nDiffWidth, nLeftDiff );
     380           0 :                     aSet.Put( aCols );
     381             :                 }
     382           0 :                 SwSectionData aData(*pCurrSect);
     383           0 :                 rSh.UpdateSection(rSh.GetSectionFormatPos(*pSectFormat), aData, &aSet);
     384             :             }
     385             :             else
     386             :             {   // Adjust page margins
     387           0 :                 aLR.SetLeft(aLongLR.GetLeft());
     388           0 :                 aLR.SetRight(aLongLR.GetRight());
     389           0 :                 SwapPageMargin( rDesc, aLR );
     390           0 :                 SwPageDesc aDesc( rDesc );
     391           0 :                 aDesc.GetMaster().SetFormatAttr( aLR );
     392           0 :                 rSh.ChgPageDesc( nDescId, aDesc );
     393           0 :             }
     394             :         }
     395           0 :         break;
     396             : 
     397             :     // apply new left and right margins to current page style
     398             :     case SID_ATTR_PAGE_LRSPACE:
     399           0 :         if ( pReqArgs )
     400             :         {
     401           0 :             const SvxLongLRSpaceItem aLongLR( static_cast<const SvxLongLRSpaceItem&>(pReqArgs->Get( SID_ATTR_PAGE_LRSPACE )) );
     402             : 
     403           0 :             SwPageDesc aDesc( rDesc );
     404             :             {
     405           0 :                 SvxLRSpaceItem aLR( RES_LR_SPACE );
     406           0 :                 aLR.SetLeft(aLongLR.GetLeft());
     407           0 :                 aLR.SetRight(aLongLR.GetRight());
     408           0 :                 SwapPageMargin( rDesc, aLR );
     409           0 :                 aDesc.GetMaster().SetFormatAttr( aLR );
     410             :             }
     411           0 :             rSh.ChgPageDesc( nDescId, aDesc );
     412             :         }
     413           0 :         break;
     414             : 
     415             :     case SID_ATTR_LONG_ULSPACE:
     416           0 :         if ( pReqArgs )
     417             :         {
     418             :             SvxLongULSpaceItem aLongULSpace( static_cast<const SvxLongULSpaceItem&>(pReqArgs->
     419           0 :                                                             Get( SID_ATTR_LONG_ULSPACE )));
     420             : 
     421           0 :             if( bFrmSelection || nFrmType & FrmTypeFlags::FLY_ANY )
     422             :             {
     423           0 :                 SwFrameFormat* pFormat = static_cast<SwFrameFormat*>(rSh.GetFlyFrameFormat());
     424           0 :                 const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED);
     425           0 :                 const long nDeltaY = rPageRect.Top() + aLongULSpace.GetUpper() - rRect.Top();
     426           0 :                 const long nHeight = nPageHeight - (aLongULSpace.GetUpper() + aLongULSpace.GetLower());
     427             : 
     428           0 :                 SfxItemSet aSet( GetPool(), RES_FRM_SIZE, RES_FRM_SIZE,
     429           0 :                                             RES_VERT_ORIENT, RES_HORI_ORIENT, 0 );
     430             :                 //which of the orientation attributes is to be put depends on the frame's environment
     431             :                 bool bRTL;
     432             :                 bool bVertL2R;
     433           0 :                 if ( ( bFrmSelection &&
     434           0 :                        rSh.IsFrmVertical(true, bRTL, bVertL2R ) ) ||
     435           0 :                      ( !bFrmSelection && bVerticalWriting ) )
     436             :                 {
     437           0 :                     SwFormatHoriOrient aHoriOrient(pFormat->GetHoriOrient());
     438           0 :                     aHoriOrient.SetHoriOrient(text::HoriOrientation::NONE);
     439           0 :                     aHoriOrient.SetPos(aHoriOrient.GetPos() + nDeltaY );
     440           0 :                     aSet.Put( aHoriOrient );
     441             :                 }
     442             :                 else
     443             :                 {
     444           0 :                     SwFormatVertOrient aVertOrient(pFormat->GetVertOrient());
     445           0 :                     aVertOrient.SetVertOrient(text::VertOrientation::NONE);
     446           0 :                     aVertOrient.SetPos(aVertOrient.GetPos() + nDeltaY );
     447           0 :                     aSet.Put( aVertOrient );
     448             :                 }
     449           0 :                 SwFormatFrmSize aSize(pFormat->GetFrmSize());
     450           0 :                 if(aSize.GetHeightPercent())
     451             :                 {
     452           0 :                     SwRect aRect;
     453           0 :                     rSh.CalcBoundRect(aRect, FLY_AS_CHAR);
     454           0 :                     long nPrtHeight = aRect.Height();
     455           0 :                     aSize.SetHeightPercent(sal_uInt8(nHeight * 100 /nPrtHeight));
     456             :                 }
     457             :                 else
     458           0 :                     aSize.SetHeight(nHeight );
     459             : 
     460           0 :                 aSet.Put( aSize );
     461           0 :                 rSh.SetFlyFrmAttr( aSet );
     462             :             }
     463           0 :             else if( nFrmType == FrmTypeFlags::DRAWOBJ )
     464             :             {
     465           0 :                 SwRect aRect( rSh.GetObjRect() );
     466           0 :                 aRect.Top( aLongULSpace.GetUpper() + rPageRect.Top() );
     467           0 :                 aRect.Bottom( rPageRect.Bottom() - aLongULSpace.GetLower() );
     468           0 :                 rSh.SetObjRect( aRect ) ;
     469             :             }
     470           0 :             else if(bVerticalWriting && (bSect || rSh.IsDirectlyInSection()))
     471             :             {
     472             :                 //change the section indents and the columns if available
     473             :                 //at first determine the changes
     474           0 :                 SwRect aSectRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, 0);
     475           0 :                 const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, 0);
     476           0 :                 aSectRect.Pos() += aTmpRect.Pos();
     477           0 :                 const long nLeftDiff = aLongULSpace.GetUpper() - (long)(aSectRect.Top() - rPageRect.Top());
     478           0 :                 const long nRightDiff = aLongULSpace.GetLower() - (long)(nPageHeight - aSectRect.Bottom() + rPageRect.Top());
     479             :                 //change the LRSpaceItem of the section accordingly
     480           0 :                 const SwSection* pCurrSect = rSh.GetCurrSection();
     481           0 :                 const SwSectionFormat* pSectFormat = pCurrSect->GetFormat();
     482           0 :                 SvxLRSpaceItem aLR = pSectFormat->GetLRSpace();
     483           0 :                 aLR.SetLeft(aLR.GetLeft() + nLeftDiff);
     484           0 :                 aLR.SetRight(aLR.GetRight() + nRightDiff);
     485           0 :                 SfxItemSet aSet(rSh.GetAttrPool(), RES_LR_SPACE, RES_LR_SPACE, RES_COL, RES_COL, 0L);
     486           0 :                 aSet.Put(aLR);
     487             :                 //change the first/last column
     488           0 :                 if(bSect)
     489             :                 {
     490           0 :                     SwFormatCol aCols( pSectFormat->GetCol() );
     491           0 :                     long nDiffWidth = nLeftDiff + nRightDiff;
     492           0 :                     ::ResizeFrameCols(aCols, aSectRect.Height(), aSectRect.Height() - nDiffWidth, nLeftDiff );
     493           0 :                     aSet.Put( aCols );
     494             :                 }
     495           0 :                 SwSectionData aData(*pCurrSect);
     496           0 :                 rSh.UpdateSection(rSh.GetSectionFormatPos(*pSectFormat), aData, &aSet);
     497             :             }
     498             :             else
     499           0 :             {   SwPageDesc aDesc( rDesc );
     500             : 
     501           0 :                 if ( nFrmType & ( FrmTypeFlags::HEADER | FrmTypeFlags::FOOTER ))
     502             :                 {
     503             : 
     504           0 :                     const bool bHead = bool(nFrmType & FrmTypeFlags::HEADER);
     505           0 :                     SvxULSpaceItem aUL( rDesc.GetMaster().GetULSpace() );
     506           0 :                     if ( bHead )
     507           0 :                         aUL.SetUpper( (sal_uInt16)aLongULSpace.GetUpper() );
     508             :                     else
     509           0 :                         aUL.SetLower( (sal_uInt16)aLongULSpace.GetLower() );
     510           0 :                     aDesc.GetMaster().SetFormatAttr( aUL );
     511             : 
     512           0 :                     if( (bHead && pHeaderFormat) || (!bHead && pFooterFormat) )
     513             :                     {
     514           0 :                         SwFormatFrmSize aSz( bHead ? pHeaderFormat->GetFrmSize() :
     515           0 :                                                   pFooterFormat->GetFrmSize() );
     516           0 :                         aSz.SetHeightSizeType( ATT_FIX_SIZE );
     517           0 :                         aSz.SetHeight(nPageHeight - aLongULSpace.GetLower() -
     518           0 :                                                     aLongULSpace.GetUpper() );
     519           0 :                         if ( bHead )
     520           0 :                             pHeaderFormat->SetFormatAttr( aSz );
     521             :                         else
     522           0 :                             pFooterFormat->SetFormatAttr( aSz );
     523           0 :                     }
     524             :                 }
     525             :                 else
     526             :                 {
     527           0 :                     SvxULSpaceItem aUL(RES_UL_SPACE);
     528           0 :                     aUL.SetUpper((sal_uInt16)aLongULSpace.GetUpper());
     529           0 :                     aUL.SetLower((sal_uInt16)aLongULSpace.GetLower());
     530           0 :                     aDesc.GetMaster().SetFormatAttr(aUL);
     531             :                 }
     532             : 
     533           0 :                 rSh.ChgPageDesc( nDescId, aDesc );
     534           0 :             }
     535             :         }
     536           0 :         break;
     537             : 
     538             :     // apply new top and bottom margins to current page style
     539             :     case SID_ATTR_PAGE_ULSPACE:
     540           0 :         if ( pReqArgs )
     541             :         {
     542             :             SvxLongULSpaceItem aLongULSpace(
     543           0 :                 static_cast<const SvxLongULSpaceItem&>(pReqArgs->Get( SID_ATTR_PAGE_ULSPACE ) ) );
     544             : 
     545           0 :             SwPageDesc aDesc( rDesc );
     546             :             {
     547           0 :                 SvxULSpaceItem aUL(RES_UL_SPACE);
     548           0 :                 aUL.SetUpper((sal_uInt16)aLongULSpace.GetUpper());
     549           0 :                 aUL.SetLower((sal_uInt16)aLongULSpace.GetLower());
     550           0 :                 aDesc.GetMaster().SetFormatAttr(aUL);
     551             :             }
     552           0 :             rSh.ChgPageDesc( nDescId, aDesc );
     553             :         }
     554           0 :         break;
     555             : 
     556             :     case SID_ATTR_PAGE_COLUMN:
     557           0 :         if ( pReqArgs )
     558             :         {
     559           0 :             const SfxInt16Item aColumnItem( static_cast<const SfxInt16Item&>(pReqArgs->Get(nSlot)) );
     560           0 :             const sal_uInt16 nPageColumnType = aColumnItem.GetValue();
     561             : 
     562             :             // nPageColumnType =
     563             :             // 1 - single-columned page
     564             :             // 2 - two-columned page
     565             :             // 3 - three-columned page
     566             :             // 4 - two-columned page with left column width of 2/3 of page width
     567             :             // 5 - two-columned page with right column width of 2/3 of page width
     568             : 
     569           0 :             sal_uInt16 nCount = 2;
     570           0 :             if ( nPageColumnType == 1 )
     571             :             {
     572           0 :                 nCount = 0;
     573             :             }
     574           0 :             else if ( nPageColumnType == 3 )
     575             :             {
     576           0 :                 nCount = 3;
     577             :             }
     578             : 
     579           0 :             const sal_uInt16 nGutterWidth = 0;
     580             : 
     581           0 :             const SvxLRSpaceItem aLR( rDesc.GetMaster().GetLRSpace() );
     582           0 :             const long nLeft = aLR.GetLeft();
     583           0 :             const long nRight = aLR.GetRight();
     584           0 :             const long nWidth = nPageWidth - nLeft - nRight;
     585             : 
     586           0 :             SwFormatCol aCols( rDesc.GetMaster().GetCol() );
     587           0 :             aCols.Init( nCount, nGutterWidth, nWidth );
     588           0 :             aCols.SetWishWidth( nWidth );
     589           0 :             aCols.SetGutterWidth( nGutterWidth, nWidth );
     590           0 :             aCols.SetOrtho( false, nGutterWidth, nWidth );
     591             : 
     592           0 :             long nColumnLeft = 0;
     593           0 :             long nColumnRight = 0;
     594           0 :             if ( nPageColumnType == 4 )
     595             :             {
     596           0 :                 nColumnRight = (long)(nWidth/3);
     597           0 :                 nColumnLeft = nWidth - nColumnRight;
     598           0 :                 aCols.GetColumns()[0].SetWishWidth( nColumnLeft );
     599           0 :                 aCols.GetColumns()[1].SetWishWidth( nColumnRight );
     600             :             }
     601           0 :             else if ( nPageColumnType == 5 )
     602             :             {
     603           0 :                 nColumnLeft = (long)(nWidth/3);
     604           0 :                 nColumnRight = nWidth - nColumnLeft;
     605           0 :                 aCols.GetColumns()[0].SetWishWidth( nColumnLeft );
     606           0 :                 aCols.GetColumns()[1].SetWishWidth( nColumnRight );
     607             :             }
     608             : 
     609           0 :             SwPageDesc aDesc( rDesc );
     610           0 :             aDesc.GetMaster().SetFormatAttr( aCols );
     611           0 :             rSh.ChgPageDesc( rSh.GetCurPageDesc(), aDesc );
     612             :         }
     613           0 :         break;
     614             : 
     615             :     case SID_ATTR_TABSTOP_VERTICAL:
     616             :     case SID_ATTR_TABSTOP:
     617           0 :         if (pReqArgs)
     618             :         {
     619           0 :             const sal_uInt16 nWhich = GetPool().GetWhich(nSlot);
     620             :             SvxTabStopItem aTabStops( static_cast<const SvxTabStopItem&>(pReqArgs->
     621           0 :                                                         Get( nWhich )));
     622           0 :             aTabStops.SetWhich(RES_PARATR_TABSTOP);
     623             :              const SvxTabStopItem& rDefTabs =
     624           0 :                         static_cast<const SvxTabStopItem&>(rSh.GetDefault(RES_PARATR_TABSTOP));
     625             : 
     626             :             // Default tab at pos 0
     627           0 :             SfxItemSet aSet( GetPool(), RES_LR_SPACE, RES_LR_SPACE );
     628           0 :             rSh.GetCurAttr( aSet );
     629           0 :             const SvxLRSpaceItem& rLR = static_cast<const SvxLRSpaceItem&>(aSet.Get(RES_LR_SPACE));
     630             : 
     631           0 :             if ( rLR.GetTextFirstLineOfst() < 0 )
     632             :             {
     633           0 :                 SvxTabStop aSwTabStop( 0, SVX_TAB_ADJUST_DEFAULT );
     634           0 :                 aTabStops.Insert( aSwTabStop );
     635             :             }
     636             : 
     637             :             // Populate with default tabs.
     638           0 :             ::MakeDefTabs( ::GetTabDist( rDefTabs ), aTabStops );
     639             : 
     640           0 :             SwTextFormatColl* pColl = rSh.GetCurTextFormatColl();
     641           0 :             if( pColl && pColl->IsAutoUpdateFormat() )
     642             :             {
     643           0 :                 SfxItemSet aTmp(GetPool(), RES_PARATR_TABSTOP, RES_PARATR_TABSTOP);
     644           0 :                 aTmp.Put(aTabStops);
     645           0 :                 rSh.AutoUpdatePara( pColl, aTmp );
     646             :             }
     647             :             else
     648           0 :                 rSh.SetAttrItem( aTabStops );
     649             :         }
     650           0 :         break;
     651             : 
     652             :     case SID_ATTR_PARA_LRSPACE_VERTICAL:
     653             :     case SID_ATTR_PARA_LRSPACE:
     654           0 :         if ( pReqArgs )
     655             :         {
     656           0 :             SvxLRSpaceItem aParaMargin(static_cast<const SvxLRSpaceItem&>(pReqArgs->Get(nSlot)));
     657             : 
     658           0 :             aParaMargin.SetRight( aParaMargin.GetRight() - m_nRightBorderDistance );
     659           0 :             aParaMargin.SetTextLeft(aParaMargin.GetTextLeft() - m_nLeftBorderDistance );
     660             : 
     661           0 :             aParaMargin.SetWhich( RES_LR_SPACE );
     662           0 :             SwTextFormatColl* pColl = rSh.GetCurTextFormatColl();
     663             : 
     664             :             // #i23726#
     665           0 :             if (m_pNumRuleNodeFromDoc)
     666             :             {
     667             :                 // --> #i42922# Mouse move of numbering label
     668             :                 // has to consider the left indent of the paragraph
     669           0 :                 SfxItemSet aSet( GetPool(), RES_LR_SPACE, RES_LR_SPACE );
     670           0 :                 rSh.GetCurAttr( aSet );
     671             :                 const SvxLRSpaceItem& rLR =
     672           0 :                         static_cast<const SvxLRSpaceItem&>(aSet.Get(RES_LR_SPACE));
     673             : 
     674           0 :                 SwPosition aPos(*m_pNumRuleNodeFromDoc);
     675             :                 // #i90078#
     676           0 :                 rSh.SetIndent( static_cast< short >(aParaMargin.GetTextLeft() - rLR.GetTextLeft()), aPos);
     677             :                 // #i42921# invalidate state of indent in order to get a ruler update.
     678           0 :                 aParaMargin.SetWhich( nSlot );
     679           0 :                 GetViewFrame()->GetBindings().SetState( aParaMargin );
     680             :             }
     681           0 :             else if( pColl && pColl->IsAutoUpdateFormat() )
     682             :             {
     683           0 :                 SfxItemSet aSet(GetPool(), RES_LR_SPACE, RES_LR_SPACE);
     684           0 :                 aSet.Put(aParaMargin);
     685           0 :                 rSh.AutoUpdatePara( pColl, aSet);
     686             :             }
     687             :             else
     688           0 :                 rSh.SetAttrItem( aParaMargin );
     689             : 
     690           0 :             if ( aParaMargin.GetTextFirstLineOfst() < 0 )
     691             :             {
     692           0 :                 SfxItemSet aSet( GetPool(), RES_PARATR_TABSTOP, RES_PARATR_TABSTOP );
     693             : 
     694           0 :                 rSh.GetCurAttr( aSet );
     695           0 :                 const SvxTabStopItem&  rTabStops = static_cast<const SvxTabStopItem&>(aSet.Get(RES_PARATR_TABSTOP));
     696             : 
     697             :                 // Do we have a tab at position zero?
     698             :                 sal_uInt16 i;
     699             : 
     700           0 :                 for ( i = 0; i < rTabStops.Count(); ++i )
     701           0 :                     if ( rTabStops[i].GetTabPos() == 0 )
     702           0 :                         break;
     703             : 
     704           0 :                 if ( i >= rTabStops.Count() )
     705             :                 {
     706             :                     // No DefTab
     707           0 :                     SvxTabStopItem aTabStops( RES_PARATR_TABSTOP );
     708           0 :                     aTabStops = rTabStops;
     709             : 
     710           0 :                     ::lcl_EraseDefTabs(aTabStops);
     711             : 
     712           0 :                     SvxTabStop aSwTabStop( 0, SVX_TAB_ADJUST_DEFAULT );
     713           0 :                     aTabStops.Insert(aSwTabStop);
     714             : 
     715             :                     const SvxTabStopItem& rDefTabs =
     716           0 :                         static_cast<const SvxTabStopItem&>(rSh.GetDefault(RES_PARATR_TABSTOP));
     717           0 :                     ::MakeDefTabs( ::GetTabDist(rDefTabs), aTabStops );
     718             : 
     719           0 :                     if( pColl && pColl->IsAutoUpdateFormat())
     720             :                     {
     721           0 :                         SfxItemSet aSetTmp(GetPool(), RES_PARATR_TABSTOP, RES_PARATR_TABSTOP);
     722           0 :                         aSetTmp.Put(aTabStops);
     723           0 :                         rSh.AutoUpdatePara( pColl, aSetTmp );
     724             :                     }
     725             :                     else
     726           0 :                         rSh.SetAttrItem( aTabStops );
     727           0 :                 }
     728           0 :             }
     729             :         }
     730           0 :         break;
     731             : 
     732             :     case SID_ATTR_PARA_ULSPACE:
     733           0 :         if ( pReqArgs )
     734             :         {
     735           0 :             SvxULSpaceItem aParaMargin(static_cast<const SvxULSpaceItem&>(pReqArgs->Get(nSlot)));
     736             : 
     737           0 :             long nUDist = 0;
     738           0 :             long nLDist = 0;
     739           0 :             aParaMargin.SetUpper( aParaMargin.GetUpper() - nUDist );
     740           0 :             aParaMargin.SetLower(aParaMargin.GetLower() - nLDist);
     741             : 
     742           0 :             aParaMargin.SetWhich( RES_UL_SPACE );
     743           0 :             SwTextFormatColl* pColl = rSh.GetCurTextFormatColl();
     744           0 :             if( pColl && pColl->IsAutoUpdateFormat() )
     745             :             {
     746           0 :                 SfxItemSet aSet(GetPool(), RES_UL_SPACE, RES_UL_SPACE);
     747           0 :                 aSet.Put(aParaMargin);
     748           0 :                 rSh.AutoUpdatePara( pColl, aSet);
     749             :             }
     750             :             else
     751           0 :                 rSh.SetAttrItem( aParaMargin );
     752             :         }
     753           0 :         break;
     754             :     case SID_PARASPACE_INCREASE:
     755             :     case SID_PARASPACE_DECREASE:
     756             :         {
     757           0 :             SfxItemSet aULSpaceSet( GetPool(), RES_UL_SPACE, RES_UL_SPACE );
     758           0 :             rSh.GetCurAttr( aULSpaceSet );
     759             :             SvxULSpaceItem aULSpace(
     760           0 :                 static_cast< const SvxULSpaceItem& >( aULSpaceSet.Get( RES_UL_SPACE ) ) );
     761           0 :             sal_uInt16 nUpper = aULSpace.GetUpper();
     762           0 :             sal_uInt16 nLower = aULSpace.GetLower();
     763             : 
     764           0 :             if ( nSlot == SID_PARASPACE_INCREASE )
     765             :             {
     766           0 :                 nUpper = std::min< sal_uInt16 >( nUpper + 57, 5670 );
     767           0 :                 nLower = std::min< sal_uInt16 >( nLower + 57, 5670 );
     768             :             }
     769             :             else
     770             :             {
     771           0 :                 nUpper = std::max< sal_Int16 >( nUpper - 57, 0 );
     772           0 :                 nLower = std::max< sal_Int16 >( nLower - 57, 0 );
     773             :             }
     774             : 
     775           0 :             aULSpace.SetUpper( nUpper );
     776           0 :             aULSpace.SetLower( nLower );
     777             : 
     778           0 :             SwTextFormatColl* pColl = rSh.GetCurTextFormatColl();
     779           0 :             if( pColl && pColl->IsAutoUpdateFormat() )
     780             :             {
     781           0 :                 aULSpaceSet.Put( aULSpace );
     782           0 :                 rSh.AutoUpdatePara( pColl, aULSpaceSet );
     783             :             }
     784             :             else
     785           0 :                 rSh.SetAttrItem( aULSpace );
     786             :         }
     787           0 :         break;
     788             :     case SID_RULER_BORDERS_VERTICAL:
     789             :     case SID_RULER_BORDERS:
     790           0 :         if ( pReqArgs )
     791             :         {
     792           0 :             SvxColumnItem aColItem(static_cast<const SvxColumnItem&>(pReqArgs->Get(nSlot)));
     793             : 
     794           0 :             if( m_bSetTabColFromDoc || (!bSect && rSh.GetTableFormat()) )
     795             :             {
     796             :                 OSL_ENSURE(aColItem.Count(), "ColDesc is empty!!");
     797             : 
     798             :                 const bool bSingleLine = static_cast<const SfxBoolItem&>(rReq.
     799           0 :                                 GetArgs()->Get(SID_RULER_ACT_LINE_ONLY)).GetValue();
     800             : 
     801           0 :                 SwTabCols aTabCols;
     802           0 :                 if ( m_bSetTabColFromDoc )
     803           0 :                     rSh.GetMouseTabCols( aTabCols, m_aTabColFromDocPos );
     804             :                 else
     805           0 :                     rSh.GetTabCols(aTabCols);
     806             : 
     807             :                 // left table border
     808           0 :                 long nBorder = (long)(aColItem.GetLeft() - aTabCols.GetLeftMin());
     809           0 :                 aTabCols.SetLeft( nBorder );
     810             : 
     811           0 :                 nBorder = (bVerticalWriting ? nPageHeight : nPageWidth) - aTabCols.GetLeftMin() - aColItem.GetRight();
     812             : 
     813           0 :                 if ( aColItem.GetRight() > 0 )
     814           0 :                     aTabCols.SetRight( nBorder );
     815             : 
     816             :                 // Tabcols sequentially
     817             :                 // The last column is defined by the edge.
     818             :                 // Columns in right-to-left tables need to be mirrored
     819             :                 bool bIsTableRTL =
     820           0 :                     IsTabColFromDoc() ?
     821           0 :                           rSh.IsMouseTableRightToLeft(m_aTabColFromDocPos)
     822           0 :                         : rSh.IsTableRightToLeft();
     823           0 :                 const size_t nColCount = aColItem.Count() - 1;
     824           0 :                 if(bIsTableRTL)
     825             :                 {
     826           0 :                     for ( size_t i = 0; i < nColCount && i < aTabCols.Count(); ++i )
     827             :                     {
     828           0 :                         const SvxColumnDescription& rCol = aColItem[nColCount - i];
     829           0 :                         aTabCols[i] = aTabCols.GetRight() - rCol.nStart;
     830           0 :                         aTabCols.SetHidden( i, !rCol.bVisible );
     831             :                     }
     832             :                 }
     833             :                 else
     834             :                 {
     835           0 :                     for ( size_t i = 0; i < nColCount && i < aTabCols.Count(); ++i )
     836             :                     {
     837           0 :                         const SvxColumnDescription& rCol = aColItem[i];
     838           0 :                         aTabCols[i] = rCol.nEnd + aTabCols.GetLeft();
     839           0 :                         aTabCols.SetHidden( i, !rCol.bVisible );
     840             :                     }
     841             :                 }
     842             : 
     843           0 :                 if ( m_bSetTabColFromDoc )
     844             :                 {
     845           0 :                     if( !rSh.IsViewLocked() )
     846             :                     {
     847           0 :                         bUnlockView = true;
     848           0 :                         rSh.LockView( true );
     849             :                     }
     850             :                     rSh.SetMouseTabCols( aTabCols, bSingleLine,
     851           0 :                                                    m_aTabColFromDocPos );
     852             :                 }
     853             :                 else
     854           0 :                     rSh.SetTabCols(aTabCols, bSingleLine);
     855             : 
     856             :             }
     857             :             else
     858             :             {
     859           0 :                 if ( bFrmSelection || nFrmType & FrmTypeFlags::FLY_ANY || bSect)
     860             :                 {
     861           0 :                     SwSectionFormat *pSectFormat = 0;
     862           0 :                     SfxItemSet aSet( GetPool(), RES_COL, RES_COL );
     863           0 :                     if(bSect)
     864             :                     {
     865           0 :                         SwSection *pSect = rSh.GetAnySection();
     866             :                         OSL_ENSURE( pSect, "Which section?");
     867           0 :                         pSectFormat = pSect->GetFormat();
     868             :                     }
     869             :                     else
     870             :                     {
     871           0 :                         rSh.GetFlyFrmAttr( aSet );
     872             :                     }
     873             :                     SwFormatCol aCols(
     874             :                         bSect ?
     875           0 :                             pSectFormat->GetCol() :
     876           0 :                                 static_cast<const SwFormatCol&>(aSet.Get( RES_COL, false )));
     877           0 :                     SwRect aCurRect = rSh.GetAnyCurRect(bSect ? RECT_SECTION_PRT : RECT_FLY_PRT_EMBEDDED);
     878           0 :                     const long lWidth = bVerticalWriting ? aCurRect.Height() : aCurRect.Width();
     879           0 :                     ::lcl_ConvertToCols( aColItem, lWidth, aCols );
     880           0 :                     aSet.Put( aCols );
     881           0 :                     if(bSect)
     882           0 :                         rSh.SetSectionAttr( aSet, pSectFormat );
     883             :                     else
     884             :                     {
     885           0 :                         rSh.StartAction();
     886           0 :                         rSh.Push();
     887           0 :                         rSh.SetFlyFrmAttr( aSet );
     888             :                         // Cancel the frame selection again
     889           0 :                         if(!bFrmSelection && rSh.IsFrmSelected())
     890             :                         {
     891           0 :                             rSh.UnSelectFrm();
     892           0 :                             rSh.LeaveSelFrmMode();
     893             :                         }
     894           0 :                         rSh.Pop();
     895           0 :                         rSh.EndAction();
     896           0 :                     }
     897             :                 }
     898             :                 else
     899             :                 {
     900           0 :                     SwFormatCol aCols( rDesc.GetMaster().GetCol() );
     901           0 :                     const SwRect aPrtRect = rSh.GetAnyCurRect(RECT_PAGE_PRT);
     902             :                     ::lcl_ConvertToCols( aColItem,
     903             :                                     bVerticalWriting ? aPrtRect.Height() : aPrtRect.Width(),
     904           0 :                                     aCols );
     905           0 :                     SwPageDesc aDesc( rDesc );
     906           0 :                     aDesc.GetMaster().SetFormatAttr( aCols );
     907           0 :                     rSh.ChgPageDesc( rSh.GetCurPageDesc(), aDesc );
     908             :                 }
     909           0 :             }
     910             :         }
     911           0 :         break;
     912             : 
     913             :     case SID_RULER_ROWS :
     914             :     case SID_RULER_ROWS_VERTICAL:
     915           0 :         if (pReqArgs)
     916             :         {
     917           0 :             SvxColumnItem aColItem(static_cast<const SvxColumnItem&>(pReqArgs->Get(nSlot)));
     918             : 
     919           0 :             if( m_bSetTabColFromDoc || (!bSect && rSh.GetTableFormat()) )
     920             :             {
     921             :                 OSL_ENSURE(aColItem.Count(), "ColDesc is empty!!");
     922             : 
     923           0 :                 SwTabCols aTabCols;
     924           0 :                 if ( m_bSetTabRowFromDoc )
     925           0 :                     rSh.GetMouseTabRows( aTabCols, m_aTabColFromDocPos );
     926             :                 else
     927           0 :                     rSh.GetTabRows(aTabCols);
     928             : 
     929           0 :                 if ( bVerticalWriting )
     930             :                 {
     931           0 :                     aTabCols.SetRight(nPageWidth - aColItem.GetRight() - aColItem.GetLeft());
     932           0 :                     aTabCols.SetLeftMin(aColItem.GetLeft());
     933             :                 }
     934             :                 else
     935             :                 {
     936           0 :                     long nBorder = nPageHeight - aTabCols.GetLeftMin() - aColItem.GetRight();
     937           0 :                     aTabCols.SetRight( nBorder );
     938             :                 }
     939             : 
     940           0 :                 const size_t nColItems = aColItem.Count() - 1;
     941           0 :                 if(bVerticalWriting)
     942             :                 {
     943           0 :                     for ( size_t i = nColItems; i; --i )
     944             :                     {
     945           0 :                         const SvxColumnDescription& rCol = aColItem[i - 1];
     946           0 :                         long nColumnPos = aTabCols.GetRight() - rCol.nEnd ;
     947           0 :                         aTabCols[i - 1] = nColumnPos;
     948           0 :                         aTabCols.SetHidden( i - 1, !rCol.bVisible );
     949             :                     }
     950             :                 }
     951             :                 else
     952             :                 {
     953           0 :                     for ( size_t i = 0; i < nColItems; ++i )
     954             :                     {
     955           0 :                         const SvxColumnDescription& rCol = aColItem[i];
     956           0 :                         aTabCols[i] = rCol.nEnd + aTabCols.GetLeft();
     957           0 :                         aTabCols.SetHidden( i, !rCol.bVisible );
     958             :                     }
     959             :                 }
     960           0 :                 bool bSingleLine = false;
     961             :                 const SfxPoolItem* pSingleLine;
     962           0 :                 if( SfxItemState::SET == rReq.GetArgs()->GetItemState(SID_RULER_ACT_LINE_ONLY, false, &pSingleLine))
     963           0 :                     bSingleLine = static_cast<const SfxBoolItem*>(pSingleLine)->GetValue();
     964           0 :                 if ( m_bSetTabRowFromDoc )
     965             :                 {
     966           0 :                     if( !rSh.IsViewLocked() )
     967             :                     {
     968           0 :                         bUnlockView = true;
     969           0 :                         rSh.LockView( true );
     970             :                     }
     971           0 :                     rSh.SetMouseTabRows( aTabCols, bSingleLine, m_aTabColFromDocPos );
     972             :                 }
     973             :                 else
     974           0 :                     rSh.SetTabRows(aTabCols, bSingleLine);
     975           0 :             }
     976             :         }
     977           0 :         break;
     978             : 
     979             :     default:
     980             :         OSL_ENSURE( false, "wrong SlotId");
     981             :     }
     982           0 :     rSh.EndAllAction();
     983             : 
     984           0 :     if( bUnlockView )
     985           0 :         rSh.LockView( false );
     986             : 
     987           0 :     m_bSetTabColFromDoc = m_bSetTabRowFromDoc = m_bTabColFromDoc = m_bTabRowFromDoc = false;
     988           0 :     SetNumRuleNodeFromDoc(NULL);
     989           0 : }
     990             : 
     991             : // Here the status of the tab bar will be determined.
     992             : // This means that all relevant attributes at the CursorPos
     993             : // will be submittet to the tab bar.
     994        2609 : void SwView::StateTabWin(SfxItemSet& rSet)
     995             : {
     996        2609 :     SwWrtShell &rSh         = GetWrtShell();
     997             : 
     998        2609 :     const Point* pPt = IsTabColFromDoc() || IsTabRowFromDoc() ? &m_aTabColFromDocPos : 0;
     999        2609 :     const FrmTypeFlags nFrmType   = rSh.IsObjSelected()
    1000             :                 ? FrmTypeFlags::DRAWOBJ
    1001        2609 :                 : rSh.GetFrmType( pPt, true );
    1002             : 
    1003        2609 :     const bool  bFrmSelection = rSh.IsFrmSelected();
    1004        2609 :     const bool bBrowse = rSh.GetViewOptions()->getBrowseMode();
    1005             :     // PageOffset/limiter
    1006        2609 :     const SwRect& rPageRect = rSh.GetAnyCurRect( RECT_PAGE, pPt );
    1007        2609 :     const SwRect& rPagePrtRect = rSh.GetAnyCurRect( RECT_PAGE_PRT, pPt );
    1008        2609 :     const long nPageWidth  = rPageRect.Width();
    1009        2609 :     const long nPageHeight = rPageRect.Height();
    1010             : 
    1011             :     const SwPageDesc& rDesc = rSh.GetPageDesc(
    1012        5218 :                 IsTabColFromDoc() || m_bTabRowFromDoc ?
    1013        2609 :                     rSh.GetMousePageDesc(m_aTabColFromDocPos) : rSh.GetCurPageDesc() );
    1014             : 
    1015        2609 :     const SvxFrameDirectionItem& rFrameDir = rDesc.GetMaster().GetFrmDir();
    1016        2609 :     const bool bVerticalWriting = rSh.IsInVerticalText();
    1017             : 
    1018             :     //enable tab stop display on the rulers depending on the writing direction
    1019        2609 :     WinBits nRulerStyle = m_pHRuler->GetStyle() & ~WB_EXTRAFIELD;
    1020        2609 :     m_pHRuler->SetStyle(bVerticalWriting||bBrowse ? nRulerStyle : nRulerStyle|WB_EXTRAFIELD);
    1021        2609 :     nRulerStyle = m_pVRuler->GetStyle() & ~WB_EXTRAFIELD;
    1022        2609 :     m_pVRuler->SetStyle(bVerticalWriting ? nRulerStyle|WB_EXTRAFIELD : nRulerStyle);
    1023             : 
    1024             :     //#i24363# tab stops relative to indent
    1025        2609 :     bool bRelative = rSh.getIDocumentSettingAccess()->get(DocumentSettingId::TABS_RELATIVE_TO_INDENT);
    1026        2609 :     m_pHRuler->SetTabsRelativeToIndent( bRelative );
    1027        2609 :     m_pVRuler->SetTabsRelativeToIndent( bRelative );
    1028             : 
    1029        2609 :     SvxLRSpaceItem aPageLRSpace( rDesc.GetMaster().GetLRSpace() );
    1030        2609 :     SwapPageMargin( rDesc, aPageLRSpace );
    1031             : 
    1032        2609 :     SfxItemSet aCoreSet( GetPool(), RES_PARATR_TABSTOP, RES_PARATR_TABSTOP,
    1033        5218 :                                     RES_LR_SPACE,        RES_UL_SPACE, 0 );
    1034             :     // get also the list level indent values merged as LR-SPACE item, if needed.
    1035        2609 :     rSh.GetCurAttr( aCoreSet, true );
    1036        2609 :     const SelectionType nSelType = rSh.GetSelectionType();
    1037             : 
    1038        5218 :     SfxWhichIter aIter( rSet );
    1039        2609 :     sal_uInt16 nWhich = aIter.FirstWhich();
    1040        2609 :     bool bPutContentProtection = false;
    1041             : 
    1042       18312 :     while ( nWhich )
    1043             :     {
    1044       13094 :         switch ( nWhich )
    1045             :         {
    1046             : 
    1047             :         case SID_ATTR_PAGE_COLUMN:
    1048             :         {
    1049         510 :             sal_uInt16 nColumnType = 0;
    1050             : 
    1051         510 :             const SwFrameFormat& rMaster = rDesc.GetMaster();
    1052         510 :             SwFormatCol aCol(rMaster.GetCol());
    1053         510 :             const sal_uInt16 nCols = aCol.GetNumCols();
    1054         510 :             if ( nCols == 0 )
    1055             :             {
    1056         510 :                 nColumnType = 1;
    1057             :             }
    1058           0 :             else if ( nCols == 2 )
    1059             :             {
    1060           0 :                 const sal_uInt16 nColLeft = aCol.CalcPrtColWidth(0, aCol.GetWishWidth());
    1061           0 :                 const sal_uInt16 nColRight = aCol.CalcPrtColWidth(1, aCol.GetWishWidth());
    1062             : 
    1063           0 :                 if ( abs(nColLeft - nColRight) <= 10 )
    1064             :                 {
    1065           0 :                     nColumnType = 2;
    1066             :                 }
    1067           0 :                 else if( abs(nColLeft - nColRight*2) < 20 )
    1068             :                 {
    1069           0 :                     nColumnType = 4;
    1070             :                 }
    1071           0 :                 else if( abs(nColLeft*2 - nColRight) < 20 )
    1072             :                 {
    1073           0 :                     nColumnType = 5;
    1074             :                 }
    1075             :             }
    1076           0 :             else if( nCols == 3 )
    1077             :             {
    1078           0 :                 nColumnType = 3;
    1079             :             }
    1080             : 
    1081         510 :             rSet.Put( SfxInt16Item( SID_ATTR_PAGE_COLUMN, nColumnType ) );
    1082             :         }
    1083         510 :         break;
    1084             : 
    1085             :         case SID_ATTR_LONG_LRSPACE:
    1086             :         {
    1087             :             SvxLongLRSpaceItem aLongLR( (long)aPageLRSpace.GetLeft(),
    1088             :                                         (long)aPageLRSpace.GetRight(),
    1089         548 :                                         SID_ATTR_LONG_LRSPACE);
    1090         548 :             if(bBrowse)
    1091             :             {
    1092           1 :                 aLongLR.SetLeft(rPagePrtRect.Left());
    1093           1 :                 aLongLR.SetRight(nPageWidth - rPagePrtRect.Right());
    1094             :             }
    1095        1096 :             if ( ( nFrmType & FrmTypeFlags::HEADER || nFrmType & FrmTypeFlags::FOOTER ) &&
    1096         548 :                  !(nFrmType & FrmTypeFlags::COLSECT) )
    1097             :             {
    1098           0 :                 SwFrameFormat *pFormat = const_cast<SwFrameFormat*>(nFrmType & FrmTypeFlags::HEADER ?
    1099           0 :                                 rDesc.GetMaster().GetHeader().GetHeaderFormat() :
    1100           0 :                                 rDesc.GetMaster().GetFooter().GetFooterFormat());
    1101           0 :                 if( pFormat )// #i80890# if rDesc is not the one belonging to the current page is might crash
    1102             :                 {
    1103           0 :                     SwRect aRect( rSh.GetAnyCurRect( RECT_HEADERFOOTER, pPt));
    1104           0 :                     aRect.Pos() -= rSh.GetAnyCurRect( RECT_PAGE, pPt ).Pos();
    1105           0 :                     const SvxLRSpaceItem& aLR = pFormat->GetLRSpace();
    1106           0 :                     aLongLR.SetLeft ( (long)aLR.GetLeft() + (long)aRect.Left() );
    1107           0 :                     aLongLR.SetRight( (nPageWidth -
    1108           0 :                                         (long)aRect.Right() + (long)aLR.GetRight()));
    1109             :                 }
    1110             :             }
    1111             :             else
    1112             :             {
    1113         548 :                 SwRect aRect;
    1114         548 :                 if( !bFrmSelection && ((nFrmType & FrmTypeFlags::COLSECT) || rSh.IsDirectlyInSection()) )
    1115             :                 {
    1116           3 :                     aRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, pPt);
    1117           3 :                     const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, pPt);
    1118           3 :                     aRect.Pos() += aTmpRect.Pos();
    1119             :                 }
    1120             : 
    1121         545 :                 else if ( bFrmSelection || nFrmType & FrmTypeFlags::FLY_ANY )
    1122           0 :                     aRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED, pPt);
    1123         545 :                 else if( nFrmType & FrmTypeFlags::DRAWOBJ)
    1124           0 :                     aRect = rSh.GetObjRect();
    1125             : 
    1126         548 :                 if( aRect.Width() )
    1127             :                 {
    1128             :                     // make relative to page position:
    1129           3 :                     aLongLR.SetLeft(aRect.Left() - rPageRect.Left());
    1130           3 :                     aLongLR.SetRight(rPageRect.Right() - aRect.Right());
    1131             :                 }
    1132             :             }
    1133         548 :             if( nWhich == SID_ATTR_LONG_LRSPACE )
    1134         548 :                 rSet.Put( aLongLR );
    1135             :             else
    1136             :             {
    1137             :                 SvxLRSpaceItem aLR( aLongLR.GetLeft(),
    1138             :                                     aLongLR.GetRight(),
    1139             :                                     0, 0,
    1140           0 :                                     nWhich);
    1141           0 :                 rSet.Put(aLR);
    1142             :             }
    1143         548 :             break;
    1144             :         }
    1145             : 
    1146             :         // provide left and right margins of current page style
    1147             :         case SID_ATTR_PAGE_LRSPACE:
    1148             :         {
    1149         847 :             const SvxLRSpaceItem aTmpPageLRSpace( rDesc.GetMaster().GetLRSpace() );
    1150             :             const SvxLongLRSpaceItem aLongLR(
    1151             :                 (long)aTmpPageLRSpace.GetLeft(),
    1152             :                 (long)aTmpPageLRSpace.GetRight(),
    1153        1694 :                 SID_ATTR_PAGE_LRSPACE );
    1154        1694 :             rSet.Put( aLongLR );
    1155             :         }
    1156         847 :         break;
    1157             : 
    1158             :         case SID_ATTR_LONG_ULSPACE:
    1159             :         {
    1160             :             // Page margin top bottom
    1161         583 :             SvxULSpaceItem aUL( rDesc.GetMaster().GetULSpace() );
    1162         583 :             SvxLongULSpaceItem aLongUL( (long)aUL.GetUpper(),
    1163         583 :                                         (long)aUL.GetLower(),
    1164        1749 :                                         SID_ATTR_LONG_ULSPACE);
    1165             : 
    1166         583 :             if ( bFrmSelection || nFrmType & FrmTypeFlags::FLY_ANY )
    1167             :             {
    1168             :                 // Convert document coordinates into page coordinates.
    1169           0 :                 const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED, pPt);
    1170           0 :                 aLongUL.SetUpper(rRect.Top() - rPageRect.Top());
    1171           0 :                 aLongUL.SetLower(rPageRect.Bottom() - rRect.Bottom());
    1172             :             }
    1173         583 :             else if ( nFrmType & FrmTypeFlags::HEADER || nFrmType & FrmTypeFlags::FOOTER )
    1174             :             {
    1175           0 :                 SwRect aRect( rSh.GetAnyCurRect( RECT_HEADERFOOTER, pPt));
    1176           0 :                 aRect.Pos() -= rSh.GetAnyCurRect( RECT_PAGE, pPt ).Pos();
    1177           0 :                 aLongUL.SetUpper( aRect.Top() );
    1178           0 :                 aLongUL.SetLower( nPageHeight - aRect.Bottom() );
    1179             :             }
    1180         583 :             else if( nFrmType & FrmTypeFlags::DRAWOBJ)
    1181             :             {
    1182           0 :                 const SwRect &rRect = rSh.GetObjRect();
    1183           0 :                 aLongUL.SetUpper((rRect.Top() - rPageRect.Top()));
    1184           0 :                 aLongUL.SetLower((rPageRect.Bottom() - rRect.Bottom()));
    1185             :             }
    1186         583 :             else if(bBrowse)
    1187             :             {
    1188           1 :                 aLongUL.SetUpper(rPagePrtRect.Top());
    1189           1 :                 aLongUL.SetLower(nPageHeight - rPagePrtRect.Bottom());
    1190             :             }
    1191         583 :             if( nWhich == SID_ATTR_LONG_ULSPACE )
    1192         583 :                 rSet.Put( aLongUL );
    1193             :             else
    1194             :             {
    1195           0 :                 SvxULSpaceItem aULTmp((sal_uInt16)aLongUL.GetUpper(),
    1196           0 :                                       (sal_uInt16)aLongUL.GetLower(),
    1197           0 :                                       nWhich);
    1198           0 :                 rSet.Put(aULTmp);
    1199             :             }
    1200        1166 :             break;
    1201             :         }
    1202             : 
    1203             :         // provide top and bottom margins of current page style
    1204             :         case SID_ATTR_PAGE_ULSPACE:
    1205             :         {
    1206         847 :             const SvxULSpaceItem aUL( rDesc.GetMaster().GetULSpace() );
    1207             :             SvxLongULSpaceItem aLongUL(
    1208         847 :                 (long)aUL.GetUpper(),
    1209         847 :                 (long)aUL.GetLower(),
    1210        2541 :                 SID_ATTR_PAGE_ULSPACE );
    1211             : 
    1212        1694 :             rSet.Put( aLongUL );
    1213             :         }
    1214         847 :         break;
    1215             : 
    1216             :         case SID_ATTR_TABSTOP_VERTICAL :
    1217             :         case RES_PARATR_TABSTOP:
    1218             :         {
    1219        3357 :             if ( ISA( SwWebView ) ||
    1220        2238 :                  IsTabColFromDoc() ||
    1221        2238 :                  IsTabRowFromDoc() ||
    1222        2238 :                  ( nSelType & nsSelectionType::SEL_GRF ) ||
    1223        2238 :                  ( nSelType & nsSelectionType::SEL_FRM ) ||
    1224        2238 :                  ( nSelType & nsSelectionType::SEL_OLE ) ||
    1225        2238 :                  ( SfxItemState::DEFAULT > aCoreSet.GetItemState(RES_LR_SPACE) ) ||
    1226        3934 :                  (!bVerticalWriting && (SID_ATTR_TABSTOP_VERTICAL == nWhich) ) ||
    1227           0 :                  ( bVerticalWriting && (RES_PARATR_TABSTOP == nWhich))
    1228             :                )
    1229         577 :                 rSet.DisableItem( nWhich );
    1230             :             else
    1231             :             {
    1232             :                 SvxTabStopItem aTabStops(static_cast<const SvxTabStopItem&>(
    1233         542 :                                             aCoreSet.Get( RES_PARATR_TABSTOP )));
    1234             : 
    1235             :                 const SvxTabStopItem& rDefTabs = static_cast<const SvxTabStopItem&>(
    1236         542 :                                             rSh.GetDefault(RES_PARATR_TABSTOP));
    1237             : 
    1238             :                 OSL_ENSURE(m_pHRuler, "why is there no ruler?");
    1239         542 :                 const long nDefTabDist = ::GetTabDist(rDefTabs);
    1240         542 :                 m_pHRuler->SetDefTabDist( nDefTabDist );
    1241         542 :                 m_pVRuler->SetDefTabDist( nDefTabDist );
    1242         542 :                 ::lcl_EraseDefTabs(aTabStops);
    1243         542 :                 rSet.Put(aTabStops, nWhich);
    1244             :             }
    1245        1119 :             break;
    1246             :         }
    1247             : 
    1248             :         case SID_ATTR_PARA_LRSPACE_VERTICAL:
    1249             :         case SID_ATTR_PARA_LRSPACE:
    1250             :         {
    1251        1166 :             if ( nSelType & nsSelectionType::SEL_GRF ||
    1252        1166 :                  nSelType & nsSelectionType::SEL_FRM ||
    1253        1166 :                  nSelType & nsSelectionType::SEL_OLE ||
    1254         583 :                  nFrmType == FrmTypeFlags::DRAWOBJ ||
    1255        1166 :                  (!bVerticalWriting && (SID_ATTR_PARA_LRSPACE_VERTICAL == nWhich)) ||
    1256           0 :                  ( bVerticalWriting && (SID_ATTR_PARA_LRSPACE == nWhich))
    1257             :                 )
    1258             :             {
    1259         583 :                 rSet.DisableItem(nWhich);
    1260             :             }
    1261             :             else
    1262             :             {
    1263           0 :                 SvxLRSpaceItem aLR( RES_LR_SPACE );
    1264           0 :                 if ( !IsTabColFromDoc() )
    1265             :                 {
    1266           0 :                     aLR = static_cast<const SvxLRSpaceItem&>(aCoreSet.Get(RES_LR_SPACE));
    1267             : 
    1268             :                     // #i23726#
    1269           0 :                     if (m_pNumRuleNodeFromDoc)
    1270             :                     {
    1271           0 :                         short nOffset = static_cast< short >(aLR.GetTextLeft() +
    1272             :                                         // #i42922# Mouse move of numbering label
    1273             :                                         // has to consider the left indent of the paragraph
    1274           0 :                                         m_pNumRuleNodeFromDoc->GetLeftMarginWithNum( true ) );
    1275             : 
    1276             :                         short nFLOffset;
    1277           0 :                         m_pNumRuleNodeFromDoc->GetFirstLineOfsWithNum( nFLOffset );
    1278             : 
    1279           0 :                         aLR.SetLeft( nOffset + nFLOffset );
    1280             :                     }
    1281             :                 }
    1282           0 :                 aLR.SetWhich(nWhich);
    1283           0 :                 rSet.Put(aLR);
    1284             :             }
    1285         583 :         break;
    1286             :         }
    1287             : 
    1288             :         case SID_ATTR_PARA_ULSPACE:
    1289             :         case SID_PARASPACE_INCREASE:
    1290             :         case SID_PARASPACE_DECREASE:
    1291             :         {
    1292        2875 :             SvxULSpaceItem aUL = static_cast<const SvxULSpaceItem&>(aCoreSet.Get(RES_UL_SPACE));
    1293        2875 :             SfxItemState e = aCoreSet.GetItemState(RES_UL_SPACE);
    1294        2875 :             if( e >= SfxItemState::DEFAULT )
    1295             :             {
    1296        2875 :                 if ( !aUL.GetUpper() && !aUL.GetLower() )
    1297        2853 :                     rSet.DisableItem( SID_PARASPACE_DECREASE );
    1298          22 :                 else if ( aUL.GetUpper() >= 5670 && aUL.GetLower() >= 5670 )
    1299           0 :                     rSet.DisableItem( SID_PARASPACE_INCREASE );
    1300        2875 :                 if ( nWhich == SID_ATTR_PARA_ULSPACE )
    1301             :                 {
    1302         509 :                     aUL.SetWhich( SID_ATTR_PARA_ULSPACE );
    1303         509 :                     rSet.Put( aUL );
    1304             :                 }
    1305             :             }
    1306             :             else
    1307             :             {
    1308           0 :                 rSet.DisableItem( SID_PARASPACE_INCREASE );
    1309           0 :                 rSet.DisableItem( SID_PARASPACE_DECREASE );
    1310           0 :                 rSet.InvalidateItem( SID_ATTR_PARA_ULSPACE );
    1311        2875 :             }
    1312             :         }
    1313        2875 :         break;
    1314             : 
    1315             :         case SID_RULER_BORDER_DISTANCE:
    1316             :         {
    1317         584 :             m_nLeftBorderDistance = 0;
    1318         584 :             m_nRightBorderDistance = 0;
    1319        1168 :             if ( nSelType & nsSelectionType::SEL_GRF ||
    1320        1168 :                     nSelType & nsSelectionType::SEL_FRM ||
    1321        1168 :                     nSelType & nsSelectionType::SEL_OLE ||
    1322             :                     nFrmType == FrmTypeFlags::DRAWOBJ )
    1323           0 :                 rSet.DisableItem(SID_RULER_BORDER_DISTANCE);
    1324             :             else
    1325             :             {
    1326         584 :                 SvxLRSpaceItem aDistLR(SID_RULER_BORDER_DISTANCE);
    1327         584 :                 if(nFrmType & FrmTypeFlags::FLY_ANY)
    1328             :                 {
    1329           0 :                     if( IsTabColFromDoc() )
    1330             :                     {
    1331           0 :                         const SwRect& rFlyPrtRect = rSh.GetAnyCurRect( RECT_FLY_PRT_EMBEDDED, pPt );
    1332           0 :                         aDistLR.SetLeft(rFlyPrtRect.Left());
    1333           0 :                         aDistLR.SetRight(rFlyPrtRect.Left());
    1334             :                     }
    1335             :                     else
    1336             :                     {
    1337           0 :                         SfxItemSet aCoreSet2( GetPool(),
    1338             :                                                 RES_BOX, RES_BOX,
    1339           0 :                                                 SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, 0 );
    1340           0 :                         SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER );
    1341           0 :                         aCoreSet.Put( aBoxInfo );
    1342           0 :                         rSh.GetFlyFrmAttr( aCoreSet );
    1343           0 :                         const SvxBoxItem& rBox = static_cast<const SvxBoxItem&>(aCoreSet.Get(RES_BOX));
    1344           0 :                         aDistLR.SetLeft(rBox.GetDistance(SvxBoxItemLine::LEFT));
    1345           0 :                         aDistLR.SetRight(rBox.GetDistance(SvxBoxItemLine::RIGHT));
    1346             : 
    1347             :                         //add the paragraph border distance
    1348           0 :                         SfxItemSet aCoreSet1( GetPool(),
    1349             :                                                 RES_BOX, RES_BOX,
    1350           0 :                                                 0 );
    1351           0 :                         rSh.GetCurAttr( aCoreSet1 );
    1352           0 :                         const SvxBoxItem& rParaBox = static_cast<const SvxBoxItem&>(aCoreSet1.Get(RES_BOX));
    1353           0 :                         aDistLR.SetLeft(aDistLR.GetLeft() + rParaBox.GetDistance(SvxBoxItemLine::LEFT));
    1354           0 :                         aDistLR.SetRight(aDistLR.GetRight() + rParaBox.GetDistance(SvxBoxItemLine::RIGHT));
    1355             :                     }
    1356           0 :                     rSet.Put(aDistLR);
    1357           0 :                     m_nLeftBorderDistance  = static_cast< sal_uInt16 >(aDistLR.GetLeft());
    1358           0 :                     m_nRightBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetRight());
    1359             :                 }
    1360        2336 :                 else if ( IsTabColFromDoc() ||
    1361         593 :                     ( rSh.GetTableFormat() && !bFrmSelection &&
    1362         593 :                     !(nFrmType & FrmTypeFlags::COLSECT ) ) )
    1363             :                 {
    1364           3 :                     SfxItemSet aCoreSet2( GetPool(),
    1365             :                                             RES_BOX, RES_BOX,
    1366           3 :                                             SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, 0 );
    1367           6 :                     SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER );
    1368           3 :                     aBoxInfo.SetTable(false);
    1369           3 :                     aBoxInfo.SetDist(true);
    1370           3 :                     aCoreSet2.Put(aBoxInfo);
    1371           3 :                     rSh.GetTabBorders( aCoreSet2 );
    1372           3 :                     const SvxBoxItem& rBox = static_cast<const SvxBoxItem&>(aCoreSet2.Get(RES_BOX));
    1373           3 :                     aDistLR.SetLeft(rBox.GetDistance(SvxBoxItemLine::LEFT));
    1374           3 :                     aDistLR.SetRight(rBox.GetDistance(SvxBoxItemLine::RIGHT));
    1375             : 
    1376             :                     //add the border distance of the paragraph
    1377           6 :                     SfxItemSet aCoreSet1( GetPool(), RES_BOX, RES_BOX );
    1378           3 :                     rSh.GetCurAttr( aCoreSet1 );
    1379           3 :                     const SvxBoxItem& rParaBox = static_cast<const SvxBoxItem&>(aCoreSet1.Get(RES_BOX));
    1380           3 :                     aDistLR.SetLeft(aDistLR.GetLeft() + rParaBox.GetDistance(SvxBoxItemLine::LEFT));
    1381           3 :                     aDistLR.SetRight(aDistLR.GetRight() + rParaBox.GetDistance(SvxBoxItemLine::RIGHT));
    1382           3 :                     rSet.Put(aDistLR);
    1383           3 :                     m_nLeftBorderDistance  = static_cast< sal_uInt16 >(aDistLR.GetLeft());
    1384           6 :                     m_nRightBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetRight());
    1385             :                 }
    1386         581 :                 else if ( !rSh.IsDirectlyInSection() )
    1387             :                 {
    1388             :                     //get the page/header/footer border distance
    1389         578 :                     const SwFrameFormat& rMaster = rDesc.GetMaster();
    1390         578 :                     const SvxBoxItem& rBox = static_cast<const SvxBoxItem&>(rMaster.GetAttrSet().Get(RES_BOX));
    1391         578 :                     aDistLR.SetLeft(rBox.GetDistance(SvxBoxItemLine::LEFT));
    1392         578 :                     aDistLR.SetRight(rBox.GetDistance(SvxBoxItemLine::RIGHT));
    1393             : 
    1394         578 :                     const SvxBoxItem* pBox = 0;
    1395         578 :                     if(nFrmType & FrmTypeFlags::HEADER)
    1396             :                     {
    1397           0 :                         rMaster.GetHeader();
    1398           0 :                         const SwFormatHeader& rHeaderFormat = rMaster.GetHeader();
    1399           0 :                         SwFrameFormat *pHeaderFormat = const_cast<SwFrameFormat*>(rHeaderFormat.GetHeaderFormat());
    1400           0 :                         if( pHeaderFormat )// #i80890# if rDesc is not the one belonging to the current page is might crash
    1401           0 :                             pBox = & (const SvxBoxItem&)pHeaderFormat->GetBox();
    1402             :                     }
    1403         578 :                     else if(nFrmType & FrmTypeFlags::FOOTER )
    1404             :                     {
    1405           0 :                         const SwFormatFooter& rFooterFormat = rMaster.GetFooter();
    1406           0 :                         SwFrameFormat *pFooterFormat = const_cast<SwFrameFormat*>(rFooterFormat.GetFooterFormat());
    1407           0 :                         if( pFooterFormat )// #i80890# if rDesc is not the one belonging to the current page is might crash
    1408           0 :                             pBox = & (const SvxBoxItem&)pFooterFormat->GetBox();
    1409             :                     }
    1410         578 :                     if(pBox)
    1411             :                     {
    1412           0 :                         aDistLR.SetLeft(pBox->GetDistance(SvxBoxItemLine::LEFT));
    1413           0 :                         aDistLR.SetRight(pBox->GetDistance(SvxBoxItemLine::RIGHT));
    1414             :                     }
    1415             : 
    1416             :                     //add the border distance of the paragraph
    1417         578 :                     SfxItemSet aCoreSetTmp( GetPool(),
    1418             :                                             RES_BOX, RES_BOX,
    1419         578 :                                             SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, 0 );
    1420         578 :                     rSh.GetCurAttr( aCoreSetTmp );
    1421         578 :                     const SvxBoxItem& rParaBox = static_cast<const SvxBoxItem&>(aCoreSetTmp.Get(RES_BOX));
    1422         578 :                     aDistLR.SetLeft(aDistLR.GetLeft() + rParaBox.GetDistance(SvxBoxItemLine::LEFT));
    1423         578 :                     aDistLR.SetRight(aDistLR.GetRight() + rParaBox.GetDistance(SvxBoxItemLine::RIGHT));
    1424         578 :                     rSet.Put(aDistLR);
    1425         578 :                     m_nLeftBorderDistance  = static_cast< sal_uInt16 >(aDistLR.GetLeft());
    1426         578 :                     m_nRightBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetRight());
    1427         584 :                 }
    1428             :             }
    1429             :         }
    1430         584 :         break;
    1431             : 
    1432             :         case SID_RULER_TEXT_RIGHT_TO_LEFT:
    1433             :         {
    1434        1168 :             if ( nSelType & nsSelectionType::SEL_GRF ||
    1435        1168 :                     nSelType & nsSelectionType::SEL_FRM ||
    1436        1168 :                     nSelType & nsSelectionType::SEL_OLE ||
    1437             :                     nFrmType == FrmTypeFlags::DRAWOBJ)
    1438           0 :                 rSet.DisableItem(nWhich);
    1439             :             else
    1440             :             {
    1441         584 :                 bool bFlag = rSh.IsInRightToLeftText();
    1442         584 :                 rSet.Put(SfxBoolItem(nWhich, bFlag));
    1443             :             }
    1444             :         }
    1445         584 :         break;
    1446             : 
    1447             :         case SID_RULER_BORDERS_VERTICAL:
    1448             :         case SID_RULER_BORDERS:
    1449             :         {
    1450        1131 :             bool bFrameHasVerticalColumns(false);
    1451             :             {
    1452             :                 bool bFrameRTL;
    1453             :                 bool bFrameVertL2R;
    1454        1131 :                 bFrameHasVerticalColumns = rSh.IsFrmVertical(false, bFrameRTL, bFrameVertL2R) &&
    1455        1131 :                                            bFrmSelection;
    1456             :             }
    1457        2268 :             bool bHasTable = ( IsTabColFromDoc() ||
    1458        1149 :                     ( rSh.GetTableFormat() && !bFrmSelection &&
    1459        1143 :                     !(nFrmType & FrmTypeFlags::COLSECT ) ) );
    1460             : 
    1461        1131 :             bool bTableVertical = bHasTable && rSh.IsTableVertical();
    1462             : 
    1463        1131 :             if(((SID_RULER_BORDERS_VERTICAL == nWhich) &&
    1464         583 :                 ((bHasTable && !bTableVertical) ||
    1465        1160 :                  (!bVerticalWriting && !bFrmSelection && !bHasTable ) ||
    1466           0 :                  ( bFrmSelection && !bFrameHasVerticalColumns))) ||
    1467         548 :                ((SID_RULER_BORDERS == nWhich) &&
    1468           3 :                 ((bHasTable && bTableVertical) ||
    1469           0 :                  (bVerticalWriting && !bFrmSelection&& !bHasTable) || bFrameHasVerticalColumns)))
    1470         583 :                 rSet.DisableItem(nWhich);
    1471         548 :             else if ( bHasTable )
    1472             :             {
    1473           3 :                 SwTabCols aTabCols;
    1474           3 :                 size_t nNum = 0;
    1475           3 :                 if ( ( m_bSetTabColFromDoc = IsTabColFromDoc() ) )
    1476             :                 {
    1477           0 :                     rSh.GetMouseTabCols( aTabCols, m_aTabColFromDocPos );
    1478           0 :                     nNum = rSh.GetCurMouseTabColNum( m_aTabColFromDocPos );
    1479             :                 }
    1480             :                 else
    1481             :                 {
    1482           3 :                     rSh.GetTabCols( aTabCols );
    1483           3 :                     nNum = rSh.GetCurTabColNum();
    1484           3 :                     if(rSh.IsTableRightToLeft())
    1485           0 :                         nNum = aTabCols.Count() - nNum;
    1486             :                 }
    1487             : 
    1488             :                 OSL_ENSURE(nNum <= aTabCols.Count(), "TabCol not found");
    1489           3 :                 const int nLft = aTabCols.GetLeftMin() + aTabCols.GetLeft();
    1490             :                 const int nRgt = (bTableVertical ? nPageHeight : nPageWidth) -
    1491           3 :                                  (aTabCols.GetLeftMin() + aTabCols.GetRight());
    1492             : 
    1493           3 :                 const sal_uInt16 nL = static_cast< sal_uInt16 >(nLft > 0 ? nLft : 0);
    1494           3 :                 const sal_uInt16 nR = static_cast< sal_uInt16 >(nRgt > 0 ? nRgt : 0);
    1495             : 
    1496           6 :                 SvxColumnItem aColItem(nNum, nL, nR);
    1497             : 
    1498           3 :                 long nStart = 0;
    1499           3 :                 long nEnd = 0;
    1500             : 
    1501             :                 //columns in right-to-left tables need to be mirrored
    1502             :                 bool bIsTableRTL =
    1503           3 :                     IsTabColFromDoc() ?
    1504           0 :                           rSh.IsMouseTableRightToLeft(m_aTabColFromDocPos)
    1505           3 :                         : rSh.IsTableRightToLeft();
    1506           3 :                 if(bIsTableRTL)
    1507             :                 {
    1508           0 :                     for ( size_t i = aTabCols.Count(); i; --i )
    1509             :                     {
    1510           0 :                         const SwTabColsEntry& rEntry = aTabCols.GetEntry( i - 1 );
    1511           0 :                         nEnd = aTabCols.GetRight() - rEntry.nPos;
    1512             :                         SvxColumnDescription aColDesc( nStart, nEnd,
    1513           0 :                                                     aTabCols.GetRight() - rEntry.nMax,
    1514           0 :                                                     aTabCols.GetRight() - rEntry.nMin,
    1515           0 :                                                     !aTabCols.IsHidden(i - 1) );
    1516           0 :                         aColItem.Append(aColDesc);
    1517           0 :                         nStart = nEnd;
    1518             :                     }
    1519             :                     SvxColumnDescription aColDesc(nStart,
    1520           0 :                                     aTabCols.GetRight() - aTabCols.GetLeft(), true);
    1521           0 :                     aColItem.Append(aColDesc);
    1522             :                 }
    1523             :                 else
    1524             :                 {
    1525           6 :                     for ( size_t i = 0; i < aTabCols.Count(); ++i )
    1526             :                     {
    1527           3 :                         const SwTabColsEntry& rEntry = aTabCols.GetEntry( i );
    1528           3 :                         nEnd = rEntry.nPos - aTabCols.GetLeft();
    1529             :                         SvxColumnDescription aColDesc( nStart, nEnd,
    1530           6 :                                 rEntry.nMin - aTabCols.GetLeft(), rEntry.nMax - aTabCols.GetLeft(),
    1531           9 :                                                     !aTabCols.IsHidden(i) );
    1532           3 :                         aColItem.Append(aColDesc);
    1533           3 :                         nStart = nEnd;
    1534             :                     }
    1535           3 :                     SvxColumnDescription aColDesc(nStart, aTabCols.GetRight() - aTabCols.GetLeft(),
    1536           3 :                                 0, 0, true);
    1537           3 :                     aColItem.Append(aColDesc);
    1538             :                 }
    1539           6 :                 rSet.Put(aColItem, nWhich);
    1540             :             }
    1541         545 :             else if ( bFrmSelection || nFrmType & ( FrmTypeFlags::COLUMN | FrmTypeFlags::COLSECT ) )
    1542             :             {
    1543             :                 // Out of frame or page?
    1544           0 :                 sal_uInt16 nNum = 0;
    1545           0 :                 if(bFrmSelection)
    1546             :                 {
    1547           0 :                     const SwFrameFormat* pFormat = rSh.GetFlyFrameFormat();
    1548           0 :                     if(pFormat)
    1549           0 :                         nNum = pFormat->GetCol().GetNumCols();
    1550             :                 }
    1551             :                 else
    1552           0 :                     nNum = rSh.GetCurColNum();
    1553             : 
    1554           0 :                 if(
    1555             :                     // For that matter FrmTypeFlags::COLSECT should not be included
    1556             :                     // if the border is selected!
    1557           0 :                     !bFrmSelection &&
    1558           0 :                      nFrmType & FrmTypeFlags::COLSECT )
    1559             :                 {
    1560           0 :                     const SwSection *pSect = rSh.GetAnySection(false, pPt);
    1561             :                     OSL_ENSURE( pSect, "Which section?");
    1562           0 :                     if( pSect )
    1563             :                     {
    1564           0 :                         SwSectionFormat const *pFormat = pSect->GetFormat();
    1565           0 :                         const SwFormatCol& rCol = pFormat->GetCol();
    1566           0 :                         if(rSh.IsInRightToLeftText())
    1567           0 :                             nNum = rCol.GetColumns().size() - nNum;
    1568             :                         else
    1569           0 :                             --nNum;
    1570           0 :                         SvxColumnItem aColItem(nNum);
    1571           0 :                         SwRect aRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, pPt);
    1572           0 :                         const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, pPt);
    1573             : 
    1574           0 :                         ::lcl_FillSvxColumn(rCol, bVerticalWriting ? aRect.Height() : aRect.Width(), aColItem, 0);
    1575             : 
    1576           0 :                         if(bVerticalWriting)
    1577             :                         {
    1578           0 :                             aRect.Pos() += Point(aTmpRect.Left(), aTmpRect.Top());
    1579           0 :                             aRect.Pos().Y() -= rPageRect.Top();
    1580           0 :                             aColItem.SetLeft(aRect.Top());
    1581           0 :                             aColItem.SetRight(nPageHeight - aRect.Bottom());
    1582             :                         }
    1583             :                         else
    1584             :                         {
    1585           0 :                             aRect.Pos() += aTmpRect.Pos();
    1586             : 
    1587             :                             // make relative to page position:
    1588           0 :                             aColItem.SetLeft ((sal_uInt16)( aRect.Left() - rPageRect.Left() ));
    1589           0 :                             aColItem.SetRight((sal_uInt16)( rPageRect.Right() - aRect.Right()));
    1590             :                         }
    1591           0 :                         aColItem.SetOrtho(aColItem.CalcOrtho());
    1592             : 
    1593           0 :                         rSet.Put(aColItem, nWhich);
    1594             :                     }
    1595             :                 }
    1596           0 :                 else if( bFrmSelection || nFrmType & FrmTypeFlags::FLY_ANY )
    1597             :                 {
    1598             :                     // Columns in frame
    1599           0 :                     if ( nNum  )
    1600             :                     {
    1601           0 :                         const SwFrameFormat* pFormat = rSh.GetFlyFrameFormat() ;
    1602             : 
    1603           0 :                         const SwFormatCol& rCol = pFormat->GetCol();
    1604           0 :                         if(rSh.IsInRightToLeftText())
    1605           0 :                             nNum = rCol.GetColumns().size() - nNum;
    1606             :                         else
    1607           0 :                             nNum--;
    1608           0 :                         SvxColumnItem aColItem(nNum);
    1609           0 :                         const SwRect &rSizeRect = rSh.GetAnyCurRect(RECT_FLY_PRT_EMBEDDED, pPt);
    1610             : 
    1611           0 :                         bool bUseVertical = bFrameHasVerticalColumns || (!bFrmSelection && bVerticalWriting);
    1612           0 :                         const long lWidth = bUseVertical ? rSizeRect.Height() : rSizeRect.Width();
    1613           0 :                         const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED, pPt);
    1614           0 :                         long nDist2 = ((bUseVertical ? rRect.Height() : rRect.Width()) - lWidth) /2;
    1615           0 :                         ::lcl_FillSvxColumn(rCol, lWidth, aColItem, nDist2);
    1616             : 
    1617           0 :                         SfxItemSet aFrameSet(GetPool(), RES_LR_SPACE, RES_LR_SPACE);
    1618           0 :                         rSh.GetFlyFrmAttr( aFrameSet );
    1619             : 
    1620           0 :                         if(bUseVertical)
    1621             :                         {
    1622           0 :                             aColItem.SetLeft(rRect.Top()- rPageRect.Top());
    1623           0 :                             aColItem.SetRight(nPageHeight + rPageRect.Top() - rRect.Bottom());
    1624             :                         }
    1625             :                         else
    1626             :                         {
    1627           0 :                             aColItem.SetLeft(rRect.Left() - rPageRect.Left());
    1628           0 :                             aColItem.SetRight(rPageRect.Right() - rRect.Right());
    1629             :                         }
    1630             : 
    1631           0 :                         aColItem.SetOrtho(aColItem.CalcOrtho());
    1632             : 
    1633           0 :                         rSet.Put(aColItem, nWhich);
    1634             :                     }
    1635             :                     else
    1636           0 :                         rSet.DisableItem(nWhich);
    1637             :                 }
    1638             :                 else
    1639             :                 {   // Columns on the page
    1640           0 :                     const SwFrameFormat& rMaster = rDesc.GetMaster();
    1641           0 :                     SwFormatCol aCol(rMaster.GetCol());
    1642           0 :                     if(rFrameDir.GetValue() == FRMDIR_HORI_RIGHT_TOP)
    1643           0 :                         nNum = aCol.GetColumns().size() - nNum;
    1644             :                     else
    1645           0 :                         nNum--;
    1646             : 
    1647           0 :                     SvxColumnItem aColItem(nNum);
    1648           0 :                     const SwRect aPrtRect = rSh.GetAnyCurRect(RECT_PAGE_PRT, pPt);
    1649           0 :                     const SvxBoxItem& rBox = static_cast<const SvxBoxItem&>(rMaster.GetFormatAttr(RES_BOX));
    1650           0 :                     long nDist = rBox.GetDistance();
    1651             : 
    1652             :                     lcl_FillSvxColumn(
    1653             :                         aCol,
    1654             :                         bVerticalWriting ? aPrtRect.Height() : aPrtRect.Width(),
    1655           0 :                         aColItem, nDist);
    1656             : 
    1657           0 :                     if(bBrowse)
    1658             :                     {
    1659           0 :                         if (bVerticalWriting)
    1660             :                         {
    1661           0 :                             aColItem.SetLeft((sal_uInt16)rPagePrtRect.Top());
    1662           0 :                             aColItem.SetRight(sal_uInt16(nPageHeight - rPagePrtRect.Bottom()));
    1663             :                         }
    1664             :                         else
    1665             :                         {
    1666           0 :                             aColItem.SetLeft((sal_uInt16)rPagePrtRect.Left());
    1667           0 :                             aColItem.SetRight(sal_uInt16(nPageWidth - rPagePrtRect.Right()));
    1668             :                         }
    1669             :                     }
    1670             :                     else
    1671             :                     {
    1672           0 :                         if (bVerticalWriting)
    1673             :                         {
    1674           0 :                             SvxULSpaceItem aUL( rDesc.GetMaster().GetULSpace() );
    1675           0 :                             aColItem.SetLeft (aUL.GetUpper());
    1676           0 :                             aColItem.SetRight(aUL.GetLower());
    1677             :                         }
    1678             :                         else
    1679             :                         {
    1680           0 :                             aColItem.SetLeft (aPageLRSpace.GetLeft());
    1681           0 :                             aColItem.SetRight(aPageLRSpace.GetRight());
    1682             :                         }
    1683             :                     }
    1684           0 :                     aColItem.SetOrtho(aColItem.CalcOrtho());
    1685             : 
    1686           0 :                     rSet.Put(aColItem, nWhich);
    1687             :                 }
    1688             :             }
    1689             :             else
    1690         545 :                 rSet.DisableItem(nWhich);
    1691        1131 :             break;
    1692             :         }
    1693             : 
    1694             :         case SID_RULER_ROWS :
    1695             :         case SID_RULER_ROWS_VERTICAL:
    1696             :         {
    1697        1131 :             bool bFrameHasVerticalColumns(false);
    1698             :             {
    1699             :                 bool bFrameRTL;
    1700             :                 bool bFrameVertL2R;
    1701        1131 :                 bFrameHasVerticalColumns = rSh.IsFrmVertical(false, bFrameRTL, bFrameVertL2R) &&
    1702        1131 :                                            bFrmSelection;
    1703             :             }
    1704             : 
    1705        1679 :             if(((SID_RULER_ROWS == nWhich) &&
    1706        1096 :                 ((!bVerticalWriting && !bFrmSelection) || (bFrmSelection && !bFrameHasVerticalColumns))) ||
    1707         583 :                ((SID_RULER_ROWS_VERTICAL == nWhich) &&
    1708           0 :                 ((bVerticalWriting && !bFrmSelection) || bFrameHasVerticalColumns)))
    1709         548 :                 rSet.DisableItem(nWhich);
    1710        2332 :             else if ( IsTabRowFromDoc() ||
    1711         592 :                     ( rSh.GetTableFormat() && !bFrmSelection &&
    1712         592 :                     !(nFrmType & FrmTypeFlags::COLSECT ) ) )
    1713             :             {
    1714           3 :                 SwTabCols aTabCols;
    1715           3 :                 if ( ( m_bSetTabRowFromDoc = IsTabRowFromDoc() ) )
    1716             :                 {
    1717           0 :                     rSh.GetMouseTabRows( aTabCols, m_aTabColFromDocPos );
    1718             :                 }
    1719             :                 else
    1720             :                 {
    1721           3 :                     rSh.GetTabRows( aTabCols );
    1722             :                 }
    1723             : 
    1724           3 :                 const int nLft = aTabCols.GetLeftMin();
    1725             :                 const int nRgt = (bVerticalWriting ? nPageWidth : nPageHeight) -
    1726           3 :                                  (aTabCols.GetLeftMin() + aTabCols.GetRight());
    1727             : 
    1728           3 :                 const sal_uInt16 nL = static_cast< sal_uInt16 >(nLft > 0 ? nLft : 0);
    1729           3 :                 const sal_uInt16 nR = static_cast< sal_uInt16 >(nRgt > 0 ? nRgt : 0);
    1730             : 
    1731           6 :                 SvxColumnItem aColItem(0, nL, nR);
    1732             : 
    1733           3 :                 long nStart = 0;
    1734           3 :                 long nEnd = 0;
    1735             : 
    1736           6 :                 for ( size_t i = 0; i < aTabCols.Count(); ++i )
    1737             :                 {
    1738           3 :                     const SwTabColsEntry& rEntry = aTabCols.GetEntry( i );
    1739           3 :                     if(bVerticalWriting)
    1740             :                     {
    1741           0 :                         nEnd = aTabCols.GetRight() - rEntry.nPos;
    1742             :                         SvxColumnDescription aColDesc( nStart, nEnd,
    1743           0 :                                                     aTabCols.GetRight() - rEntry.nMax,
    1744           0 :                                                     aTabCols.GetRight() - rEntry.nMin,
    1745           0 :                                                     !aTabCols.IsHidden(i) );
    1746           0 :                         aColItem.Append(aColDesc);
    1747             :                     }
    1748             :                     else
    1749             :                     {
    1750           3 :                         nEnd  = rEntry.nPos - aTabCols.GetLeft();
    1751             :                         SvxColumnDescription aColDesc( nStart, nEnd,
    1752           3 :                                                     rEntry.nMin - aTabCols.GetLeft(),
    1753           3 :                                                     rEntry.nMax - aTabCols.GetLeft(),
    1754           9 :                                                     !aTabCols.IsHidden(i) );
    1755           3 :                         aColItem.Append(aColDesc);
    1756             :                     }
    1757           3 :                     nStart = nEnd;
    1758             :                 }
    1759           3 :                 if(bVerticalWriting)
    1760           0 :                     nEnd = aTabCols.GetRight();
    1761             :                 else
    1762           3 :                     nEnd = aTabCols.GetLeft();
    1763             :                 // put a position protection when the last row cannot be moved
    1764             :                 // due to a page break inside of a row
    1765           3 :                 if(!aTabCols.IsLastRowAllowedToChange())
    1766           0 :                     bPutContentProtection = true;
    1767             : 
    1768             :                 SvxColumnDescription aColDesc( nStart, nEnd,
    1769             :                                             aTabCols.GetRight(),
    1770             :                                             aTabCols.GetRight(),
    1771           3 :                                             false );
    1772           3 :                 aColItem.Append(aColDesc);
    1773             : 
    1774           6 :                 rSet.Put(aColItem, nWhich);
    1775             :             }
    1776             :             else
    1777         580 :                 rSet.DisableItem(nWhich);
    1778             :         }
    1779        1131 :         break;
    1780             : 
    1781             :         case SID_RULER_PAGE_POS:
    1782             :         {
    1783             :             SvxPagePosSizeItem aPagePosSize(
    1784         586 :                     Point( rPageRect.Left(), rPageRect.Top()) , nPageWidth, nPageHeight);
    1785             : 
    1786         586 :             rSet.Put(aPagePosSize);
    1787         586 :             break;
    1788             :         }
    1789             : 
    1790             :         case SID_RULER_LR_MIN_MAX:
    1791             :         {
    1792         586 :             Rectangle aRectangle;
    1793        1172 :             if( ( nFrmType & FrmTypeFlags::COLSECT ) && !IsTabColFromDoc() &&
    1794         586 :                 ( nFrmType & ( FrmTypeFlags::TABLE|FrmTypeFlags::COLUMN ) ) )
    1795             :             {
    1796           0 :                 if( nFrmType & FrmTypeFlags::TABLE )
    1797             :                 {
    1798           0 :                     const size_t nNum = rSh.GetCurTabColNum();
    1799           0 :                     SwTabCols aTabCols;
    1800           0 :                     rSh.GetTabCols( aTabCols );
    1801             : 
    1802           0 :                     const int nLft = aTabCols.GetLeftMin() + aTabCols.GetLeft();
    1803           0 :                     const int nRgt = nPageWidth -(aTabCols.GetLeftMin() + aTabCols.GetRight());
    1804             : 
    1805           0 :                     const sal_uInt16 nL = static_cast< sal_uInt16 >(nLft > 0 ? nLft : 0);
    1806           0 :                     const sal_uInt16 nR = static_cast< sal_uInt16 >(nRgt > 0 ? nRgt : 0);
    1807             : 
    1808           0 :                     aRectangle.Left() = nL;
    1809           0 :                     if(nNum > 1)
    1810           0 :                         aRectangle.Left() += aTabCols[nNum - 2];
    1811           0 :                     if(nNum)
    1812           0 :                         aRectangle.Left() += MINLAY;
    1813           0 :                     if(aTabCols.Count() <= nNum + 1 )
    1814           0 :                         aRectangle.Right() = nR;
    1815             :                     else
    1816           0 :                         aRectangle.Right() = nPageWidth - (nL + aTabCols[nNum + 1]);
    1817             : 
    1818           0 :                     if(nNum < aTabCols.Count())
    1819           0 :                         aRectangle.Right() += MINLAY;
    1820             :                 }
    1821             :                 else
    1822             :                 {
    1823           0 :                     const SwFrameFormat* pFormat =  rSh.GetFlyFrameFormat();
    1824           0 :                     const SwFormatCol* pCols = pFormat ? &pFormat->GetCol():
    1825           0 :                                                    &rDesc.GetMaster().GetCol();
    1826           0 :                     const SwColumns& rCols = pCols->GetColumns();
    1827           0 :                     sal_uInt16 nNum = rSh.GetCurOutColNum();
    1828           0 :                     const sal_uInt16 nCount = std::min(sal_uInt16(nNum + 1), sal_uInt16(rCols.size()));
    1829             :                     const SwRect aRect( rSh.GetAnyCurRect( pFormat
    1830             :                                                     ? RECT_FLY_PRT_EMBEDDED
    1831           0 :                                                     : RECT_PAGE_PRT, pPt ));
    1832             :                     const SwRect aAbsRect( rSh.GetAnyCurRect( pFormat
    1833             :                                                     ? RECT_FLY_EMBEDDED
    1834           0 :                                                     : RECT_PAGE, pPt ));
    1835             : 
    1836             :                     // The width of the frame or within the page margins.
    1837           0 :                     const sal_uInt16 nTotalWidth = (sal_uInt16)aRect.Width();
    1838             :                     // The entire frame width - The difference is twice the distance to the edge.
    1839           0 :                     const sal_uInt16 nOuterWidth = (sal_uInt16)aAbsRect.Width();
    1840           0 :                     int nWidth = 0,
    1841           0 :                         nEnd = 0;
    1842           0 :                     aRectangle.Left() = 0;
    1843           0 :                     for ( sal_uInt16 i = 0; i < nCount; ++i )
    1844             :                     {
    1845           0 :                         const SwColumn* pCol = &rCols[i];
    1846           0 :                         const int nStart = pCol->GetLeft() + nWidth;
    1847           0 :                         if(i == nNum - 2)
    1848           0 :                             aRectangle.Left() = nStart;
    1849           0 :                         nWidth += pCols->CalcColWidth( i, nTotalWidth );
    1850           0 :                         nEnd = nWidth - pCol->GetRight();
    1851             :                     }
    1852           0 :                     aRectangle.Right() = rPageRect.Right() - nEnd;
    1853           0 :                     aRectangle.Left() -= rPageRect.Left();
    1854             : 
    1855           0 :                     if(nNum > 1)
    1856             :                     {
    1857           0 :                         aRectangle.Left() += MINLAY;
    1858           0 :                         aRectangle.Left() += aRect.Left();
    1859             :                     }
    1860           0 :                     if(pFormat) // Range in frame - here you may up to the edge
    1861           0 :                         aRectangle.Left()  = aRectangle.Right() = 0;
    1862             :                     else
    1863             :                     {
    1864             :                         // Move the rectangle to the correct absolute position.
    1865           0 :                         aRectangle.Left() += aAbsRect.Left();
    1866           0 :                         aRectangle.Right() -= aAbsRect.Left();
    1867             :                         // Include distance to the border.
    1868           0 :                         aRectangle.Right() -= (nOuterWidth - nTotalWidth) / 2;
    1869             :                     }
    1870             : 
    1871           0 :                     if(nNum < rCols.size())
    1872             :                     {
    1873           0 :                         aRectangle.Right() += MINLAY;
    1874             :                     }
    1875             :                     else
    1876             :                         // Right is only the margin now.
    1877           0 :                         aRectangle.Right() = 0;
    1878             : 
    1879             :                 }
    1880             :             }
    1881         589 :             else if ( ((nFrmType & FrmTypeFlags::TABLE) || IsTabColFromDoc()) &&
    1882           3 :                  !bFrmSelection )
    1883             :             {
    1884             :                 bool bColumn;
    1885           3 :                 if ( IsTabColFromDoc() )
    1886           0 :                     bColumn = rSh.GetCurMouseColNum( m_aTabColFromDocPos ) != 0;
    1887             :                 else
    1888           3 :                     bColumn = bool(nFrmType & (FrmTypeFlags::COLUMN|FrmTypeFlags::FLY_ANY|FrmTypeFlags::COLSECTOUTTAB));
    1889             : 
    1890           3 :                 if ( !bColumn )
    1891             :                 {
    1892           3 :                     if( nFrmType & FrmTypeFlags::FLY_ANY && IsTabColFromDoc() )
    1893             :                     {
    1894             :                         SwRect aRect( rSh.GetAnyCurRect(
    1895           0 :                                             RECT_FLY_PRT_EMBEDDED, pPt ) );
    1896           0 :                         aRect.Pos() += rSh.GetAnyCurRect( RECT_FLY_EMBEDDED,
    1897           0 :                                                                 pPt ).Pos();
    1898             : 
    1899           0 :                         aRectangle.Left()  = aRect.Left() - rPageRect.Left();
    1900           0 :                         aRectangle.Right() = rPageRect.Right() - aRect.Right();
    1901             :                     }
    1902           3 :                     else if( bBrowse )
    1903             :                     {
    1904           0 :                         aRectangle.Left()  = rPagePrtRect.Left();
    1905           0 :                         aRectangle.Right() = nPageWidth - rPagePrtRect.Right();
    1906             :                     }
    1907             :                     else
    1908             :                     {
    1909           3 :                         aRectangle.Left()  = aPageLRSpace.GetLeft();
    1910           3 :                         aRectangle.Right() = aPageLRSpace.GetRight();
    1911             :                     }
    1912             :                 }
    1913             :                 else
    1914             :                 {   // Here only for table in multi-column pages and borders.
    1915           0 :                     bool bSectOutTable = bool(nFrmType & FrmTypeFlags::TABLE);
    1916           0 :                     bool bFrame = bool(nFrmType & FrmTypeFlags::FLY_ANY);
    1917           0 :                     bool bColSct = bool(nFrmType & ( bSectOutTable
    1918             :                                                     ? FrmTypeFlags::COLSECTOUTTAB
    1919           0 :                                                     : FrmTypeFlags::COLSECT )
    1920           0 :                                                 );
    1921             :                     //So you can also drag with the mouse, without being in the table.
    1922           0 :                     CurRectType eRecType = RECT_PAGE_PRT;
    1923           0 :                     size_t nNum = IsTabColFromDoc() ?
    1924           0 :                                 rSh.GetCurMouseColNum( m_aTabColFromDocPos ):
    1925           0 :                                 rSh.GetCurOutColNum();
    1926           0 :                     const SwFrameFormat* pFormat = NULL;
    1927           0 :                     if( bColSct )
    1928             :                     {
    1929             :                         eRecType = bSectOutTable ? RECT_OUTTABSECTION
    1930           0 :                                                : RECT_SECTION;
    1931           0 :                         const SwSection *pSect = rSh.GetAnySection( bSectOutTable, pPt );
    1932             :                         OSL_ENSURE( pSect, "Which section?");
    1933           0 :                         pFormat = pSect->GetFormat();
    1934             :                     }
    1935           0 :                     else if( bFrame )
    1936             :                     {
    1937           0 :                         pFormat = rSh.GetFlyFrameFormat();
    1938           0 :                         eRecType = RECT_FLY_PRT_EMBEDDED;
    1939             :                     }
    1940             : 
    1941           0 :                     const SwFormatCol* pCols = pFormat ? &pFormat->GetCol():
    1942           0 :                                                    &rDesc.GetMaster().GetCol();
    1943           0 :                     const SwColumns& rCols = pCols->GetColumns();
    1944           0 :                     const sal_uInt16 nBorder = pFormat ? pFormat->GetBox().GetDistance() :
    1945           0 :                                                   rDesc.GetMaster().GetBox().GetDistance();
    1946             : 
    1947             :                     // RECT_FLY_PRT_EMBEDDED returns the relative position to RECT_FLY_EMBEDDED
    1948             :                     // the absolute position must be added here
    1949             : 
    1950           0 :                     SwRect aRect( rSh.GetAnyCurRect( eRecType, pPt ) );
    1951           0 :                     if(RECT_FLY_PRT_EMBEDDED == eRecType)
    1952           0 :                         aRect.Pos() += rSh.GetAnyCurRect( RECT_FLY_EMBEDDED,
    1953           0 :                                                                 pPt ).Pos();
    1954             : 
    1955           0 :                     const sal_uInt16 nTotalWidth = (sal_uInt16)aRect.Width();
    1956             :                     // Initialize nStart and nEnd initialisieren for nNum == 0
    1957           0 :                     int nWidth = 0,
    1958           0 :                         nStart = 0,
    1959           0 :                         nEnd = nTotalWidth;
    1960             : 
    1961           0 :                     if( nNum > rCols.size() )
    1962             :                     {
    1963             :                         OSL_ENSURE( false, "wrong FormatCol is being edited!" );
    1964           0 :                         nNum = rCols.size();
    1965             :                     }
    1966             : 
    1967           0 :                     for( size_t i = 0; i < nNum; ++i )
    1968             :                     {
    1969           0 :                         const SwColumn* pCol = &rCols[i];
    1970           0 :                         nStart = pCol->GetLeft() + nWidth;
    1971           0 :                         nWidth += pCols->CalcColWidth( static_cast<sal_uInt16>(i), nTotalWidth );
    1972           0 :                         nEnd = nWidth - pCol->GetRight();
    1973             :                     }
    1974           0 :                     if( bFrame || bColSct )
    1975             :                     {
    1976           0 :                         aRectangle.Left()  = aRect.Left() - rPageRect.Left() + nStart;
    1977           0 :                         aRectangle.Right() = nPageWidth - aRectangle.Left() - nEnd + nStart;
    1978             :                     }
    1979           0 :                     else if(!bBrowse)
    1980             :                     {
    1981           0 :                         aRectangle.Left()  = aPageLRSpace.GetLeft() + nStart;
    1982           0 :                         aRectangle.Right() = nPageWidth - nEnd - aPageLRSpace.GetLeft();
    1983             :                     }
    1984             :                     else
    1985             :                     {
    1986           0 :                         long nLeft = rPagePrtRect.Left();
    1987           0 :                         aRectangle.Left()  = nStart + nLeft;
    1988           0 :                         aRectangle.Right() = nPageWidth - nEnd - nLeft;
    1989             :                     }
    1990           0 :                     if(!bFrame)
    1991             :                     {
    1992           0 :                         aRectangle.Left() += nBorder;
    1993           0 :                         aRectangle.Right() -= nBorder;
    1994             :                     }
    1995             :                 }
    1996             :             }
    1997         583 :             else if ( nFrmType & ( FrmTypeFlags::HEADER  | FrmTypeFlags::FOOTER ))
    1998             :             {
    1999           0 :                 aRectangle.Left()  = aPageLRSpace.GetLeft();
    2000           0 :                 aRectangle.Right() = aPageLRSpace.GetRight();
    2001             :             }
    2002             :             else
    2003         583 :                 aRectangle.Left()  = aRectangle.Right() = 0;
    2004             : 
    2005         586 :             SfxRectangleItem aLR( SID_RULER_LR_MIN_MAX , aRectangle);
    2006         586 :             rSet.Put(aLR);
    2007             :         }
    2008         586 :         break;
    2009             : 
    2010             :         case SID_RULER_PROTECT:
    2011             :         {
    2012         580 :             if(bFrmSelection)
    2013             :             {
    2014           0 :                 FlyProtectFlags nProtect = m_pWrtShell->IsSelObjProtected( FlyProtectFlags::Size|FlyProtectFlags::Pos|FlyProtectFlags::Content );
    2015             : 
    2016           0 :                 SvxProtectItem aProt(SID_RULER_PROTECT);
    2017           0 :                 aProt.SetContentProtect(bool(nProtect & FlyProtectFlags::Content));
    2018           0 :                 aProt.SetSizeProtect   (bool(nProtect & FlyProtectFlags::Size));
    2019           0 :                 aProt.SetPosProtect    (bool(nProtect & FlyProtectFlags::Pos));
    2020           0 :                 rSet.Put(aProt);
    2021             :             }
    2022             :             else
    2023             :             {
    2024         580 :                 SvxProtectItem aProtect(SID_RULER_PROTECT);
    2025         580 :                 if(bBrowse && !(nFrmType & (FrmTypeFlags::DRAWOBJ|FrmTypeFlags::COLUMN)) && !rSh.GetTableFormat())
    2026             :                 {
    2027           1 :                     aProtect.SetSizeProtect(true);
    2028           1 :                     aProtect.SetPosProtect(true);
    2029             :                 }
    2030         580 :                 rSet.Put(aProtect);
    2031             :             }
    2032             :         }
    2033         580 :         break;
    2034             :         }
    2035       13094 :         nWhich = aIter.NextWhich();
    2036             :     }
    2037        2609 :     if(bPutContentProtection)
    2038             :     {
    2039           0 :         SvxProtectItem aProtect(SID_RULER_PROTECT);
    2040           0 :         aProtect.SetContentProtect(true);
    2041           0 :         rSet.Put(aProtect);
    2042        2609 :     }
    2043        2786 : }
    2044             : 
    2045             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11