1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_sw.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir 32*cdf0e10cSrcweir #include <tools/list.hxx> 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir #include <hintids.hxx> 35*cdf0e10cSrcweir #include "uitool.hxx" 36*cdf0e10cSrcweir #include <sfx2/app.hxx> 37*cdf0e10cSrcweir #include <svx/rulritem.hxx> 38*cdf0e10cSrcweir #include <editeng/tstpitem.hxx> 39*cdf0e10cSrcweir #include <sfx2/request.hxx> 40*cdf0e10cSrcweir #include <editeng/lrspitem.hxx> 41*cdf0e10cSrcweir #include <editeng/ulspitem.hxx> 42*cdf0e10cSrcweir #include <editeng/boxitem.hxx> 43*cdf0e10cSrcweir #include <editeng/frmdiritem.hxx> 44*cdf0e10cSrcweir #include <svl/eitem.hxx> 45*cdf0e10cSrcweir #include <svl/whiter.hxx> 46*cdf0e10cSrcweir #include <svx/ruler.hxx> 47*cdf0e10cSrcweir #include <editeng/protitem.hxx> 48*cdf0e10cSrcweir #include <svl/rectitem.hxx> 49*cdf0e10cSrcweir #include <sfx2/bindings.hxx> 50*cdf0e10cSrcweir #include <fmtfsize.hxx> 51*cdf0e10cSrcweir #include <fmthdft.hxx> 52*cdf0e10cSrcweir #include <fmtclds.hxx> 53*cdf0e10cSrcweir #include <fmtornt.hxx> 54*cdf0e10cSrcweir #include <frmatr.hxx> 55*cdf0e10cSrcweir #include <edtwin.hxx> 56*cdf0e10cSrcweir #include "view.hxx" 57*cdf0e10cSrcweir #include "wrtsh.hxx" 58*cdf0e10cSrcweir #include "basesh.hxx" 59*cdf0e10cSrcweir #include "cmdid.h" 60*cdf0e10cSrcweir #include "viewopt.hxx" 61*cdf0e10cSrcweir #include "tabcol.hxx" 62*cdf0e10cSrcweir #include "frmfmt.hxx" // FrameFormat 63*cdf0e10cSrcweir #include "pagedesc.hxx" // Aktuelles Seitenformat 64*cdf0e10cSrcweir #include "wview.hxx" 65*cdf0e10cSrcweir #include "fmtcol.hxx" 66*cdf0e10cSrcweir #include "section.hxx" 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir // -> #i23726# 69*cdf0e10cSrcweir #include "ndtxt.hxx" 70*cdf0e10cSrcweir #include "pam.hxx" 71*cdf0e10cSrcweir // <- #i23726# 72*cdf0e10cSrcweir 73*cdf0e10cSrcweir #include <IDocumentSettingAccess.hxx> 74*cdf0e10cSrcweir 75*cdf0e10cSrcweir using namespace ::com::sun::star; 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir 78*cdf0e10cSrcweir /*-------------------------------------------------------------------- 79*cdf0e10cSrcweir Beschreibung: Debug-Methode 80*cdf0e10cSrcweir --------------------------------------------------------------------*/ 81*cdf0e10cSrcweir 82*cdf0e10cSrcweir 83*cdf0e10cSrcweir /*-------------------------------------------------------------------- 84*cdf0e10cSrcweir Beschreibung: Columns eintueten 85*cdf0e10cSrcweir --------------------------------------------------------------------*/ 86*cdf0e10cSrcweir 87*cdf0e10cSrcweir 88*cdf0e10cSrcweir void lcl_FillSvxColumn(const SwFmtCol& rCol, 89*cdf0e10cSrcweir sal_uInt16 nTotalWidth, 90*cdf0e10cSrcweir SvxColumnItem& rColItem, 91*cdf0e10cSrcweir long nDistance) 92*cdf0e10cSrcweir { 93*cdf0e10cSrcweir const SwColumns& rCols = rCol.GetColumns(); 94*cdf0e10cSrcweir sal_uInt16 nWidth = 0; 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir sal_Bool bOrtho = rCol.IsOrtho() && rCols.Count(); 97*cdf0e10cSrcweir long nInnerWidth = 0; 98*cdf0e10cSrcweir if( bOrtho ) 99*cdf0e10cSrcweir { 100*cdf0e10cSrcweir nInnerWidth = nTotalWidth; 101*cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < rCols.Count(); ++i ) 102*cdf0e10cSrcweir { 103*cdf0e10cSrcweir SwColumn* pCol = rCols[i]; 104*cdf0e10cSrcweir nInnerWidth -= pCol->GetLeft() + pCol->GetRight(); 105*cdf0e10cSrcweir } 106*cdf0e10cSrcweir if( nInnerWidth < 0 ) 107*cdf0e10cSrcweir nInnerWidth = 0; 108*cdf0e10cSrcweir else 109*cdf0e10cSrcweir nInnerWidth /= rCols.Count(); 110*cdf0e10cSrcweir } 111*cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < rCols.Count(); ++i ) 112*cdf0e10cSrcweir { 113*cdf0e10cSrcweir SwColumn* pCol = rCols[i]; 114*cdf0e10cSrcweir const sal_uInt16 nStart = sal_uInt16(pCol->GetLeft() + nWidth + nDistance); 115*cdf0e10cSrcweir if( bOrtho ) 116*cdf0e10cSrcweir nWidth = static_cast< sal_uInt16 >(nWidth + nInnerWidth + pCol->GetLeft() + pCol->GetRight()); 117*cdf0e10cSrcweir else 118*cdf0e10cSrcweir nWidth = static_cast< sal_uInt16 >(nWidth + rCol.CalcColWidth(i, nTotalWidth)); 119*cdf0e10cSrcweir const sal_uInt16 nEnd = sal_uInt16(nWidth - pCol->GetRight() + nDistance); 120*cdf0e10cSrcweir 121*cdf0e10cSrcweir SvxColumnDescription aColDesc(nStart, nEnd, sal_True); 122*cdf0e10cSrcweir rColItem.Append(aColDesc); 123*cdf0e10cSrcweir } 124*cdf0e10cSrcweir } 125*cdf0e10cSrcweir 126*cdf0e10cSrcweir /*-------------------------------------------------------------------- 127*cdf0e10cSrcweir Beschreibung: ColumnItem in ColumnInfo ueberfuehren 128*cdf0e10cSrcweir --------------------------------------------------------------------*/ 129*cdf0e10cSrcweir 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir void lcl_ConvertToCols(const SvxColumnItem& rColItem, 132*cdf0e10cSrcweir sal_uInt16 nTotalWidth, 133*cdf0e10cSrcweir SwFmtCol& rCols) 134*cdf0e10cSrcweir { 135*cdf0e10cSrcweir ASSERT( rCols.GetNumCols() == rColItem.Count(), "Column count mismatch" ); 136*cdf0e10cSrcweir // #126939# ruler executes that change the columns shortly after the selection has changed 137*cdf0e10cSrcweir // can result in a crash 138*cdf0e10cSrcweir if(rCols.GetNumCols() != rColItem.Count()) 139*cdf0e10cSrcweir return; 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir sal_uInt16 nLeft = 0; 142*cdf0e10cSrcweir SwTwips nSumAll= 0; // Summiere alle Spalten und Raender auf 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir SwColumns& rArr = rCols.GetColumns(); 145*cdf0e10cSrcweir 146*cdf0e10cSrcweir // Tabcols der Reihe nach 147*cdf0e10cSrcweir for( sal_uInt16 i=0; i < rColItem.Count()-1; ++i ) 148*cdf0e10cSrcweir { 149*cdf0e10cSrcweir DBG_ASSERT(rColItem[i+1].nStart >= rColItem[i].nEnd,"\201berlappende Spalten" ); 150*cdf0e10cSrcweir sal_uInt16 nStart = static_cast< sal_uInt16 >(rColItem[i+1].nStart); 151*cdf0e10cSrcweir sal_uInt16 nEnd = static_cast< sal_uInt16 >(rColItem[i].nEnd); 152*cdf0e10cSrcweir if(nStart < nEnd) 153*cdf0e10cSrcweir nStart = nEnd; 154*cdf0e10cSrcweir const sal_uInt16 nDiff = nStart - nEnd; 155*cdf0e10cSrcweir const sal_uInt16 nRight = nDiff / 2; 156*cdf0e10cSrcweir 157*cdf0e10cSrcweir sal_uInt16 nWidth = static_cast< sal_uInt16 >(rColItem[i].nEnd - rColItem[i].nStart); 158*cdf0e10cSrcweir nWidth += nLeft + nRight; 159*cdf0e10cSrcweir 160*cdf0e10cSrcweir SwColumn* pCol = rArr[i]; 161*cdf0e10cSrcweir pCol->SetWishWidth( sal_uInt16(long(rCols.GetWishWidth()) * long(nWidth) / 162*cdf0e10cSrcweir long(nTotalWidth) )); 163*cdf0e10cSrcweir pCol->SetLeft( nLeft ); 164*cdf0e10cSrcweir pCol->SetRight( nRight ); 165*cdf0e10cSrcweir nSumAll += pCol->GetWishWidth(); 166*cdf0e10cSrcweir 167*cdf0e10cSrcweir nLeft = nRight; 168*cdf0e10cSrcweir } 169*cdf0e10cSrcweir rArr[rColItem.Count()-1]->SetLeft( nLeft ); 170*cdf0e10cSrcweir 171*cdf0e10cSrcweir //Die Differenz aus der Gesamtwunschbreite und der Summe der bisher berechneten 172*cdf0e10cSrcweir // Spalten und Raender sollte die Breite der letzten Spalte ergeben. 173*cdf0e10cSrcweir rArr[rColItem.Count()-1]->SetWishWidth( rCols.GetWishWidth() - (sal_uInt16)nSumAll ); 174*cdf0e10cSrcweir 175*cdf0e10cSrcweir rCols.SetOrtho(sal_False, 0, 0 ); 176*cdf0e10cSrcweir } 177*cdf0e10cSrcweir 178*cdf0e10cSrcweir /*-------------------------------------------------------------------- 179*cdf0e10cSrcweir Beschreibung: Tabs loeschen 180*cdf0e10cSrcweir --------------------------------------------------------------------*/ 181*cdf0e10cSrcweir 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir void lcl_EraseDefTabs(SvxTabStopItem& rTabStops) 184*cdf0e10cSrcweir { 185*cdf0e10cSrcweir // Def Tabs loeschen 186*cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < rTabStops.Count(); ) 187*cdf0e10cSrcweir { 188*cdf0e10cSrcweir // Hier auch den DefTab auf Null rausschmeissen 189*cdf0e10cSrcweir if ( SVX_TAB_ADJUST_DEFAULT == rTabStops[i].GetAdjustment() || 190*cdf0e10cSrcweir rTabStops[i].GetTabPos() == 0 ) 191*cdf0e10cSrcweir { 192*cdf0e10cSrcweir rTabStops.Remove(i); 193*cdf0e10cSrcweir continue; 194*cdf0e10cSrcweir } 195*cdf0e10cSrcweir ++i; 196*cdf0e10cSrcweir } 197*cdf0e10cSrcweir } 198*cdf0e10cSrcweir 199*cdf0e10cSrcweir /*-------------------------------------------------------------------- 200*cdf0e10cSrcweir Beschreibung: Seitenrand umdrehen 201*cdf0e10cSrcweir --------------------------------------------------------------------*/ 202*cdf0e10cSrcweir 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir void SwView::SwapPageMargin(const SwPageDesc& rDesc, SvxLRSpaceItem& rLRSpace) 205*cdf0e10cSrcweir { 206*cdf0e10cSrcweir sal_uInt16 nPhyPage, nVirPage; 207*cdf0e10cSrcweir GetWrtShell().GetPageNum( nPhyPage, nVirPage ); 208*cdf0e10cSrcweir 209*cdf0e10cSrcweir if ( rDesc.GetUseOn() == nsUseOnPage::PD_MIRROR && (nPhyPage % 2) == 0 ) 210*cdf0e10cSrcweir { 211*cdf0e10cSrcweir long nTmp = rLRSpace.GetRight(); 212*cdf0e10cSrcweir rLRSpace.SetRight( rLRSpace.GetLeft() ); 213*cdf0e10cSrcweir rLRSpace.SetLeft( nTmp ); 214*cdf0e10cSrcweir } 215*cdf0e10cSrcweir } 216*cdf0e10cSrcweir 217*cdf0e10cSrcweir /*-------------------------------------------------------------------- 218*cdf0e10cSrcweir Beschreibung: Wenn der Rahmenrand verschoben wird, sollen die 219*cdf0e10cSrcweir Spaltentrenner an der gleichen absoluten Position bleiben 220*cdf0e10cSrcweir --------------------------------------------------------------------*/ 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir 223*cdf0e10cSrcweir void lcl_Scale(long& nVal, long nScale) 224*cdf0e10cSrcweir { 225*cdf0e10cSrcweir nVal *= nScale; 226*cdf0e10cSrcweir nVal >>= 8; 227*cdf0e10cSrcweir } 228*cdf0e10cSrcweir 229*cdf0e10cSrcweir void ResizeFrameCols(SwFmtCol& rCol, 230*cdf0e10cSrcweir long nOldWidth, 231*cdf0e10cSrcweir long nNewWidth, 232*cdf0e10cSrcweir long nLeftDelta ) 233*cdf0e10cSrcweir { 234*cdf0e10cSrcweir SwColumns& rArr = rCol.GetColumns(); 235*cdf0e10cSrcweir long nWishSum = (long)rCol.GetWishWidth(); 236*cdf0e10cSrcweir long nWishDiff = (nWishSum * 100/nOldWidth * nNewWidth) / 100 - nWishSum; 237*cdf0e10cSrcweir long nNewWishWidth = nWishSum + nWishDiff; 238*cdf0e10cSrcweir if(nNewWishWidth > 0xffffl) 239*cdf0e10cSrcweir { 240*cdf0e10cSrcweir // wenn die Wunschbreite zu gross wird, dann muessen alle Werte passend skaliert werden 241*cdf0e10cSrcweir long nScale = (0xffffl << 8)/ nNewWishWidth; 242*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < rArr.Count(); i++) 243*cdf0e10cSrcweir { 244*cdf0e10cSrcweir SwColumn* pCol = rArr.GetObject(i); 245*cdf0e10cSrcweir long nVal = pCol->GetWishWidth(); 246*cdf0e10cSrcweir lcl_Scale(nVal, nScale); 247*cdf0e10cSrcweir pCol->SetWishWidth((sal_uInt16) nVal); 248*cdf0e10cSrcweir nVal = pCol->GetLeft(); 249*cdf0e10cSrcweir lcl_Scale(nVal, nScale); 250*cdf0e10cSrcweir pCol->SetLeft((sal_uInt16) nVal); 251*cdf0e10cSrcweir nVal = pCol->GetRight(); 252*cdf0e10cSrcweir lcl_Scale(nVal, nScale); 253*cdf0e10cSrcweir pCol->SetRight((sal_uInt16) nVal); 254*cdf0e10cSrcweir } 255*cdf0e10cSrcweir lcl_Scale(nNewWishWidth, nScale); 256*cdf0e10cSrcweir lcl_Scale(nWishDiff, nScale); 257*cdf0e10cSrcweir } 258*cdf0e10cSrcweir rCol.SetWishWidth( (sal_uInt16) (nNewWishWidth) ); 259*cdf0e10cSrcweir 260*cdf0e10cSrcweir if( nLeftDelta >= 2 || nLeftDelta <= -2) 261*cdf0e10cSrcweir rArr[0]->SetWishWidth(rArr[0]->GetWishWidth() + (sal_uInt16)nWishDiff); 262*cdf0e10cSrcweir else 263*cdf0e10cSrcweir rArr[rArr.Count()-1]->SetWishWidth(rArr[rArr.Count()-1]->GetWishWidth() + (sal_uInt16)nWishDiff); 264*cdf0e10cSrcweir //reset auto width 265*cdf0e10cSrcweir rCol.SetOrtho(sal_False, 0, 0 ); 266*cdf0e10cSrcweir } 267*cdf0e10cSrcweir /*-------------------------------------------------------------------- 268*cdf0e10cSrcweir Beschreibung: Hier werden alle Aenderungen der Tableiste 269*cdf0e10cSrcweir wieder in das Modell geschossen 270*cdf0e10cSrcweir --------------------------------------------------------------------*/ 271*cdf0e10cSrcweir 272*cdf0e10cSrcweir 273*cdf0e10cSrcweir void SwView::ExecTabWin( SfxRequest& rReq ) 274*cdf0e10cSrcweir { 275*cdf0e10cSrcweir SwWrtShell &rSh = GetWrtShell(); 276*cdf0e10cSrcweir const sal_uInt16 nFrmType = rSh.IsObjSelected() ? 277*cdf0e10cSrcweir FRMTYPE_DRAWOBJ : 278*cdf0e10cSrcweir rSh.GetFrmType(0,sal_True); 279*cdf0e10cSrcweir const sal_Bool bFrmSelection = rSh.IsFrmSelected(); 280*cdf0e10cSrcweir const sal_Bool bBrowse = rSh.GetViewOptions()->getBrowseMode(); 281*cdf0e10cSrcweir 282*cdf0e10cSrcweir const sal_uInt16 nSlot = rReq.GetSlot(); 283*cdf0e10cSrcweir const sal_uInt16 nDescId = rSh.GetCurPageDesc(); 284*cdf0e10cSrcweir const SwPageDesc& rDesc = rSh.GetPageDesc( nDescId ); 285*cdf0e10cSrcweir 286*cdf0e10cSrcweir const sal_Bool bVerticalWriting = rSh.IsInVerticalText(); 287*cdf0e10cSrcweir const SwFmtHeader& rHeaderFmt = rDesc.GetMaster().GetHeader(); 288*cdf0e10cSrcweir SwFrmFmt *pHeaderFmt = (SwFrmFmt*)rHeaderFmt.GetHeaderFmt(); 289*cdf0e10cSrcweir 290*cdf0e10cSrcweir const SwFmtFooter& rFooterFmt = rDesc.GetMaster().GetFooter(); 291*cdf0e10cSrcweir SwFrmFmt *pFooterFmt = (SwFrmFmt*)rFooterFmt.GetFooterFmt(); 292*cdf0e10cSrcweir 293*cdf0e10cSrcweir const SwFmtFrmSize &rFrmSize = rDesc.GetMaster().GetFrmSize(); 294*cdf0e10cSrcweir 295*cdf0e10cSrcweir const SwRect& rPageRect = rSh.GetAnyCurRect(RECT_PAGE); 296*cdf0e10cSrcweir const long nPageWidth = bBrowse ? rPageRect.Width() : rFrmSize.GetWidth(); 297*cdf0e10cSrcweir const long nPageHeight = bBrowse ? rPageRect.Height() : rFrmSize.GetHeight(); 298*cdf0e10cSrcweir 299*cdf0e10cSrcweir sal_Bool bUnlockView = sal_False; 300*cdf0e10cSrcweir rSh.StartAllAction(); 301*cdf0e10cSrcweir sal_Bool bSect = 0 != (nFrmType & FRMTYPE_COLSECT); 302*cdf0e10cSrcweir 303*cdf0e10cSrcweir switch ( nSlot ) 304*cdf0e10cSrcweir { 305*cdf0e10cSrcweir case SID_ATTR_LONG_LRSPACE: 306*cdf0e10cSrcweir { 307*cdf0e10cSrcweir SvxLongLRSpaceItem aLongLR( (const SvxLongLRSpaceItem&)rReq.GetArgs()-> 308*cdf0e10cSrcweir Get( SID_ATTR_LONG_LRSPACE ) ); 309*cdf0e10cSrcweir SvxLRSpaceItem aLR(RES_LR_SPACE); 310*cdf0e10cSrcweir if ( !bSect && (bFrmSelection || nFrmType & FRMTYPE_FLY_ANY) ) 311*cdf0e10cSrcweir { 312*cdf0e10cSrcweir SwFrmFmt* pFmt = ((SwFrmFmt*)rSh.GetFlyFrmFmt()); 313*cdf0e10cSrcweir const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED); 314*cdf0e10cSrcweir 315*cdf0e10cSrcweir sal_Bool bVerticalFrame(sal_False); 316*cdf0e10cSrcweir { 317*cdf0e10cSrcweir sal_Bool bRTL; 318*cdf0e10cSrcweir sal_Bool bVertL2R; 319*cdf0e10cSrcweir bVerticalFrame = ( bFrmSelection && 320*cdf0e10cSrcweir rSh.IsFrmVertical(sal_True, bRTL, bVertL2R) ) || 321*cdf0e10cSrcweir ( !bFrmSelection && bVerticalWriting); 322*cdf0e10cSrcweir } 323*cdf0e10cSrcweir long nDeltaX = bVerticalFrame ? 324*cdf0e10cSrcweir rRect.Right() - rPageRect.Right() + aLongLR.GetRight() : 325*cdf0e10cSrcweir rPageRect.Left() + aLongLR.GetLeft() - rRect.Left(); 326*cdf0e10cSrcweir 327*cdf0e10cSrcweir SfxItemSet aSet( GetPool(), RES_FRM_SIZE, RES_FRM_SIZE, 328*cdf0e10cSrcweir RES_VERT_ORIENT, RES_HORI_ORIENT, 329*cdf0e10cSrcweir RES_COL, RES_COL, 0 ); 330*cdf0e10cSrcweir 331*cdf0e10cSrcweir if(bVerticalFrame) 332*cdf0e10cSrcweir { 333*cdf0e10cSrcweir SwFmtVertOrient aVertOrient(pFmt->GetVertOrient()); 334*cdf0e10cSrcweir aVertOrient.SetVertOrient(text::VertOrientation::NONE); 335*cdf0e10cSrcweir aVertOrient.SetPos(aVertOrient.GetPos() + nDeltaX ); 336*cdf0e10cSrcweir aSet.Put( aVertOrient ); 337*cdf0e10cSrcweir } 338*cdf0e10cSrcweir else 339*cdf0e10cSrcweir { 340*cdf0e10cSrcweir SwFmtHoriOrient aHoriOrient( pFmt->GetHoriOrient() ); 341*cdf0e10cSrcweir aHoriOrient.SetHoriOrient( text::HoriOrientation::NONE ); 342*cdf0e10cSrcweir aHoriOrient.SetPos( aHoriOrient.GetPos() + nDeltaX ); 343*cdf0e10cSrcweir aSet.Put( aHoriOrient ); 344*cdf0e10cSrcweir } 345*cdf0e10cSrcweir 346*cdf0e10cSrcweir SwFmtFrmSize aSize( pFmt->GetFrmSize() ); 347*cdf0e10cSrcweir long nOldWidth = (long) aSize.GetWidth(); 348*cdf0e10cSrcweir 349*cdf0e10cSrcweir if(aSize.GetWidthPercent()) 350*cdf0e10cSrcweir { 351*cdf0e10cSrcweir SwRect aRect; 352*cdf0e10cSrcweir rSh.CalcBoundRect(aRect, FLY_AS_CHAR); 353*cdf0e10cSrcweir long nPrtWidth = aRect.Width(); 354*cdf0e10cSrcweir aSize.SetWidthPercent(sal_uInt8((nPageWidth - aLongLR.GetLeft() - aLongLR.GetRight()) * 100 /nPrtWidth)); 355*cdf0e10cSrcweir } 356*cdf0e10cSrcweir else 357*cdf0e10cSrcweir aSize.SetWidth( nPageWidth - 358*cdf0e10cSrcweir (aLongLR.GetLeft() + aLongLR.GetRight())); 359*cdf0e10cSrcweir 360*cdf0e10cSrcweir if( nFrmType & FRMTYPE_COLUMN ) 361*cdf0e10cSrcweir { 362*cdf0e10cSrcweir SwFmtCol aCol(pFmt->GetCol()); 363*cdf0e10cSrcweir 364*cdf0e10cSrcweir ::ResizeFrameCols(aCol, nOldWidth, (long)aSize.GetWidth(), nDeltaX ); 365*cdf0e10cSrcweir aSet.Put(aCol); 366*cdf0e10cSrcweir } 367*cdf0e10cSrcweir 368*cdf0e10cSrcweir aSet.Put( aSize ); 369*cdf0e10cSrcweir 370*cdf0e10cSrcweir rSh.StartAction(); 371*cdf0e10cSrcweir rSh.Push(); 372*cdf0e10cSrcweir rSh.SetFlyFrmAttr( aSet ); 373*cdf0e10cSrcweir //die Rahmenselektion wieder aufheben 374*cdf0e10cSrcweir if(!bFrmSelection && rSh.IsFrmSelected()) 375*cdf0e10cSrcweir { 376*cdf0e10cSrcweir rSh.UnSelectFrm(); 377*cdf0e10cSrcweir rSh.LeaveSelFrmMode(); 378*cdf0e10cSrcweir } 379*cdf0e10cSrcweir rSh.Pop(); 380*cdf0e10cSrcweir rSh.EndAction(); 381*cdf0e10cSrcweir } 382*cdf0e10cSrcweir else if ( nFrmType & ( FRMTYPE_HEADER | FRMTYPE_FOOTER )) 383*cdf0e10cSrcweir { 384*cdf0e10cSrcweir // Seitenraender rausrechnen 385*cdf0e10cSrcweir long nOld = rDesc.GetMaster().GetLRSpace().GetLeft(); 386*cdf0e10cSrcweir aLongLR.SetLeft( nOld > aLongLR.GetLeft() ? 0 : aLongLR.GetLeft() - nOld ); 387*cdf0e10cSrcweir 388*cdf0e10cSrcweir nOld = rDesc.GetMaster().GetLRSpace().GetRight(); 389*cdf0e10cSrcweir aLongLR.SetRight( nOld > (sal_uInt16)aLongLR.GetRight() ? 0 : aLongLR.GetRight() - nOld ); 390*cdf0e10cSrcweir aLR.SetLeft((sal_uInt16)aLongLR.GetLeft()); 391*cdf0e10cSrcweir aLR.SetRight((sal_uInt16)aLongLR.GetRight()); 392*cdf0e10cSrcweir 393*cdf0e10cSrcweir if ( nFrmType & FRMTYPE_HEADER && pHeaderFmt ) 394*cdf0e10cSrcweir pHeaderFmt->SetFmtAttr( aLR ); 395*cdf0e10cSrcweir else if( nFrmType & FRMTYPE_FOOTER && pFooterFmt ) 396*cdf0e10cSrcweir pFooterFmt->SetFmtAttr( aLR ); 397*cdf0e10cSrcweir } 398*cdf0e10cSrcweir else if( nFrmType == FRMTYPE_DRAWOBJ) 399*cdf0e10cSrcweir { 400*cdf0e10cSrcweir SwRect aRect( rSh.GetObjRect() ); 401*cdf0e10cSrcweir aRect.Left( aLongLR.GetLeft() + rPageRect.Left() ); 402*cdf0e10cSrcweir aRect.Right( rPageRect.Right() - aLongLR.GetRight()); 403*cdf0e10cSrcweir rSh.SetObjRect( aRect ); 404*cdf0e10cSrcweir } 405*cdf0e10cSrcweir else if(bSect || rSh.IsDirectlyInSection()) 406*cdf0e10cSrcweir { 407*cdf0e10cSrcweir //change the section indents and the columns if available 408*cdf0e10cSrcweir //at first determine the changes 409*cdf0e10cSrcweir SwRect aSectRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, 0); 410*cdf0e10cSrcweir const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, 0); 411*cdf0e10cSrcweir aSectRect.Pos() += aTmpRect.Pos(); 412*cdf0e10cSrcweir long nLeftDiff = aLongLR.GetLeft() - (long)(aSectRect.Left() - rPageRect.Left() ); 413*cdf0e10cSrcweir long nRightDiff = aLongLR.GetRight() - (long)( rPageRect.Right() - aSectRect.Right()); 414*cdf0e10cSrcweir //change the LRSpaceItem of the section accordingly 415*cdf0e10cSrcweir const SwSection* pCurrSect = rSh.GetCurrSection(); 416*cdf0e10cSrcweir const SwSectionFmt* pSectFmt = pCurrSect->GetFmt(); 417*cdf0e10cSrcweir SvxLRSpaceItem aLRTmp = pSectFmt->GetLRSpace(); 418*cdf0e10cSrcweir aLRTmp.SetLeft(aLRTmp.GetLeft() + nLeftDiff); 419*cdf0e10cSrcweir aLRTmp.SetRight(aLRTmp.GetRight() + nRightDiff); 420*cdf0e10cSrcweir SfxItemSet aSet(rSh.GetAttrPool(), RES_LR_SPACE, RES_LR_SPACE, RES_COL, RES_COL, 0L); 421*cdf0e10cSrcweir aSet.Put(aLRTmp); 422*cdf0e10cSrcweir //change the first/last column 423*cdf0e10cSrcweir if(bSect) 424*cdf0e10cSrcweir { 425*cdf0e10cSrcweir SwFmtCol aCols( pSectFmt->GetCol() ); 426*cdf0e10cSrcweir long nDiffWidth = nLeftDiff + nRightDiff; 427*cdf0e10cSrcweir ::ResizeFrameCols(aCols, aSectRect.Width(), aSectRect.Width() - nDiffWidth, nLeftDiff ); 428*cdf0e10cSrcweir aSet.Put( aCols ); 429*cdf0e10cSrcweir } 430*cdf0e10cSrcweir SwSectionData aData(*pCurrSect); 431*cdf0e10cSrcweir rSh.UpdateSection(rSh.GetSectionFmtPos(*pSectFmt), aData, &aSet); 432*cdf0e10cSrcweir } 433*cdf0e10cSrcweir else 434*cdf0e10cSrcweir { // Seitenraender einstellen 435*cdf0e10cSrcweir aLR.SetLeft((sal_uInt16)aLongLR.GetLeft()); 436*cdf0e10cSrcweir aLR.SetRight((sal_uInt16)aLongLR.GetRight()); 437*cdf0e10cSrcweir SwapPageMargin( rDesc, aLR ); 438*cdf0e10cSrcweir SwPageDesc aDesc( rDesc ); 439*cdf0e10cSrcweir aDesc.GetMaster().SetFmtAttr( aLR ); 440*cdf0e10cSrcweir rSh.ChgPageDesc( nDescId, aDesc ); 441*cdf0e10cSrcweir } 442*cdf0e10cSrcweir } 443*cdf0e10cSrcweir break; 444*cdf0e10cSrcweir case SID_ATTR_LONG_ULSPACE: 445*cdf0e10cSrcweir { 446*cdf0e10cSrcweir SvxLongULSpaceItem aLongULSpace( (const SvxLongULSpaceItem&)rReq.GetArgs()-> 447*cdf0e10cSrcweir Get( SID_ATTR_LONG_ULSPACE )); 448*cdf0e10cSrcweir 449*cdf0e10cSrcweir if( bFrmSelection || nFrmType & FRMTYPE_FLY_ANY ) 450*cdf0e10cSrcweir { 451*cdf0e10cSrcweir SwFrmFmt* pFmt = ((SwFrmFmt*)rSh.GetFlyFrmFmt()); 452*cdf0e10cSrcweir const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED); 453*cdf0e10cSrcweir const long nDeltaY = rPageRect.Top() + aLongULSpace.GetUpper() - rRect.Top(); 454*cdf0e10cSrcweir const long nHeight = nPageHeight - (aLongULSpace.GetUpper() + aLongULSpace.GetLower()); 455*cdf0e10cSrcweir 456*cdf0e10cSrcweir SfxItemSet aSet( GetPool(), RES_FRM_SIZE, RES_FRM_SIZE, 457*cdf0e10cSrcweir RES_VERT_ORIENT, RES_HORI_ORIENT, 0 ); 458*cdf0e10cSrcweir //which of the orientation attributes is to be put depends on the frame's environment 459*cdf0e10cSrcweir sal_Bool bRTL; 460*cdf0e10cSrcweir sal_Bool bVertL2R; 461*cdf0e10cSrcweir if ( ( bFrmSelection && 462*cdf0e10cSrcweir rSh.IsFrmVertical(sal_True, bRTL, bVertL2R ) ) || 463*cdf0e10cSrcweir ( !bFrmSelection && bVerticalWriting ) ) 464*cdf0e10cSrcweir { 465*cdf0e10cSrcweir SwFmtHoriOrient aHoriOrient(pFmt->GetHoriOrient()); 466*cdf0e10cSrcweir aHoriOrient.SetHoriOrient(text::HoriOrientation::NONE); 467*cdf0e10cSrcweir aHoriOrient.SetPos(aHoriOrient.GetPos() + nDeltaY ); 468*cdf0e10cSrcweir aSet.Put( aHoriOrient ); 469*cdf0e10cSrcweir } 470*cdf0e10cSrcweir else 471*cdf0e10cSrcweir { 472*cdf0e10cSrcweir SwFmtVertOrient aVertOrient(pFmt->GetVertOrient()); 473*cdf0e10cSrcweir aVertOrient.SetVertOrient(text::VertOrientation::NONE); 474*cdf0e10cSrcweir aVertOrient.SetPos(aVertOrient.GetPos() + nDeltaY ); 475*cdf0e10cSrcweir aSet.Put( aVertOrient ); 476*cdf0e10cSrcweir } 477*cdf0e10cSrcweir SwFmtFrmSize aSize(pFmt->GetFrmSize()); 478*cdf0e10cSrcweir if(aSize.GetHeightPercent()) 479*cdf0e10cSrcweir { 480*cdf0e10cSrcweir SwRect aRect; 481*cdf0e10cSrcweir rSh.CalcBoundRect(aRect, FLY_AS_CHAR); 482*cdf0e10cSrcweir long nPrtHeight = aRect.Height(); 483*cdf0e10cSrcweir aSize.SetHeightPercent(sal_uInt8(nHeight * 100 /nPrtHeight)); 484*cdf0e10cSrcweir } 485*cdf0e10cSrcweir else 486*cdf0e10cSrcweir aSize.SetHeight(nHeight ); 487*cdf0e10cSrcweir 488*cdf0e10cSrcweir aSet.Put( aSize ); 489*cdf0e10cSrcweir rSh.SetFlyFrmAttr( aSet ); 490*cdf0e10cSrcweir } 491*cdf0e10cSrcweir else if( nFrmType == FRMTYPE_DRAWOBJ ) 492*cdf0e10cSrcweir { 493*cdf0e10cSrcweir SwRect aRect( rSh.GetObjRect() ); 494*cdf0e10cSrcweir aRect.Top( aLongULSpace.GetUpper() + rPageRect.Top() ); 495*cdf0e10cSrcweir aRect.Bottom( rPageRect.Bottom() - aLongULSpace.GetLower() ); 496*cdf0e10cSrcweir rSh.SetObjRect( aRect ) ; 497*cdf0e10cSrcweir } 498*cdf0e10cSrcweir else if(bVerticalWriting && (bSect || rSh.IsDirectlyInSection())) 499*cdf0e10cSrcweir { 500*cdf0e10cSrcweir //change the section indents and the columns if available 501*cdf0e10cSrcweir //at first determine the changes 502*cdf0e10cSrcweir SwRect aSectRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, 0); 503*cdf0e10cSrcweir const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, 0); 504*cdf0e10cSrcweir aSectRect.Pos() += aTmpRect.Pos(); 505*cdf0e10cSrcweir const long nLeftDiff = aLongULSpace.GetUpper() - (long)(aSectRect.Top() - rPageRect.Top()); 506*cdf0e10cSrcweir const long nRightDiff = aLongULSpace.GetLower() - (long)(nPageHeight - aSectRect.Bottom() + rPageRect.Top()); 507*cdf0e10cSrcweir //change the LRSpaceItem of the section accordingly 508*cdf0e10cSrcweir const SwSection* pCurrSect = rSh.GetCurrSection(); 509*cdf0e10cSrcweir const SwSectionFmt* pSectFmt = pCurrSect->GetFmt(); 510*cdf0e10cSrcweir SvxLRSpaceItem aLR = pSectFmt->GetLRSpace(); 511*cdf0e10cSrcweir aLR.SetLeft(aLR.GetLeft() + nLeftDiff); 512*cdf0e10cSrcweir aLR.SetRight(aLR.GetRight() + nRightDiff); 513*cdf0e10cSrcweir SfxItemSet aSet(rSh.GetAttrPool(), RES_LR_SPACE, RES_LR_SPACE, RES_COL, RES_COL, 0L); 514*cdf0e10cSrcweir aSet.Put(aLR); 515*cdf0e10cSrcweir //change the first/last column 516*cdf0e10cSrcweir if(bSect) 517*cdf0e10cSrcweir { 518*cdf0e10cSrcweir SwFmtCol aCols( pSectFmt->GetCol() ); 519*cdf0e10cSrcweir long nDiffWidth = nLeftDiff + nRightDiff; 520*cdf0e10cSrcweir ::ResizeFrameCols(aCols, aSectRect.Height(), aSectRect.Height() - nDiffWidth, nLeftDiff ); 521*cdf0e10cSrcweir aSet.Put( aCols ); 522*cdf0e10cSrcweir } 523*cdf0e10cSrcweir SwSectionData aData(*pCurrSect); 524*cdf0e10cSrcweir rSh.UpdateSection(rSh.GetSectionFmtPos(*pSectFmt), aData, &aSet); 525*cdf0e10cSrcweir } 526*cdf0e10cSrcweir else 527*cdf0e10cSrcweir { SwPageDesc aDesc( rDesc ); 528*cdf0e10cSrcweir 529*cdf0e10cSrcweir if ( nFrmType & ( FRMTYPE_HEADER | FRMTYPE_FOOTER )) 530*cdf0e10cSrcweir { 531*cdf0e10cSrcweir 532*cdf0e10cSrcweir const sal_Bool bHead = nFrmType & FRMTYPE_HEADER ? sal_True : sal_False; 533*cdf0e10cSrcweir SvxULSpaceItem aUL( rDesc.GetMaster().GetULSpace() ); 534*cdf0e10cSrcweir if ( bHead ) 535*cdf0e10cSrcweir aUL.SetUpper( (sal_uInt16)aLongULSpace.GetUpper() ); 536*cdf0e10cSrcweir else 537*cdf0e10cSrcweir aUL.SetLower( (sal_uInt16)aLongULSpace.GetLower() ); 538*cdf0e10cSrcweir aDesc.GetMaster().SetFmtAttr( aUL ); 539*cdf0e10cSrcweir 540*cdf0e10cSrcweir if( (bHead && pHeaderFmt) || (!bHead && pFooterFmt) ) 541*cdf0e10cSrcweir { 542*cdf0e10cSrcweir SwFmtFrmSize aSz( bHead ? pHeaderFmt->GetFrmSize() : 543*cdf0e10cSrcweir pFooterFmt->GetFrmSize() ); 544*cdf0e10cSrcweir aSz.SetHeightSizeType( ATT_FIX_SIZE ); 545*cdf0e10cSrcweir aSz.SetHeight(nPageHeight - aLongULSpace.GetLower() - 546*cdf0e10cSrcweir aLongULSpace.GetUpper() ); 547*cdf0e10cSrcweir if ( bHead ) 548*cdf0e10cSrcweir pHeaderFmt->SetFmtAttr( aSz ); 549*cdf0e10cSrcweir else 550*cdf0e10cSrcweir pFooterFmt->SetFmtAttr( aSz ); 551*cdf0e10cSrcweir } 552*cdf0e10cSrcweir } 553*cdf0e10cSrcweir else 554*cdf0e10cSrcweir { 555*cdf0e10cSrcweir SvxULSpaceItem aUL(RES_UL_SPACE); 556*cdf0e10cSrcweir aUL.SetUpper((sal_uInt16)aLongULSpace.GetUpper()); 557*cdf0e10cSrcweir aUL.SetLower((sal_uInt16)aLongULSpace.GetLower()); 558*cdf0e10cSrcweir aDesc.GetMaster().SetFmtAttr(aUL); 559*cdf0e10cSrcweir } 560*cdf0e10cSrcweir 561*cdf0e10cSrcweir rSh.ChgPageDesc( nDescId, aDesc ); 562*cdf0e10cSrcweir } 563*cdf0e10cSrcweir } 564*cdf0e10cSrcweir break; 565*cdf0e10cSrcweir case SID_ATTR_TABSTOP_VERTICAL: 566*cdf0e10cSrcweir case SID_ATTR_TABSTOP: 567*cdf0e10cSrcweir { 568*cdf0e10cSrcweir sal_uInt16 nWhich = GetPool().GetWhich(nSlot); 569*cdf0e10cSrcweir SvxTabStopItem aTabStops( (const SvxTabStopItem&)rReq.GetArgs()-> 570*cdf0e10cSrcweir Get( nWhich )); 571*cdf0e10cSrcweir aTabStops.SetWhich(RES_PARATR_TABSTOP); 572*cdf0e10cSrcweir const SvxTabStopItem& rDefTabs = 573*cdf0e10cSrcweir (const SvxTabStopItem&)rSh.GetDefault(RES_PARATR_TABSTOP); 574*cdf0e10cSrcweir 575*cdf0e10cSrcweir // Default-Tab an Pos 0 576*cdf0e10cSrcweir SfxItemSet aSet( GetPool(), RES_LR_SPACE, RES_LR_SPACE ); 577*cdf0e10cSrcweir rSh.GetCurAttr( aSet ); 578*cdf0e10cSrcweir const SvxLRSpaceItem& rLR = (const SvxLRSpaceItem&)aSet.Get(RES_LR_SPACE); 579*cdf0e10cSrcweir 580*cdf0e10cSrcweir if ( rLR.GetTxtFirstLineOfst() < 0 ) 581*cdf0e10cSrcweir { 582*cdf0e10cSrcweir SvxTabStop aSwTabStop( 0, SVX_TAB_ADJUST_DEFAULT ); 583*cdf0e10cSrcweir aTabStops.Insert( aSwTabStop ); 584*cdf0e10cSrcweir } 585*cdf0e10cSrcweir 586*cdf0e10cSrcweir // auffuellen mit Default-Tabs 587*cdf0e10cSrcweir sal_uInt16 nDef = ::GetTabDist( rDefTabs ); 588*cdf0e10cSrcweir ::MakeDefTabs( nDef, aTabStops ); 589*cdf0e10cSrcweir 590*cdf0e10cSrcweir SwTxtFmtColl* pColl = rSh.GetCurTxtFmtColl(); 591*cdf0e10cSrcweir if( pColl && pColl->IsAutoUpdateFmt() ) 592*cdf0e10cSrcweir { 593*cdf0e10cSrcweir SfxItemSet aTmp(GetPool(), RES_PARATR_TABSTOP, RES_PARATR_TABSTOP); 594*cdf0e10cSrcweir aTmp.Put(aTabStops); 595*cdf0e10cSrcweir rSh.AutoUpdatePara( pColl, aTmp ); 596*cdf0e10cSrcweir } 597*cdf0e10cSrcweir else 598*cdf0e10cSrcweir rSh.SetAttr( aTabStops ); 599*cdf0e10cSrcweir break; 600*cdf0e10cSrcweir } 601*cdf0e10cSrcweir case SID_ATTR_PARA_LRSPACE_VERTICAL: 602*cdf0e10cSrcweir case SID_ATTR_PARA_LRSPACE: 603*cdf0e10cSrcweir { 604*cdf0e10cSrcweir SvxLRSpaceItem aParaMargin((const SvxLRSpaceItem&)rReq. 605*cdf0e10cSrcweir GetArgs()->Get(nSlot)); 606*cdf0e10cSrcweir if(nFrmType & FRMTYPE_FLY_ANY) 607*cdf0e10cSrcweir { 608*cdf0e10cSrcweir sal_Bool bFirstColumn = sal_True; 609*cdf0e10cSrcweir sal_Bool bLastColumn = sal_True; 610*cdf0e10cSrcweir if(nFrmType & FRMTYPE_COLUMN) 611*cdf0e10cSrcweir { 612*cdf0e10cSrcweir sal_uInt16 nCurFrameCol = rSh.GetCurColNum() - 1; 613*cdf0e10cSrcweir bFirstColumn = !nCurFrameCol; 614*cdf0e10cSrcweir const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt(); 615*cdf0e10cSrcweir const SwFmtCol* pCols = &pFmt->GetCol(); 616*cdf0e10cSrcweir const SwColumns& rCols = pCols->GetColumns(); 617*cdf0e10cSrcweir sal_uInt16 nColumnCount = rCols.Count(); 618*cdf0e10cSrcweir bLastColumn = nColumnCount == nCurFrameCol + 1; 619*cdf0e10cSrcweir } 620*cdf0e10cSrcweir } 621*cdf0e10cSrcweir aParaMargin.SetRight( aParaMargin.GetRight() - nRightBorderDistance ); 622*cdf0e10cSrcweir aParaMargin.SetTxtLeft(aParaMargin.GetTxtLeft() - nLeftBorderDistance ); 623*cdf0e10cSrcweir 624*cdf0e10cSrcweir aParaMargin.SetWhich( RES_LR_SPACE ); 625*cdf0e10cSrcweir SwTxtFmtColl* pColl = rSh.GetCurTxtFmtColl(); 626*cdf0e10cSrcweir 627*cdf0e10cSrcweir // #i23726# 628*cdf0e10cSrcweir if (pNumRuleNodeFromDoc) 629*cdf0e10cSrcweir { 630*cdf0e10cSrcweir // --> FME 2005-02-22 #i42922# Mouse move of numbering label 631*cdf0e10cSrcweir // has to consider the left indent of the paragraph 632*cdf0e10cSrcweir SfxItemSet aSet( GetPool(), RES_LR_SPACE, RES_LR_SPACE ); 633*cdf0e10cSrcweir rSh.GetCurAttr( aSet ); 634*cdf0e10cSrcweir const SvxLRSpaceItem& rLR = 635*cdf0e10cSrcweir static_cast<const SvxLRSpaceItem&>(aSet.Get(RES_LR_SPACE)); 636*cdf0e10cSrcweir // <-- 637*cdf0e10cSrcweir 638*cdf0e10cSrcweir SwPosition aPos(*pNumRuleNodeFromDoc); 639*cdf0e10cSrcweir // --> OD 2008-06-09 #i90078# 640*cdf0e10cSrcweir rSh.SetIndent( static_cast< short >(aParaMargin.GetTxtLeft() - rLR.GetTxtLeft()), aPos); 641*cdf0e10cSrcweir // <-- 642*cdf0e10cSrcweir // --> OD 2005-02-18 #i42921# - invalidate state of indent in order 643*cdf0e10cSrcweir // to get a ruler update. 644*cdf0e10cSrcweir aParaMargin.SetWhich( nSlot ); 645*cdf0e10cSrcweir GetViewFrame()->GetBindings().SetState( aParaMargin ); 646*cdf0e10cSrcweir // <-- 647*cdf0e10cSrcweir } 648*cdf0e10cSrcweir else if( pColl && pColl->IsAutoUpdateFmt() ) 649*cdf0e10cSrcweir { 650*cdf0e10cSrcweir SfxItemSet aSet(GetPool(), RES_LR_SPACE, RES_LR_SPACE); 651*cdf0e10cSrcweir aSet.Put(aParaMargin); 652*cdf0e10cSrcweir rSh.AutoUpdatePara( pColl, aSet); 653*cdf0e10cSrcweir } 654*cdf0e10cSrcweir else 655*cdf0e10cSrcweir rSh.SetAttr( aParaMargin ); 656*cdf0e10cSrcweir 657*cdf0e10cSrcweir if ( aParaMargin.GetTxtFirstLineOfst() < 0 ) 658*cdf0e10cSrcweir { 659*cdf0e10cSrcweir SfxItemSet aSet( GetPool(), RES_PARATR_TABSTOP, RES_PARATR_TABSTOP ); 660*cdf0e10cSrcweir 661*cdf0e10cSrcweir rSh.GetCurAttr( aSet ); 662*cdf0e10cSrcweir const SvxTabStopItem& rTabStops = (const SvxTabStopItem&)aSet.Get(RES_PARATR_TABSTOP); 663*cdf0e10cSrcweir 664*cdf0e10cSrcweir // Haben wir einen Tab an Stelle Null 665*cdf0e10cSrcweir sal_uInt16 i; 666*cdf0e10cSrcweir 667*cdf0e10cSrcweir for ( i = 0; i < rTabStops.Count(); ++i ) 668*cdf0e10cSrcweir if ( rTabStops[i].GetTabPos() == 0 ) 669*cdf0e10cSrcweir break; 670*cdf0e10cSrcweir 671*cdf0e10cSrcweir if ( i >= rTabStops.Count() ) 672*cdf0e10cSrcweir { 673*cdf0e10cSrcweir // Kein DefTab 674*cdf0e10cSrcweir SvxTabStopItem aTabStops( RES_PARATR_TABSTOP ); 675*cdf0e10cSrcweir aTabStops = rTabStops; 676*cdf0e10cSrcweir 677*cdf0e10cSrcweir ::lcl_EraseDefTabs(aTabStops); 678*cdf0e10cSrcweir 679*cdf0e10cSrcweir SvxTabStop aSwTabStop( 0, SVX_TAB_ADJUST_DEFAULT ); 680*cdf0e10cSrcweir aTabStops.Insert(aSwTabStop); 681*cdf0e10cSrcweir 682*cdf0e10cSrcweir const SvxTabStopItem& rDefTabs = 683*cdf0e10cSrcweir (const SvxTabStopItem&)rSh.GetDefault(RES_PARATR_TABSTOP); 684*cdf0e10cSrcweir sal_uInt16 nDef = ::GetTabDist(rDefTabs); 685*cdf0e10cSrcweir ::MakeDefTabs( nDef, aTabStops ); 686*cdf0e10cSrcweir 687*cdf0e10cSrcweir if( pColl && pColl->IsAutoUpdateFmt()) 688*cdf0e10cSrcweir { 689*cdf0e10cSrcweir SfxItemSet aSetTmp(GetPool(), RES_PARATR_TABSTOP, RES_PARATR_TABSTOP); 690*cdf0e10cSrcweir aSetTmp.Put(aTabStops); 691*cdf0e10cSrcweir rSh.AutoUpdatePara( pColl, aSetTmp ); 692*cdf0e10cSrcweir } 693*cdf0e10cSrcweir else 694*cdf0e10cSrcweir rSh.SetAttr( aTabStops ); 695*cdf0e10cSrcweir } 696*cdf0e10cSrcweir } 697*cdf0e10cSrcweir } 698*cdf0e10cSrcweir break; 699*cdf0e10cSrcweir case SID_RULER_BORDERS_VERTICAL: 700*cdf0e10cSrcweir case SID_RULER_BORDERS: 701*cdf0e10cSrcweir { 702*cdf0e10cSrcweir SvxColumnItem aColItem((const SvxColumnItem&)rReq. 703*cdf0e10cSrcweir GetArgs()->Get(nSlot)); 704*cdf0e10cSrcweir 705*cdf0e10cSrcweir if( bSetTabColFromDoc || (!bSect && rSh.GetTableFmt()) ) 706*cdf0e10cSrcweir { 707*cdf0e10cSrcweir ASSERT(aColItem.Count(), "ColDesc ist leer!!"); 708*cdf0e10cSrcweir 709*cdf0e10cSrcweir const sal_Bool bSingleLine = ((const SfxBoolItem&)rReq. 710*cdf0e10cSrcweir GetArgs()->Get(SID_RULER_ACT_LINE_ONLY)).GetValue(); 711*cdf0e10cSrcweir 712*cdf0e10cSrcweir SwTabCols aTabCols; 713*cdf0e10cSrcweir if ( bSetTabColFromDoc ) 714*cdf0e10cSrcweir rSh.GetMouseTabCols( aTabCols, aTabColFromDocPos ); 715*cdf0e10cSrcweir else 716*cdf0e10cSrcweir rSh.GetTabCols(aTabCols); 717*cdf0e10cSrcweir 718*cdf0e10cSrcweir // linker Tabellenrand 719*cdf0e10cSrcweir long nBorder = (long)(aColItem.GetLeft() - aTabCols.GetLeftMin()); 720*cdf0e10cSrcweir aTabCols.SetLeft( nBorder ); 721*cdf0e10cSrcweir 722*cdf0e10cSrcweir nBorder = (bVerticalWriting ? nPageHeight : nPageWidth) - aTabCols.GetLeftMin() - aColItem.GetRight(); 723*cdf0e10cSrcweir 724*cdf0e10cSrcweir #ifdef DEBUG 725*cdf0e10cSrcweir long nTmp1 = nPageWidth; 726*cdf0e10cSrcweir long nTmp2 = aTabCols.GetLeftMin() + nBorder; 727*cdf0e10cSrcweir (void)nTmp1; 728*cdf0e10cSrcweir (void)nTmp2; 729*cdf0e10cSrcweir #endif 730*cdf0e10cSrcweir 731*cdf0e10cSrcweir if ( aColItem.GetRight() > 0 ) 732*cdf0e10cSrcweir aTabCols.SetRight( nBorder ); 733*cdf0e10cSrcweir 734*cdf0e10cSrcweir // Tabcols der Reihe nach 735*cdf0e10cSrcweir // Die letzte Col wird durch den Rand definiert 736*cdf0e10cSrcweir //columns in right-to-left tables need to be mirrored 737*cdf0e10cSrcweir sal_Bool bIsTableRTL = 738*cdf0e10cSrcweir IsTabColFromDoc() ? 739*cdf0e10cSrcweir rSh.IsMouseTableRightToLeft(aTabColFromDocPos) 740*cdf0e10cSrcweir : rSh.IsTableRightToLeft(); 741*cdf0e10cSrcweir if(bIsTableRTL) 742*cdf0e10cSrcweir { 743*cdf0e10cSrcweir sal_uInt16 nColCount = aColItem.Count() - 1; 744*cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < nColCount; ++i ) 745*cdf0e10cSrcweir { 746*cdf0e10cSrcweir const SvxColumnDescription& rCol = aColItem[nColCount - i]; 747*cdf0e10cSrcweir aTabCols[i] = aTabCols.GetRight() - rCol.nStart; 748*cdf0e10cSrcweir aTabCols.SetHidden( i, !rCol.bVisible ); 749*cdf0e10cSrcweir } 750*cdf0e10cSrcweir } 751*cdf0e10cSrcweir else 752*cdf0e10cSrcweir { 753*cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < aColItem.Count()-1; ++i ) 754*cdf0e10cSrcweir { 755*cdf0e10cSrcweir const SvxColumnDescription& rCol = aColItem[i]; 756*cdf0e10cSrcweir aTabCols[i] = rCol.nEnd + aTabCols.GetLeft(); 757*cdf0e10cSrcweir aTabCols.SetHidden( i, !rCol.bVisible ); 758*cdf0e10cSrcweir } 759*cdf0e10cSrcweir } 760*cdf0e10cSrcweir 761*cdf0e10cSrcweir if ( bSetTabColFromDoc ) 762*cdf0e10cSrcweir { 763*cdf0e10cSrcweir if( !rSh.IsViewLocked() ) 764*cdf0e10cSrcweir { 765*cdf0e10cSrcweir bUnlockView = sal_True; 766*cdf0e10cSrcweir rSh.LockView( sal_True ); 767*cdf0e10cSrcweir } 768*cdf0e10cSrcweir rSh.SetMouseTabCols( aTabCols, bSingleLine, 769*cdf0e10cSrcweir aTabColFromDocPos ); 770*cdf0e10cSrcweir } 771*cdf0e10cSrcweir else 772*cdf0e10cSrcweir rSh.SetTabCols(aTabCols, bSingleLine); 773*cdf0e10cSrcweir 774*cdf0e10cSrcweir } 775*cdf0e10cSrcweir else 776*cdf0e10cSrcweir { 777*cdf0e10cSrcweir if ( bFrmSelection || nFrmType & FRMTYPE_FLY_ANY || bSect) 778*cdf0e10cSrcweir { 779*cdf0e10cSrcweir SwSectionFmt *pSectFmt = 0; 780*cdf0e10cSrcweir SfxItemSet aSet( GetPool(), RES_COL, RES_COL ); 781*cdf0e10cSrcweir if(bSect) 782*cdf0e10cSrcweir { 783*cdf0e10cSrcweir const SwSection *pSect = rSh.GetAnySection(); 784*cdf0e10cSrcweir ASSERT( pSect, "Welcher Bereich?"); 785*cdf0e10cSrcweir pSectFmt = pSect->GetFmt(); 786*cdf0e10cSrcweir } 787*cdf0e10cSrcweir else 788*cdf0e10cSrcweir { 789*cdf0e10cSrcweir rSh.GetFlyFrmAttr( aSet ); 790*cdf0e10cSrcweir } 791*cdf0e10cSrcweir SwFmtCol aCols( 792*cdf0e10cSrcweir bSect ? 793*cdf0e10cSrcweir pSectFmt->GetCol() : 794*cdf0e10cSrcweir (const SwFmtCol&)aSet.Get( RES_COL, sal_False )); 795*cdf0e10cSrcweir SwRect aCurRect = rSh.GetAnyCurRect(bSect ? RECT_SECTION_PRT : RECT_FLY_PRT_EMBEDDED); 796*cdf0e10cSrcweir const long lWidth = bVerticalWriting ? aCurRect.Height() : aCurRect.Width(); 797*cdf0e10cSrcweir ::lcl_ConvertToCols( aColItem, sal_uInt16(lWidth), aCols ); 798*cdf0e10cSrcweir aSet.Put( aCols ); 799*cdf0e10cSrcweir if(bSect) 800*cdf0e10cSrcweir rSh.SetSectionAttr( aSet, pSectFmt ); 801*cdf0e10cSrcweir else 802*cdf0e10cSrcweir { 803*cdf0e10cSrcweir rSh.StartAction(); 804*cdf0e10cSrcweir rSh.Push(); 805*cdf0e10cSrcweir rSh.SetFlyFrmAttr( aSet ); 806*cdf0e10cSrcweir //die Rahmenselektion wieder aufheben 807*cdf0e10cSrcweir if(!bFrmSelection && rSh.IsFrmSelected()) 808*cdf0e10cSrcweir { 809*cdf0e10cSrcweir rSh.UnSelectFrm(); 810*cdf0e10cSrcweir rSh.LeaveSelFrmMode(); 811*cdf0e10cSrcweir } 812*cdf0e10cSrcweir rSh.Pop(); 813*cdf0e10cSrcweir rSh.EndAction(); 814*cdf0e10cSrcweir } 815*cdf0e10cSrcweir } 816*cdf0e10cSrcweir else 817*cdf0e10cSrcweir { 818*cdf0e10cSrcweir SwFmtCol aCols( rDesc.GetMaster().GetCol() ); 819*cdf0e10cSrcweir const SwRect aPrtRect = rSh.GetAnyCurRect(RECT_PAGE_PRT); 820*cdf0e10cSrcweir ::lcl_ConvertToCols( aColItem, 821*cdf0e10cSrcweir sal_uInt16(bVerticalWriting ? aPrtRect.Height() : aPrtRect.Width()), 822*cdf0e10cSrcweir aCols ); 823*cdf0e10cSrcweir SwPageDesc aDesc( rDesc ); 824*cdf0e10cSrcweir aDesc.GetMaster().SetFmtAttr( aCols ); 825*cdf0e10cSrcweir rSh.ChgPageDesc( rSh.GetCurPageDesc(), aDesc ); 826*cdf0e10cSrcweir } 827*cdf0e10cSrcweir } 828*cdf0e10cSrcweir } 829*cdf0e10cSrcweir break; 830*cdf0e10cSrcweir 831*cdf0e10cSrcweir case SID_RULER_ROWS : 832*cdf0e10cSrcweir case SID_RULER_ROWS_VERTICAL: 833*cdf0e10cSrcweir { 834*cdf0e10cSrcweir SvxColumnItem aColItem((const SvxColumnItem&)rReq. 835*cdf0e10cSrcweir GetArgs()->Get(nSlot)); 836*cdf0e10cSrcweir 837*cdf0e10cSrcweir if( bSetTabColFromDoc || (!bSect && rSh.GetTableFmt()) ) 838*cdf0e10cSrcweir { 839*cdf0e10cSrcweir ASSERT(aColItem.Count(), "ColDesc ist leer!!"); 840*cdf0e10cSrcweir 841*cdf0e10cSrcweir SwTabCols aTabCols; 842*cdf0e10cSrcweir if ( bSetTabRowFromDoc ) 843*cdf0e10cSrcweir rSh.GetMouseTabRows( aTabCols, aTabColFromDocPos ); 844*cdf0e10cSrcweir else 845*cdf0e10cSrcweir rSh.GetTabRows(aTabCols); 846*cdf0e10cSrcweir 847*cdf0e10cSrcweir if ( bVerticalWriting ) 848*cdf0e10cSrcweir { 849*cdf0e10cSrcweir aTabCols.SetRight(nPageWidth - aColItem.GetRight() - aColItem.GetLeft()); 850*cdf0e10cSrcweir aTabCols.SetLeftMin(aColItem.GetLeft()); 851*cdf0e10cSrcweir } 852*cdf0e10cSrcweir else 853*cdf0e10cSrcweir { 854*cdf0e10cSrcweir long nBorder = nPageHeight - aTabCols.GetLeftMin() - aColItem.GetRight(); 855*cdf0e10cSrcweir aTabCols.SetRight( nBorder ); 856*cdf0e10cSrcweir } 857*cdf0e10cSrcweir 858*cdf0e10cSrcweir if(bVerticalWriting) 859*cdf0e10cSrcweir { 860*cdf0e10cSrcweir for ( sal_uInt16 i = aColItem.Count() - 1; i; --i ) 861*cdf0e10cSrcweir { 862*cdf0e10cSrcweir const SvxColumnDescription& rCol = aColItem[i - 1]; 863*cdf0e10cSrcweir long nColumnPos = aTabCols.GetRight() - rCol.nEnd ; 864*cdf0e10cSrcweir aTabCols[i - 1] = nColumnPos; 865*cdf0e10cSrcweir aTabCols.SetHidden( i - 1, !rCol.bVisible ); 866*cdf0e10cSrcweir } 867*cdf0e10cSrcweir } 868*cdf0e10cSrcweir else 869*cdf0e10cSrcweir { 870*cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < aColItem.Count()-1; ++i ) 871*cdf0e10cSrcweir { 872*cdf0e10cSrcweir const SvxColumnDescription& rCol = aColItem[i]; 873*cdf0e10cSrcweir aTabCols[i] = rCol.nEnd + aTabCols.GetLeft(); 874*cdf0e10cSrcweir aTabCols.SetHidden( i, !rCol.bVisible ); 875*cdf0e10cSrcweir } 876*cdf0e10cSrcweir } 877*cdf0e10cSrcweir sal_Bool bSingleLine = sal_False; 878*cdf0e10cSrcweir const SfxPoolItem* pSingleLine; 879*cdf0e10cSrcweir if( SFX_ITEM_SET == rReq.GetArgs()->GetItemState(SID_RULER_ACT_LINE_ONLY, sal_False, &pSingleLine)) 880*cdf0e10cSrcweir bSingleLine = ((const SfxBoolItem*)pSingleLine)->GetValue(); 881*cdf0e10cSrcweir if ( bSetTabRowFromDoc ) 882*cdf0e10cSrcweir { 883*cdf0e10cSrcweir if( !rSh.IsViewLocked() ) 884*cdf0e10cSrcweir { 885*cdf0e10cSrcweir bUnlockView = sal_True; 886*cdf0e10cSrcweir rSh.LockView( sal_True ); 887*cdf0e10cSrcweir } 888*cdf0e10cSrcweir rSh.SetMouseTabRows( aTabCols, bSingleLine, aTabColFromDocPos ); 889*cdf0e10cSrcweir } 890*cdf0e10cSrcweir else 891*cdf0e10cSrcweir rSh.SetTabRows(aTabCols, bSingleLine); 892*cdf0e10cSrcweir } 893*cdf0e10cSrcweir } 894*cdf0e10cSrcweir break; 895*cdf0e10cSrcweir 896*cdf0e10cSrcweir default: 897*cdf0e10cSrcweir ASSERT( !this, "Falsche SlotId"); 898*cdf0e10cSrcweir } 899*cdf0e10cSrcweir rSh.EndAllAction(); 900*cdf0e10cSrcweir 901*cdf0e10cSrcweir if( bUnlockView ) 902*cdf0e10cSrcweir rSh.LockView( sal_False ); 903*cdf0e10cSrcweir 904*cdf0e10cSrcweir bSetTabColFromDoc = bSetTabRowFromDoc = bTabColFromDoc = bTabRowFromDoc = sal_False; 905*cdf0e10cSrcweir SetNumRuleNodeFromDoc(NULL); 906*cdf0e10cSrcweir } 907*cdf0e10cSrcweir 908*cdf0e10cSrcweir /*-------------------------------------------------------------------- 909*cdf0e10cSrcweir Beschreibung: Hier wird der Status der Tableiste ermittelt 910*cdf0e10cSrcweir sprich alle relevanten Attribute an der CursorPos 911*cdf0e10cSrcweir werden der Tableiste uebermittelt 912*cdf0e10cSrcweir --------------------------------------------------------------------*/ 913*cdf0e10cSrcweir 914*cdf0e10cSrcweir 915*cdf0e10cSrcweir void SwView::StateTabWin(SfxItemSet& rSet) 916*cdf0e10cSrcweir { 917*cdf0e10cSrcweir SwWrtShell &rSh = GetWrtShell(); 918*cdf0e10cSrcweir 919*cdf0e10cSrcweir const Point* pPt = IsTabColFromDoc() || IsTabRowFromDoc() ? &aTabColFromDocPos : 0; 920*cdf0e10cSrcweir const sal_uInt16 nFrmType = rSh.IsObjSelected() 921*cdf0e10cSrcweir ? FRMTYPE_DRAWOBJ 922*cdf0e10cSrcweir : rSh.GetFrmType( pPt, sal_True ); 923*cdf0e10cSrcweir 924*cdf0e10cSrcweir const sal_Bool bFrmSelection = rSh.IsFrmSelected(); 925*cdf0e10cSrcweir const sal_Bool bBrowse = rSh.GetViewOptions()->getBrowseMode(); 926*cdf0e10cSrcweir // PageOffset/Begrenzer 927*cdf0e10cSrcweir const SwRect& rPageRect = rSh.GetAnyCurRect( RECT_PAGE, pPt ); 928*cdf0e10cSrcweir const SwRect& rPagePrtRect = rSh.GetAnyCurRect( RECT_PAGE_PRT, pPt ); 929*cdf0e10cSrcweir const long nPageWidth = rPageRect.Width(); 930*cdf0e10cSrcweir const long nPageHeight = rPageRect.Height(); 931*cdf0e10cSrcweir 932*cdf0e10cSrcweir const SwPageDesc& rDesc = rSh.GetPageDesc( 933*cdf0e10cSrcweir IsTabColFromDoc() || bTabRowFromDoc ? 934*cdf0e10cSrcweir rSh.GetMousePageDesc(aTabColFromDocPos) : rSh.GetCurPageDesc() ); 935*cdf0e10cSrcweir 936*cdf0e10cSrcweir const SvxFrameDirectionItem& rFrameDir = rDesc.GetMaster().GetFrmDir(); 937*cdf0e10cSrcweir const sal_Bool bVerticalWriting = rSh.IsInVerticalText(); 938*cdf0e10cSrcweir 939*cdf0e10cSrcweir //enable tab stop display on the rulers depending on the writing direction 940*cdf0e10cSrcweir WinBits nRulerStyle = pHRuler->GetStyle() & ~WB_EXTRAFIELD; 941*cdf0e10cSrcweir pHRuler->SetStyle(bVerticalWriting||bBrowse ? nRulerStyle : nRulerStyle|WB_EXTRAFIELD); 942*cdf0e10cSrcweir nRulerStyle = pVRuler->GetStyle() & ~WB_EXTRAFIELD; 943*cdf0e10cSrcweir pVRuler->SetStyle(bVerticalWriting ? nRulerStyle|WB_EXTRAFIELD : nRulerStyle); 944*cdf0e10cSrcweir 945*cdf0e10cSrcweir //#i24363# tab stops relative to indent 946*cdf0e10cSrcweir bool bRelative = rSh.getIDocumentSettingAccess()->get(IDocumentSettingAccess::TABS_RELATIVE_TO_INDENT); 947*cdf0e10cSrcweir pHRuler->SetTabsRelativeToIndent( bRelative ); 948*cdf0e10cSrcweir pVRuler->SetTabsRelativeToIndent( bRelative ); 949*cdf0e10cSrcweir 950*cdf0e10cSrcweir SvxLRSpaceItem aPageLRSpace( rDesc.GetMaster().GetLRSpace() ); 951*cdf0e10cSrcweir SwapPageMargin( rDesc, aPageLRSpace ); 952*cdf0e10cSrcweir 953*cdf0e10cSrcweir SfxItemSet aCoreSet( GetPool(), RES_PARATR_TABSTOP, RES_PARATR_TABSTOP, 954*cdf0e10cSrcweir RES_LR_SPACE, RES_UL_SPACE, 0 ); 955*cdf0e10cSrcweir // --> OD 2008-01-17 #newlistlevelattrs# 956*cdf0e10cSrcweir // get also the list level indent values merged as LR-SPACE item, if needed. 957*cdf0e10cSrcweir rSh.GetCurAttr( aCoreSet, true ); 958*cdf0e10cSrcweir // <-- 959*cdf0e10cSrcweir SelectionType nSelType = rSh.GetSelectionType(); 960*cdf0e10cSrcweir 961*cdf0e10cSrcweir SfxWhichIter aIter( rSet ); 962*cdf0e10cSrcweir sal_uInt16 nWhich = aIter.FirstWhich(); 963*cdf0e10cSrcweir sal_Bool bPutContentProtection = sal_False; 964*cdf0e10cSrcweir 965*cdf0e10cSrcweir while ( nWhich ) 966*cdf0e10cSrcweir { 967*cdf0e10cSrcweir switch ( nWhich ) 968*cdf0e10cSrcweir { 969*cdf0e10cSrcweir // case RES_LR_SPACE: 970*cdf0e10cSrcweir // case SID_ATTR_LRSPACE: 971*cdf0e10cSrcweir case SID_ATTR_LONG_LRSPACE: 972*cdf0e10cSrcweir { 973*cdf0e10cSrcweir SvxLongLRSpaceItem aLongLR( (long)aPageLRSpace.GetLeft(), 974*cdf0e10cSrcweir (long)aPageLRSpace.GetRight(), 975*cdf0e10cSrcweir SID_ATTR_LONG_LRSPACE); 976*cdf0e10cSrcweir if(bBrowse) 977*cdf0e10cSrcweir { 978*cdf0e10cSrcweir aLongLR.SetLeft(rPagePrtRect.Left()); 979*cdf0e10cSrcweir aLongLR.SetRight(nPageWidth - rPagePrtRect.Right()); 980*cdf0e10cSrcweir } 981*cdf0e10cSrcweir if ( ( nFrmType & FRMTYPE_HEADER || nFrmType & FRMTYPE_FOOTER ) && 982*cdf0e10cSrcweir !(nFrmType & FRMTYPE_COLSECT) ) 983*cdf0e10cSrcweir { 984*cdf0e10cSrcweir SwFrmFmt *pFmt = (SwFrmFmt*) (nFrmType & FRMTYPE_HEADER ? 985*cdf0e10cSrcweir rDesc.GetMaster().GetHeader().GetHeaderFmt() : 986*cdf0e10cSrcweir rDesc.GetMaster().GetFooter().GetFooterFmt()); 987*cdf0e10cSrcweir if( pFmt )// #i80890# if rDesc is not the one belonging to the current page is might crash 988*cdf0e10cSrcweir { 989*cdf0e10cSrcweir SwRect aRect( rSh.GetAnyCurRect( RECT_HEADERFOOTER, pPt)); 990*cdf0e10cSrcweir aRect.Pos() -= rSh.GetAnyCurRect( RECT_PAGE, pPt ).Pos(); 991*cdf0e10cSrcweir const SvxLRSpaceItem& aLR = pFmt->GetLRSpace(); 992*cdf0e10cSrcweir aLongLR.SetLeft ( (long)aLR.GetLeft() + (long)aRect.Left() ); 993*cdf0e10cSrcweir aLongLR.SetRight( (nPageWidth - 994*cdf0e10cSrcweir (long)aRect.Right() + (long)aLR.GetRight())); 995*cdf0e10cSrcweir } 996*cdf0e10cSrcweir } 997*cdf0e10cSrcweir else 998*cdf0e10cSrcweir { 999*cdf0e10cSrcweir SwRect aRect; 1000*cdf0e10cSrcweir if( !bFrmSelection && ((nFrmType & FRMTYPE_COLSECT) || rSh.IsDirectlyInSection()) ) 1001*cdf0e10cSrcweir { 1002*cdf0e10cSrcweir aRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, pPt); 1003*cdf0e10cSrcweir const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, pPt); 1004*cdf0e10cSrcweir aRect.Pos() += aTmpRect.Pos(); 1005*cdf0e10cSrcweir } 1006*cdf0e10cSrcweir 1007*cdf0e10cSrcweir else if ( bFrmSelection || nFrmType & FRMTYPE_FLY_ANY ) 1008*cdf0e10cSrcweir aRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED, pPt); 1009*cdf0e10cSrcweir else if( nFrmType & FRMTYPE_DRAWOBJ) 1010*cdf0e10cSrcweir aRect = rSh.GetObjRect(); 1011*cdf0e10cSrcweir 1012*cdf0e10cSrcweir if( aRect.Width() ) 1013*cdf0e10cSrcweir { 1014*cdf0e10cSrcweir // PAGES01 1015*cdf0e10cSrcweir // make relative to page position: 1016*cdf0e10cSrcweir aLongLR.SetLeft ((long)( aRect.Left() - rPageRect.Left() )); 1017*cdf0e10cSrcweir aLongLR.SetRight((long)( rPageRect.Right() - aRect.Right())); 1018*cdf0e10cSrcweir } 1019*cdf0e10cSrcweir } 1020*cdf0e10cSrcweir if( nWhich == SID_ATTR_LONG_LRSPACE ) 1021*cdf0e10cSrcweir rSet.Put( aLongLR ); 1022*cdf0e10cSrcweir else 1023*cdf0e10cSrcweir { 1024*cdf0e10cSrcweir SvxLRSpaceItem aLR( aLongLR.GetLeft(), 1025*cdf0e10cSrcweir aLongLR.GetRight(), 1026*cdf0e10cSrcweir 0, 0, 1027*cdf0e10cSrcweir nWhich); 1028*cdf0e10cSrcweir rSet.Put(aLR); 1029*cdf0e10cSrcweir } 1030*cdf0e10cSrcweir break; 1031*cdf0e10cSrcweir } 1032*cdf0e10cSrcweir case SID_ATTR_LONG_ULSPACE: 1033*cdf0e10cSrcweir // case SID_ATTR_ULSPACE: 1034*cdf0e10cSrcweir // case RES_UL_SPACE: 1035*cdf0e10cSrcweir { 1036*cdf0e10cSrcweir // Rand Seite Oben Unten 1037*cdf0e10cSrcweir SvxULSpaceItem aUL( rDesc.GetMaster().GetULSpace() ); 1038*cdf0e10cSrcweir SvxLongULSpaceItem aLongUL( (long)aUL.GetUpper(), 1039*cdf0e10cSrcweir (long)aUL.GetLower(), 1040*cdf0e10cSrcweir SID_ATTR_LONG_ULSPACE); 1041*cdf0e10cSrcweir 1042*cdf0e10cSrcweir if ( bFrmSelection || nFrmType & FRMTYPE_FLY_ANY ) 1043*cdf0e10cSrcweir { 1044*cdf0e10cSrcweir // Dokumentkoordinaten Frame auf Seitenkoordinaten umbrechen 1045*cdf0e10cSrcweir const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED, pPt); 1046*cdf0e10cSrcweir aLongUL.SetUpper((sal_uInt16)(rRect.Top() - rPageRect.Top() )); 1047*cdf0e10cSrcweir aLongUL.SetLower((sal_uInt16)(rPageRect.Bottom() - rRect.Bottom() )); 1048*cdf0e10cSrcweir } 1049*cdf0e10cSrcweir else if ( nFrmType & FRMTYPE_HEADER || nFrmType & FRMTYPE_FOOTER ) 1050*cdf0e10cSrcweir { 1051*cdf0e10cSrcweir SwRect aRect( rSh.GetAnyCurRect( RECT_HEADERFOOTER, pPt)); 1052*cdf0e10cSrcweir aRect.Pos() -= rSh.GetAnyCurRect( RECT_PAGE, pPt ).Pos(); 1053*cdf0e10cSrcweir aLongUL.SetUpper( (sal_uInt16)aRect.Top() ); 1054*cdf0e10cSrcweir aLongUL.SetLower( (sal_uInt16)(nPageHeight - aRect.Bottom()) ); 1055*cdf0e10cSrcweir } 1056*cdf0e10cSrcweir else if( nFrmType & FRMTYPE_DRAWOBJ) 1057*cdf0e10cSrcweir { 1058*cdf0e10cSrcweir const SwRect &rRect = rSh.GetObjRect(); 1059*cdf0e10cSrcweir aLongUL.SetUpper((rRect.Top() - rPageRect.Top())); 1060*cdf0e10cSrcweir aLongUL.SetLower((rPageRect.Bottom() - rRect.Bottom())); 1061*cdf0e10cSrcweir } 1062*cdf0e10cSrcweir else if(bBrowse) 1063*cdf0e10cSrcweir { 1064*cdf0e10cSrcweir aLongUL.SetUpper(rPagePrtRect.Top()); 1065*cdf0e10cSrcweir aLongUL.SetLower(nPageHeight - rPagePrtRect.Bottom()); 1066*cdf0e10cSrcweir } 1067*cdf0e10cSrcweir if( nWhich == SID_ATTR_LONG_ULSPACE ) 1068*cdf0e10cSrcweir rSet.Put( aLongUL ); 1069*cdf0e10cSrcweir else 1070*cdf0e10cSrcweir { 1071*cdf0e10cSrcweir SvxULSpaceItem aULTmp((sal_uInt16)aLongUL.GetUpper(), 1072*cdf0e10cSrcweir (sal_uInt16)aLongUL.GetLower(), 1073*cdf0e10cSrcweir nWhich); 1074*cdf0e10cSrcweir rSet.Put(aULTmp); 1075*cdf0e10cSrcweir } 1076*cdf0e10cSrcweir break; 1077*cdf0e10cSrcweir } 1078*cdf0e10cSrcweir case SID_ATTR_TABSTOP_VERTICAL : 1079*cdf0e10cSrcweir case RES_PARATR_TABSTOP: 1080*cdf0e10cSrcweir { 1081*cdf0e10cSrcweir if ( ISA( SwWebView ) || 1082*cdf0e10cSrcweir IsTabColFromDoc() || 1083*cdf0e10cSrcweir IsTabRowFromDoc() || 1084*cdf0e10cSrcweir ( nSelType & nsSelectionType::SEL_GRF) || 1085*cdf0e10cSrcweir (nSelType & nsSelectionType::SEL_FRM) || 1086*cdf0e10cSrcweir (nSelType & nsSelectionType::SEL_OLE) || 1087*cdf0e10cSrcweir SFX_ITEM_AVAILABLE > aCoreSet.GetItemState(RES_LR_SPACE)|| 1088*cdf0e10cSrcweir (!bVerticalWriting && (SID_ATTR_TABSTOP_VERTICAL == nWhich))|| 1089*cdf0e10cSrcweir (bVerticalWriting && (RES_PARATR_TABSTOP == nWhich)) 1090*cdf0e10cSrcweir ) 1091*cdf0e10cSrcweir rSet.DisableItem( nWhich ); 1092*cdf0e10cSrcweir else 1093*cdf0e10cSrcweir { 1094*cdf0e10cSrcweir SvxTabStopItem aTabStops((const SvxTabStopItem&) 1095*cdf0e10cSrcweir aCoreSet.Get( RES_PARATR_TABSTOP )); 1096*cdf0e10cSrcweir 1097*cdf0e10cSrcweir const SvxTabStopItem& rDefTabs = (const SvxTabStopItem&) 1098*cdf0e10cSrcweir rSh.GetDefault(RES_PARATR_TABSTOP); 1099*cdf0e10cSrcweir 1100*cdf0e10cSrcweir DBG_ASSERT(pHRuler, "warum ist das Lineal nicht da?"); 1101*cdf0e10cSrcweir long nDefTabDist = ::GetTabDist(rDefTabs); 1102*cdf0e10cSrcweir pHRuler->SetDefTabDist( nDefTabDist ); 1103*cdf0e10cSrcweir pVRuler->SetDefTabDist( nDefTabDist ); 1104*cdf0e10cSrcweir ::lcl_EraseDefTabs(aTabStops); 1105*cdf0e10cSrcweir rSet.Put(aTabStops, nWhich); 1106*cdf0e10cSrcweir } 1107*cdf0e10cSrcweir break; 1108*cdf0e10cSrcweir } 1109*cdf0e10cSrcweir case SID_ATTR_PARA_LRSPACE_VERTICAL: 1110*cdf0e10cSrcweir case SID_ATTR_PARA_LRSPACE: 1111*cdf0e10cSrcweir { 1112*cdf0e10cSrcweir if ( nSelType & nsSelectionType::SEL_GRF || 1113*cdf0e10cSrcweir nSelType & nsSelectionType::SEL_FRM || 1114*cdf0e10cSrcweir nSelType & nsSelectionType::SEL_OLE || 1115*cdf0e10cSrcweir nFrmType == FRMTYPE_DRAWOBJ || 1116*cdf0e10cSrcweir (!bVerticalWriting && (SID_ATTR_PARA_LRSPACE_VERTICAL == nWhich))|| 1117*cdf0e10cSrcweir (bVerticalWriting && (SID_ATTR_PARA_LRSPACE == nWhich)) 1118*cdf0e10cSrcweir ) 1119*cdf0e10cSrcweir { 1120*cdf0e10cSrcweir rSet.DisableItem(nWhich); 1121*cdf0e10cSrcweir } 1122*cdf0e10cSrcweir else 1123*cdf0e10cSrcweir { 1124*cdf0e10cSrcweir SvxLRSpaceItem aLR( RES_LR_SPACE ); 1125*cdf0e10cSrcweir if ( !IsTabColFromDoc() ) 1126*cdf0e10cSrcweir { 1127*cdf0e10cSrcweir aLR = (const SvxLRSpaceItem&)aCoreSet.Get(RES_LR_SPACE); 1128*cdf0e10cSrcweir 1129*cdf0e10cSrcweir // #i23726# 1130*cdf0e10cSrcweir if (pNumRuleNodeFromDoc) 1131*cdf0e10cSrcweir { 1132*cdf0e10cSrcweir short nOffset = static_cast< short >(aLR.GetTxtLeft() + 1133*cdf0e10cSrcweir // --> FME 2005-02-22 #i42922# Mouse move of numbering label 1134*cdf0e10cSrcweir // has to consider the left indent of the paragraph 1135*cdf0e10cSrcweir pNumRuleNodeFromDoc->GetLeftMarginWithNum( sal_True ) ); 1136*cdf0e10cSrcweir // <-- 1137*cdf0e10cSrcweir 1138*cdf0e10cSrcweir short nFLOffset; 1139*cdf0e10cSrcweir pNumRuleNodeFromDoc->GetFirstLineOfsWithNum( nFLOffset ); 1140*cdf0e10cSrcweir 1141*cdf0e10cSrcweir aLR.SetLeft( nOffset + nFLOffset ); 1142*cdf0e10cSrcweir } 1143*cdf0e10cSrcweir } 1144*cdf0e10cSrcweir aLR.SetWhich(nWhich); 1145*cdf0e10cSrcweir rSet.Put(aLR); 1146*cdf0e10cSrcweir } 1147*cdf0e10cSrcweir break; 1148*cdf0e10cSrcweir } 1149*cdf0e10cSrcweir case SID_RULER_BORDER_DISTANCE: 1150*cdf0e10cSrcweir { 1151*cdf0e10cSrcweir nLeftBorderDistance = 0; 1152*cdf0e10cSrcweir nRightBorderDistance = 0; 1153*cdf0e10cSrcweir if ( nSelType & nsSelectionType::SEL_GRF || 1154*cdf0e10cSrcweir nSelType & nsSelectionType::SEL_FRM || 1155*cdf0e10cSrcweir nSelType & nsSelectionType::SEL_OLE || 1156*cdf0e10cSrcweir nFrmType == FRMTYPE_DRAWOBJ ) 1157*cdf0e10cSrcweir rSet.DisableItem(SID_RULER_BORDER_DISTANCE); 1158*cdf0e10cSrcweir else 1159*cdf0e10cSrcweir { 1160*cdf0e10cSrcweir SvxLRSpaceItem aDistLR(SID_RULER_BORDER_DISTANCE); 1161*cdf0e10cSrcweir if(nFrmType & FRMTYPE_FLY_ANY) 1162*cdf0e10cSrcweir { 1163*cdf0e10cSrcweir if( IsTabColFromDoc() ) 1164*cdf0e10cSrcweir { 1165*cdf0e10cSrcweir const SwRect& rFlyPrtRect = rSh.GetAnyCurRect( RECT_FLY_PRT_EMBEDDED, pPt ); 1166*cdf0e10cSrcweir aDistLR.SetLeft(rFlyPrtRect.Left()); 1167*cdf0e10cSrcweir aDistLR.SetRight(rFlyPrtRect.Left()); 1168*cdf0e10cSrcweir } 1169*cdf0e10cSrcweir else 1170*cdf0e10cSrcweir { 1171*cdf0e10cSrcweir SfxItemSet aCoreSet2( GetPool(), 1172*cdf0e10cSrcweir RES_BOX, RES_BOX, 1173*cdf0e10cSrcweir SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, 0 ); 1174*cdf0e10cSrcweir SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER ); 1175*cdf0e10cSrcweir aCoreSet.Put( aBoxInfo ); 1176*cdf0e10cSrcweir rSh.GetFlyFrmAttr( aCoreSet ); 1177*cdf0e10cSrcweir const SvxBoxItem& rBox = (const SvxBoxItem&)aCoreSet.Get(RES_BOX); 1178*cdf0e10cSrcweir aDistLR.SetLeft((sal_uInt16)rBox.GetDistance(BOX_LINE_LEFT )); 1179*cdf0e10cSrcweir aDistLR.SetRight((sal_uInt16)rBox.GetDistance(BOX_LINE_RIGHT)); 1180*cdf0e10cSrcweir 1181*cdf0e10cSrcweir //add the paragraph border distance 1182*cdf0e10cSrcweir SfxItemSet aCoreSet1( GetPool(), 1183*cdf0e10cSrcweir RES_BOX, RES_BOX, 1184*cdf0e10cSrcweir 0 ); 1185*cdf0e10cSrcweir rSh.GetCurAttr( aCoreSet1 ); 1186*cdf0e10cSrcweir const SvxBoxItem& rParaBox = (const SvxBoxItem&)aCoreSet1.Get(RES_BOX); 1187*cdf0e10cSrcweir aDistLR.SetLeft(aDistLR.GetLeft() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_LEFT )); 1188*cdf0e10cSrcweir aDistLR.SetRight(aDistLR.GetRight() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_RIGHT)); 1189*cdf0e10cSrcweir } 1190*cdf0e10cSrcweir rSet.Put(aDistLR); 1191*cdf0e10cSrcweir nLeftBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetLeft()); 1192*cdf0e10cSrcweir nRightBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetRight()); 1193*cdf0e10cSrcweir } 1194*cdf0e10cSrcweir else if ( IsTabColFromDoc() || 1195*cdf0e10cSrcweir ( rSh.GetTableFmt() && !bFrmSelection && 1196*cdf0e10cSrcweir !(nFrmType & FRMTYPE_COLSECT ) ) ) 1197*cdf0e10cSrcweir { 1198*cdf0e10cSrcweir SfxItemSet aCoreSet2( GetPool(), 1199*cdf0e10cSrcweir RES_BOX, RES_BOX, 1200*cdf0e10cSrcweir SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, 0 ); 1201*cdf0e10cSrcweir SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER ); 1202*cdf0e10cSrcweir aBoxInfo.SetTable(sal_False); 1203*cdf0e10cSrcweir aBoxInfo.SetDist((sal_Bool) sal_True); 1204*cdf0e10cSrcweir aCoreSet2.Put(aBoxInfo); 1205*cdf0e10cSrcweir rSh.GetTabBorders( aCoreSet2 ); 1206*cdf0e10cSrcweir const SvxBoxItem& rBox = (const SvxBoxItem&)aCoreSet2.Get(RES_BOX); 1207*cdf0e10cSrcweir aDistLR.SetLeft((sal_uInt16)rBox.GetDistance(BOX_LINE_LEFT )); 1208*cdf0e10cSrcweir aDistLR.SetRight((sal_uInt16)rBox.GetDistance(BOX_LINE_RIGHT)); 1209*cdf0e10cSrcweir 1210*cdf0e10cSrcweir //add the border distance of the paragraph 1211*cdf0e10cSrcweir SfxItemSet aCoreSet1( GetPool(), 1212*cdf0e10cSrcweir RES_BOX, RES_BOX, 1213*cdf0e10cSrcweir 0 ); 1214*cdf0e10cSrcweir rSh.GetCurAttr( aCoreSet1 ); 1215*cdf0e10cSrcweir const SvxBoxItem& rParaBox = (const SvxBoxItem&)aCoreSet1.Get(RES_BOX); 1216*cdf0e10cSrcweir aDistLR.SetLeft(aDistLR.GetLeft() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_LEFT )); 1217*cdf0e10cSrcweir aDistLR.SetRight(aDistLR.GetRight() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_RIGHT)); 1218*cdf0e10cSrcweir rSet.Put(aDistLR); 1219*cdf0e10cSrcweir nLeftBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetLeft()); 1220*cdf0e10cSrcweir nRightBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetRight()); 1221*cdf0e10cSrcweir } 1222*cdf0e10cSrcweir else if ( !rSh.IsDirectlyInSection() ) 1223*cdf0e10cSrcweir { 1224*cdf0e10cSrcweir //get the page/header/footer border distance 1225*cdf0e10cSrcweir const SwFrmFmt& rMaster = rDesc.GetMaster(); 1226*cdf0e10cSrcweir const SvxBoxItem& rBox = (const SvxBoxItem&)rMaster.GetAttrSet().Get(RES_BOX); 1227*cdf0e10cSrcweir aDistLR.SetLeft((sal_uInt16)rBox.GetDistance(BOX_LINE_LEFT )); 1228*cdf0e10cSrcweir aDistLR.SetRight((sal_uInt16)rBox.GetDistance(BOX_LINE_RIGHT)); 1229*cdf0e10cSrcweir 1230*cdf0e10cSrcweir const SvxBoxItem* pBox = 0; 1231*cdf0e10cSrcweir if(nFrmType & FRMTYPE_HEADER) 1232*cdf0e10cSrcweir { 1233*cdf0e10cSrcweir rMaster.GetHeader(); 1234*cdf0e10cSrcweir const SwFmtHeader& rHeaderFmt = rMaster.GetHeader(); 1235*cdf0e10cSrcweir SwFrmFmt *pHeaderFmt = (SwFrmFmt*)rHeaderFmt.GetHeaderFmt(); 1236*cdf0e10cSrcweir if( pHeaderFmt )// #i80890# if rDesc is not the one belonging to the current page is might crash 1237*cdf0e10cSrcweir pBox = & (const SvxBoxItem&)pHeaderFmt->GetBox(); 1238*cdf0e10cSrcweir } 1239*cdf0e10cSrcweir else if(nFrmType & FRMTYPE_FOOTER ) 1240*cdf0e10cSrcweir { 1241*cdf0e10cSrcweir const SwFmtFooter& rFooterFmt = rMaster.GetFooter(); 1242*cdf0e10cSrcweir SwFrmFmt *pFooterFmt = (SwFrmFmt*)rFooterFmt.GetFooterFmt(); 1243*cdf0e10cSrcweir if( pFooterFmt )// #i80890# if rDesc is not the one belonging to the current page is might crash 1244*cdf0e10cSrcweir pBox = & (const SvxBoxItem&)pFooterFmt->GetBox(); 1245*cdf0e10cSrcweir } 1246*cdf0e10cSrcweir if(pBox) 1247*cdf0e10cSrcweir { 1248*cdf0e10cSrcweir aDistLR.SetLeft((sal_uInt16)pBox->GetDistance(BOX_LINE_LEFT )); 1249*cdf0e10cSrcweir aDistLR.SetRight((sal_uInt16)pBox->GetDistance(BOX_LINE_RIGHT)); 1250*cdf0e10cSrcweir } 1251*cdf0e10cSrcweir 1252*cdf0e10cSrcweir //add the border distance of the paragraph 1253*cdf0e10cSrcweir SfxItemSet aCoreSetTmp( GetPool(), 1254*cdf0e10cSrcweir RES_BOX, RES_BOX, 1255*cdf0e10cSrcweir SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER, 0 ); 1256*cdf0e10cSrcweir rSh.GetCurAttr( aCoreSetTmp ); 1257*cdf0e10cSrcweir const SvxBoxItem& rParaBox = (const SvxBoxItem&)aCoreSetTmp.Get(RES_BOX); 1258*cdf0e10cSrcweir aDistLR.SetLeft(aDistLR.GetLeft() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_LEFT )); 1259*cdf0e10cSrcweir aDistLR.SetRight(aDistLR.GetRight() + (sal_uInt16)rParaBox.GetDistance(BOX_LINE_RIGHT)); 1260*cdf0e10cSrcweir rSet.Put(aDistLR); 1261*cdf0e10cSrcweir nLeftBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetLeft()); 1262*cdf0e10cSrcweir nRightBorderDistance = static_cast< sal_uInt16 >(aDistLR.GetRight()); 1263*cdf0e10cSrcweir } 1264*cdf0e10cSrcweir } 1265*cdf0e10cSrcweir } 1266*cdf0e10cSrcweir break; 1267*cdf0e10cSrcweir case SID_RULER_TEXT_RIGHT_TO_LEFT: 1268*cdf0e10cSrcweir { 1269*cdf0e10cSrcweir if ( nSelType & nsSelectionType::SEL_GRF || 1270*cdf0e10cSrcweir nSelType & nsSelectionType::SEL_FRM || 1271*cdf0e10cSrcweir nSelType & nsSelectionType::SEL_OLE || 1272*cdf0e10cSrcweir nFrmType == FRMTYPE_DRAWOBJ) 1273*cdf0e10cSrcweir rSet.DisableItem(nWhich); 1274*cdf0e10cSrcweir else 1275*cdf0e10cSrcweir { 1276*cdf0e10cSrcweir sal_Bool bFlag = rSh.IsInRightToLeftText(); 1277*cdf0e10cSrcweir rSet.Put(SfxBoolItem(nWhich, bFlag)); 1278*cdf0e10cSrcweir } 1279*cdf0e10cSrcweir } 1280*cdf0e10cSrcweir break; 1281*cdf0e10cSrcweir case SID_RULER_BORDERS_VERTICAL: 1282*cdf0e10cSrcweir case SID_RULER_BORDERS: 1283*cdf0e10cSrcweir { 1284*cdf0e10cSrcweir sal_Bool bFrameHasVerticalColumns(sal_False); 1285*cdf0e10cSrcweir { 1286*cdf0e10cSrcweir sal_Bool bFrameRTL; 1287*cdf0e10cSrcweir sal_Bool bFrameVertL2R; 1288*cdf0e10cSrcweir bFrameHasVerticalColumns = rSh.IsFrmVertical(sal_False, bFrameRTL, bFrameVertL2R) && 1289*cdf0e10cSrcweir bFrmSelection; 1290*cdf0e10cSrcweir } 1291*cdf0e10cSrcweir sal_Bool bHasTable = ( IsTabColFromDoc() || 1292*cdf0e10cSrcweir ( rSh.GetTableFmt() && !bFrmSelection && 1293*cdf0e10cSrcweir !(nFrmType & FRMTYPE_COLSECT ) ) ); 1294*cdf0e10cSrcweir 1295*cdf0e10cSrcweir sal_Bool bTableVertical = bHasTable && rSh.IsTableVertical(); 1296*cdf0e10cSrcweir 1297*cdf0e10cSrcweir if( ( (SID_RULER_BORDERS_VERTICAL == nWhich) && 1298*cdf0e10cSrcweir ((bHasTable && !bTableVertical)|| 1299*cdf0e10cSrcweir (!bVerticalWriting && !bFrmSelection && !bHasTable ) || (bFrmSelection && !bFrameHasVerticalColumns)) ) || 1300*cdf0e10cSrcweir ((SID_RULER_BORDERS == nWhich) && 1301*cdf0e10cSrcweir ((bHasTable && bTableVertical)|| 1302*cdf0e10cSrcweir (bVerticalWriting && !bFrmSelection&& !bHasTable) || bFrameHasVerticalColumns))) 1303*cdf0e10cSrcweir rSet.DisableItem(nWhich); 1304*cdf0e10cSrcweir else if ( bHasTable ) 1305*cdf0e10cSrcweir { 1306*cdf0e10cSrcweir SwTabCols aTabCols; 1307*cdf0e10cSrcweir sal_uInt16 nNum; 1308*cdf0e10cSrcweir if ( 0 != ( bSetTabColFromDoc = IsTabColFromDoc() ) ) 1309*cdf0e10cSrcweir { 1310*cdf0e10cSrcweir rSh.GetMouseTabCols( aTabCols, aTabColFromDocPos ); 1311*cdf0e10cSrcweir nNum = rSh.GetCurMouseTabColNum( aTabColFromDocPos ); 1312*cdf0e10cSrcweir } 1313*cdf0e10cSrcweir else 1314*cdf0e10cSrcweir { 1315*cdf0e10cSrcweir rSh.GetTabCols( aTabCols ); 1316*cdf0e10cSrcweir nNum = rSh.GetCurTabColNum(); 1317*cdf0e10cSrcweir if(rSh.IsTableRightToLeft()) 1318*cdf0e10cSrcweir nNum = aTabCols.Count() - nNum; 1319*cdf0e10cSrcweir } 1320*cdf0e10cSrcweir 1321*cdf0e10cSrcweir ASSERT(nNum <= aTabCols.Count(), "TabCol not found"); 1322*cdf0e10cSrcweir const int nLft = aTabCols.GetLeftMin() + aTabCols.GetLeft(); 1323*cdf0e10cSrcweir const int nRgt = (sal_uInt16)(bTableVertical ? nPageHeight : nPageWidth) - 1324*cdf0e10cSrcweir (aTabCols.GetLeftMin() + 1325*cdf0e10cSrcweir aTabCols.GetRight()); 1326*cdf0e10cSrcweir 1327*cdf0e10cSrcweir const sal_uInt16 nL = static_cast< sal_uInt16 >(nLft > 0 ? nLft : 0); 1328*cdf0e10cSrcweir const sal_uInt16 nR = static_cast< sal_uInt16 >(nRgt > 0 ? nRgt : 0); 1329*cdf0e10cSrcweir 1330*cdf0e10cSrcweir SvxColumnItem aColItem(nNum, nL, nR); 1331*cdf0e10cSrcweir 1332*cdf0e10cSrcweir sal_uInt16 nStart = 0, 1333*cdf0e10cSrcweir nEnd; 1334*cdf0e10cSrcweir 1335*cdf0e10cSrcweir //columns in right-to-left tables need to be mirrored 1336*cdf0e10cSrcweir sal_Bool bIsTableRTL = 1337*cdf0e10cSrcweir IsTabColFromDoc() ? 1338*cdf0e10cSrcweir rSh.IsMouseTableRightToLeft(aTabColFromDocPos) 1339*cdf0e10cSrcweir : rSh.IsTableRightToLeft(); 1340*cdf0e10cSrcweir if(bIsTableRTL) 1341*cdf0e10cSrcweir { 1342*cdf0e10cSrcweir for ( sal_uInt16 i = aTabCols.Count(); i ; --i ) 1343*cdf0e10cSrcweir { 1344*cdf0e10cSrcweir const SwTabColsEntry& rEntry = aTabCols.GetEntry( i - 1 ); 1345*cdf0e10cSrcweir nEnd = (sal_uInt16)aTabCols.GetRight(); 1346*cdf0e10cSrcweir nEnd = nEnd - (sal_uInt16)rEntry.nPos; 1347*cdf0e10cSrcweir SvxColumnDescription aColDesc( nStart, nEnd, 1348*cdf0e10cSrcweir (sal_uInt16(aTabCols.GetRight() - rEntry.nMax)), 1349*cdf0e10cSrcweir (sal_uInt16(aTabCols.GetRight() - rEntry.nMin)), 1350*cdf0e10cSrcweir !aTabCols.IsHidden(i - 1) ); 1351*cdf0e10cSrcweir aColItem.Append(aColDesc); 1352*cdf0e10cSrcweir nStart = nEnd; 1353*cdf0e10cSrcweir } 1354*cdf0e10cSrcweir SvxColumnDescription aColDesc(nStart, 1355*cdf0e10cSrcweir aTabCols.GetRight() - aTabCols.GetLeft(), sal_True); 1356*cdf0e10cSrcweir aColItem.Append(aColDesc); 1357*cdf0e10cSrcweir } 1358*cdf0e10cSrcweir else 1359*cdf0e10cSrcweir { 1360*cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < aTabCols.Count(); ++i ) 1361*cdf0e10cSrcweir { 1362*cdf0e10cSrcweir const SwTabColsEntry& rEntry = aTabCols.GetEntry( i ); 1363*cdf0e10cSrcweir nEnd = static_cast< sal_uInt16 >(rEntry.nPos - aTabCols.GetLeft()); 1364*cdf0e10cSrcweir SvxColumnDescription aColDesc( nStart, nEnd, 1365*cdf0e10cSrcweir rEntry.nMin - aTabCols.GetLeft(), rEntry.nMax - aTabCols.GetLeft(), 1366*cdf0e10cSrcweir !aTabCols.IsHidden(i) ); 1367*cdf0e10cSrcweir aColItem.Append(aColDesc); 1368*cdf0e10cSrcweir nStart = nEnd; 1369*cdf0e10cSrcweir } 1370*cdf0e10cSrcweir SvxColumnDescription aColDesc(nStart, aTabCols.GetRight() - aTabCols.GetLeft(), 1371*cdf0e10cSrcweir 0, 0, 1372*cdf0e10cSrcweir sal_True); 1373*cdf0e10cSrcweir aColItem.Append(aColDesc); 1374*cdf0e10cSrcweir } 1375*cdf0e10cSrcweir rSet.Put(aColItem, nWhich); 1376*cdf0e10cSrcweir } 1377*cdf0e10cSrcweir else if ( bFrmSelection || nFrmType & ( FRMTYPE_COLUMN | FRMTYPE_COLSECT ) ) 1378*cdf0e10cSrcweir { 1379*cdf0e10cSrcweir // Aus Rahmen oder Seite ? 1380*cdf0e10cSrcweir sal_uInt16 nNum = 0; 1381*cdf0e10cSrcweir if(bFrmSelection) 1382*cdf0e10cSrcweir { 1383*cdf0e10cSrcweir const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt(); 1384*cdf0e10cSrcweir if(pFmt) 1385*cdf0e10cSrcweir nNum = pFmt->GetCol().GetNumCols(); 1386*cdf0e10cSrcweir } 1387*cdf0e10cSrcweir else 1388*cdf0e10cSrcweir nNum = rSh.GetCurColNum(); 1389*cdf0e10cSrcweir 1390*cdf0e10cSrcweir if( 1391*cdf0e10cSrcweir //eigentlich sollte FRMTYPE_COLSECT nicht enthalten sein, wenn der Rahmen selektiert ist! 1392*cdf0e10cSrcweir !bFrmSelection && 1393*cdf0e10cSrcweir nFrmType & FRMTYPE_COLSECT ) 1394*cdf0e10cSrcweir { 1395*cdf0e10cSrcweir const SwSection *pSect = rSh.GetAnySection(sal_False, pPt); 1396*cdf0e10cSrcweir ASSERT( pSect, "Welcher Bereich?"); 1397*cdf0e10cSrcweir if( pSect ) 1398*cdf0e10cSrcweir { 1399*cdf0e10cSrcweir SwSectionFmt *pFmt = pSect->GetFmt(); 1400*cdf0e10cSrcweir const SwFmtCol& rCol = pFmt->GetCol(); 1401*cdf0e10cSrcweir if(rSh.IsInRightToLeftText()) 1402*cdf0e10cSrcweir nNum = rCol.GetColumns().Count() - nNum; 1403*cdf0e10cSrcweir else 1404*cdf0e10cSrcweir --nNum; 1405*cdf0e10cSrcweir SvxColumnItem aColItem(nNum); 1406*cdf0e10cSrcweir SwRect aRect = rSh.GetAnyCurRect(RECT_SECTION_PRT, pPt); 1407*cdf0e10cSrcweir const SwRect aTmpRect = rSh.GetAnyCurRect(RECT_SECTION, pPt); 1408*cdf0e10cSrcweir 1409*cdf0e10cSrcweir ::lcl_FillSvxColumn(rCol, sal_uInt16(bVerticalWriting ? aRect.Height() : aRect.Width()), aColItem, 0); 1410*cdf0e10cSrcweir 1411*cdf0e10cSrcweir if(bVerticalWriting) 1412*cdf0e10cSrcweir { 1413*cdf0e10cSrcweir aRect.Pos() += Point(aTmpRect.Left(), aTmpRect.Top()); 1414*cdf0e10cSrcweir aRect.Pos().Y() -= rPageRect.Top(); 1415*cdf0e10cSrcweir aColItem.SetLeft ((sal_uInt16)(aRect.Top())); 1416*cdf0e10cSrcweir aColItem.SetRight((sal_uInt16)(nPageHeight - aRect.Bottom() )); 1417*cdf0e10cSrcweir } 1418*cdf0e10cSrcweir else 1419*cdf0e10cSrcweir { 1420*cdf0e10cSrcweir aRect.Pos() += aTmpRect.Pos(); 1421*cdf0e10cSrcweir 1422*cdf0e10cSrcweir // PAGES01 1423*cdf0e10cSrcweir // make relative to page position: 1424*cdf0e10cSrcweir aColItem.SetLeft ((sal_uInt16)( aRect.Left() - rPageRect.Left() )); 1425*cdf0e10cSrcweir aColItem.SetRight((sal_uInt16)( rPageRect.Right() - aRect.Right())); 1426*cdf0e10cSrcweir } 1427*cdf0e10cSrcweir aColItem.SetOrtho(aColItem.CalcOrtho()); 1428*cdf0e10cSrcweir 1429*cdf0e10cSrcweir rSet.Put(aColItem, nWhich); 1430*cdf0e10cSrcweir } 1431*cdf0e10cSrcweir } 1432*cdf0e10cSrcweir else if( bFrmSelection || nFrmType & FRMTYPE_FLY_ANY ) 1433*cdf0e10cSrcweir { 1434*cdf0e10cSrcweir // Spalten in Rahmen 1435*cdf0e10cSrcweir if ( nNum ) 1436*cdf0e10cSrcweir { 1437*cdf0e10cSrcweir const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt() ; 1438*cdf0e10cSrcweir 1439*cdf0e10cSrcweir const SwFmtCol& rCol = pFmt->GetCol(); 1440*cdf0e10cSrcweir if(rSh.IsInRightToLeftText()) 1441*cdf0e10cSrcweir nNum = rCol.GetColumns().Count() - nNum; 1442*cdf0e10cSrcweir else 1443*cdf0e10cSrcweir nNum--; 1444*cdf0e10cSrcweir SvxColumnItem aColItem(nNum); 1445*cdf0e10cSrcweir const SwRect &rSizeRect = rSh.GetAnyCurRect(RECT_FLY_PRT_EMBEDDED, pPt); 1446*cdf0e10cSrcweir 1447*cdf0e10cSrcweir sal_Bool bUseVertical = bFrameHasVerticalColumns || (!bFrmSelection && bVerticalWriting); 1448*cdf0e10cSrcweir const long lWidth = bUseVertical ? rSizeRect.Height() : rSizeRect.Width(); 1449*cdf0e10cSrcweir const SwRect &rRect = rSh.GetAnyCurRect(RECT_FLY_EMBEDDED, pPt); 1450*cdf0e10cSrcweir long nDist2 = ((bUseVertical ? rRect.Height() : rRect.Width()) - lWidth) /2; 1451*cdf0e10cSrcweir ::lcl_FillSvxColumn(rCol, sal_uInt16(lWidth), aColItem, nDist2); 1452*cdf0e10cSrcweir 1453*cdf0e10cSrcweir SfxItemSet aFrameSet(GetPool(), RES_LR_SPACE, RES_LR_SPACE); 1454*cdf0e10cSrcweir rSh.GetFlyFrmAttr( aFrameSet ); 1455*cdf0e10cSrcweir 1456*cdf0e10cSrcweir if(bUseVertical) 1457*cdf0e10cSrcweir { 1458*cdf0e10cSrcweir aColItem.SetLeft ((sal_uInt16)(rRect.Top()- rPageRect.Top())); 1459*cdf0e10cSrcweir aColItem.SetRight((sal_uInt16)(nPageHeight + rPageRect.Top() - rRect.Bottom() )); 1460*cdf0e10cSrcweir } 1461*cdf0e10cSrcweir else 1462*cdf0e10cSrcweir { 1463*cdf0e10cSrcweir aColItem.SetLeft ((sal_uInt16)(rRect.Left() - rPageRect.Left() )); 1464*cdf0e10cSrcweir aColItem.SetRight((sal_uInt16)(rPageRect.Right() - rRect.Right() )); 1465*cdf0e10cSrcweir } 1466*cdf0e10cSrcweir 1467*cdf0e10cSrcweir aColItem.SetOrtho(aColItem.CalcOrtho()); 1468*cdf0e10cSrcweir 1469*cdf0e10cSrcweir rSet.Put(aColItem, nWhich); 1470*cdf0e10cSrcweir } 1471*cdf0e10cSrcweir else 1472*cdf0e10cSrcweir rSet.DisableItem(nWhich); 1473*cdf0e10cSrcweir } 1474*cdf0e10cSrcweir else 1475*cdf0e10cSrcweir { // Spalten auf der Seite 1476*cdf0e10cSrcweir const SwFrmFmt& rMaster = rDesc.GetMaster(); 1477*cdf0e10cSrcweir SwFmtCol aCol(rMaster.GetCol()); 1478*cdf0e10cSrcweir if(rFrameDir.GetValue() == FRMDIR_HORI_RIGHT_TOP) 1479*cdf0e10cSrcweir nNum = aCol.GetColumns().Count() - nNum; 1480*cdf0e10cSrcweir else 1481*cdf0e10cSrcweir nNum--; 1482*cdf0e10cSrcweir 1483*cdf0e10cSrcweir SvxColumnItem aColItem(nNum); 1484*cdf0e10cSrcweir const SwRect aPrtRect = rSh.GetAnyCurRect(RECT_PAGE_PRT, pPt); 1485*cdf0e10cSrcweir const SvxBoxItem& rBox = (const SvxBoxItem&)rMaster.GetFmtAttr(RES_BOX); 1486*cdf0e10cSrcweir long nDist = rBox.GetDistance(); 1487*cdf0e10cSrcweir ::lcl_FillSvxColumn(aCol, 1488*cdf0e10cSrcweir sal_uInt16(bVerticalWriting ? aPrtRect.Height() : aPrtRect.Width() ), 1489*cdf0e10cSrcweir aColItem, nDist); 1490*cdf0e10cSrcweir 1491*cdf0e10cSrcweir if(bBrowse) 1492*cdf0e10cSrcweir { 1493*cdf0e10cSrcweir aColItem.SetLeft((sal_uInt16)rPagePrtRect.Left()); 1494*cdf0e10cSrcweir aColItem.SetRight(sal_uInt16(nPageWidth - rPagePrtRect.Right())); 1495*cdf0e10cSrcweir } 1496*cdf0e10cSrcweir else 1497*cdf0e10cSrcweir { 1498*cdf0e10cSrcweir aColItem.SetLeft (aPageLRSpace.GetLeft()); 1499*cdf0e10cSrcweir aColItem.SetRight(aPageLRSpace.GetRight()); 1500*cdf0e10cSrcweir } 1501*cdf0e10cSrcweir aColItem.SetOrtho(aColItem.CalcOrtho()); 1502*cdf0e10cSrcweir 1503*cdf0e10cSrcweir rSet.Put(aColItem, nWhich); 1504*cdf0e10cSrcweir } 1505*cdf0e10cSrcweir } 1506*cdf0e10cSrcweir else 1507*cdf0e10cSrcweir rSet.DisableItem(nWhich); 1508*cdf0e10cSrcweir break; 1509*cdf0e10cSrcweir } 1510*cdf0e10cSrcweir case SID_RULER_ROWS : 1511*cdf0e10cSrcweir case SID_RULER_ROWS_VERTICAL: 1512*cdf0e10cSrcweir { 1513*cdf0e10cSrcweir sal_Bool bFrameHasVerticalColumns(sal_False); 1514*cdf0e10cSrcweir { 1515*cdf0e10cSrcweir sal_Bool bFrameRTL; 1516*cdf0e10cSrcweir sal_Bool bFrameVertL2R; 1517*cdf0e10cSrcweir bFrameHasVerticalColumns = rSh.IsFrmVertical(sal_False, bFrameRTL, bFrameVertL2R) && 1518*cdf0e10cSrcweir bFrmSelection; 1519*cdf0e10cSrcweir } 1520*cdf0e10cSrcweir 1521*cdf0e10cSrcweir if( ( (SID_RULER_ROWS == nWhich) && 1522*cdf0e10cSrcweir ((!bVerticalWriting && !bFrmSelection) || (bFrmSelection && !bFrameHasVerticalColumns)) ) || 1523*cdf0e10cSrcweir ((SID_RULER_ROWS_VERTICAL == nWhich) && 1524*cdf0e10cSrcweir ((bVerticalWriting && !bFrmSelection) || bFrameHasVerticalColumns))) 1525*cdf0e10cSrcweir rSet.DisableItem(nWhich); 1526*cdf0e10cSrcweir else if ( IsTabRowFromDoc() || 1527*cdf0e10cSrcweir ( rSh.GetTableFmt() && !bFrmSelection && 1528*cdf0e10cSrcweir !(nFrmType & FRMTYPE_COLSECT ) ) ) 1529*cdf0e10cSrcweir { 1530*cdf0e10cSrcweir SwTabCols aTabCols; 1531*cdf0e10cSrcweir //no current value necessary 1532*cdf0e10cSrcweir sal_uInt16 nNum = 0; 1533*cdf0e10cSrcweir if ( 0 != ( bSetTabRowFromDoc = IsTabRowFromDoc() ) ) 1534*cdf0e10cSrcweir { 1535*cdf0e10cSrcweir rSh.GetMouseTabRows( aTabCols, aTabColFromDocPos ); 1536*cdf0e10cSrcweir } 1537*cdf0e10cSrcweir else 1538*cdf0e10cSrcweir { 1539*cdf0e10cSrcweir rSh.GetTabRows( aTabCols ); 1540*cdf0e10cSrcweir } 1541*cdf0e10cSrcweir 1542*cdf0e10cSrcweir // ASSERT(nNum <= aTabCols.Count(), "TabCol not found"); 1543*cdf0e10cSrcweir const int nLft = aTabCols.GetLeftMin(); 1544*cdf0e10cSrcweir const int nRgt = (sal_uInt16)(bVerticalWriting ? nPageWidth : nPageHeight) - 1545*cdf0e10cSrcweir (aTabCols.GetLeftMin() + 1546*cdf0e10cSrcweir aTabCols.GetRight()); 1547*cdf0e10cSrcweir 1548*cdf0e10cSrcweir const sal_uInt16 nL = static_cast< sal_uInt16 >(nLft > 0 ? nLft : 0); 1549*cdf0e10cSrcweir const sal_uInt16 nR = static_cast< sal_uInt16 >(nRgt > 0 ? nRgt : 0); 1550*cdf0e10cSrcweir 1551*cdf0e10cSrcweir SvxColumnItem aColItem(nNum, nL, nR); 1552*cdf0e10cSrcweir 1553*cdf0e10cSrcweir sal_uInt16 nStart = 0, 1554*cdf0e10cSrcweir nEnd; 1555*cdf0e10cSrcweir 1556*cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < aTabCols.Count(); ++i ) 1557*cdf0e10cSrcweir { 1558*cdf0e10cSrcweir const SwTabColsEntry& rEntry = aTabCols.GetEntry( i ); 1559*cdf0e10cSrcweir if(bVerticalWriting) 1560*cdf0e10cSrcweir { 1561*cdf0e10cSrcweir nEnd = sal_uInt16(aTabCols.GetRight() - rEntry.nPos); 1562*cdf0e10cSrcweir SvxColumnDescription aColDesc( nStart, nEnd, 1563*cdf0e10cSrcweir aTabCols.GetRight() - rEntry.nMax, aTabCols.GetRight() - rEntry.nMin, 1564*cdf0e10cSrcweir !aTabCols.IsHidden(i) ); 1565*cdf0e10cSrcweir aColItem.Append(aColDesc); 1566*cdf0e10cSrcweir } 1567*cdf0e10cSrcweir else 1568*cdf0e10cSrcweir { 1569*cdf0e10cSrcweir nEnd = sal_uInt16(rEntry.nPos - aTabCols.GetLeft()); 1570*cdf0e10cSrcweir SvxColumnDescription aColDesc( nStart, nEnd, 1571*cdf0e10cSrcweir sal_uInt16(rEntry.nMin - aTabCols.GetLeft()), sal_uInt16(rEntry.nMax - aTabCols.GetLeft()), 1572*cdf0e10cSrcweir !aTabCols.IsHidden(i) ); 1573*cdf0e10cSrcweir aColItem.Append(aColDesc); 1574*cdf0e10cSrcweir } 1575*cdf0e10cSrcweir nStart = nEnd; 1576*cdf0e10cSrcweir } 1577*cdf0e10cSrcweir if(bVerticalWriting) 1578*cdf0e10cSrcweir nEnd = static_cast< sal_uInt16 >(aTabCols.GetRight()); 1579*cdf0e10cSrcweir else 1580*cdf0e10cSrcweir nEnd = static_cast< sal_uInt16 >(aTabCols.GetLeft()); 1581*cdf0e10cSrcweir // put a position protection when the last row cannot be moved 1582*cdf0e10cSrcweir // due to a page break inside of a row 1583*cdf0e10cSrcweir if(!aTabCols.IsLastRowAllowedToChange()) 1584*cdf0e10cSrcweir bPutContentProtection = sal_True; 1585*cdf0e10cSrcweir 1586*cdf0e10cSrcweir SvxColumnDescription aColDesc( nStart, nEnd, 1587*cdf0e10cSrcweir aTabCols.GetRight(), aTabCols.GetRight(), 1588*cdf0e10cSrcweir sal_False ); 1589*cdf0e10cSrcweir aColItem.Append(aColDesc); 1590*cdf0e10cSrcweir 1591*cdf0e10cSrcweir rSet.Put(aColItem, nWhich); 1592*cdf0e10cSrcweir } 1593*cdf0e10cSrcweir else 1594*cdf0e10cSrcweir rSet.DisableItem(nWhich); 1595*cdf0e10cSrcweir } 1596*cdf0e10cSrcweir break; 1597*cdf0e10cSrcweir case SID_RULER_PAGE_POS: 1598*cdf0e10cSrcweir { 1599*cdf0e10cSrcweir // PAGES01 1600*cdf0e10cSrcweir SvxPagePosSizeItem aPagePosSize( 1601*cdf0e10cSrcweir Point( rPageRect.Left(), rPageRect.Top()) , nPageWidth, nPageHeight); 1602*cdf0e10cSrcweir 1603*cdf0e10cSrcweir rSet.Put(aPagePosSize); 1604*cdf0e10cSrcweir break; 1605*cdf0e10cSrcweir } 1606*cdf0e10cSrcweir case SID_RULER_LR_MIN_MAX: 1607*cdf0e10cSrcweir { 1608*cdf0e10cSrcweir Rectangle aRectangle; 1609*cdf0e10cSrcweir if( ( nFrmType & FRMTYPE_COLSECT ) && !IsTabColFromDoc() && 1610*cdf0e10cSrcweir ( nFrmType & ( FRMTYPE_TABLE|FRMTYPE_COLUMN ) ) ) 1611*cdf0e10cSrcweir { 1612*cdf0e10cSrcweir if( nFrmType & FRMTYPE_TABLE ) 1613*cdf0e10cSrcweir { 1614*cdf0e10cSrcweir const sal_uInt16 nNum = rSh.GetCurTabColNum(); 1615*cdf0e10cSrcweir SwTabCols aTabCols; 1616*cdf0e10cSrcweir rSh.GetTabCols( aTabCols ); 1617*cdf0e10cSrcweir 1618*cdf0e10cSrcweir const int nLft = aTabCols.GetLeftMin() + aTabCols.GetLeft(); 1619*cdf0e10cSrcweir const int nRgt = (sal_uInt16)nPageWidth -(aTabCols.GetLeftMin() + aTabCols.GetRight()); 1620*cdf0e10cSrcweir 1621*cdf0e10cSrcweir const sal_uInt16 nL = static_cast< sal_uInt16 >(nLft > 0 ? nLft : 0); 1622*cdf0e10cSrcweir const sal_uInt16 nR = static_cast< sal_uInt16 >(nRgt > 0 ? nRgt : 0); 1623*cdf0e10cSrcweir 1624*cdf0e10cSrcweir aRectangle.Left() = nL; 1625*cdf0e10cSrcweir if(nNum > 1) 1626*cdf0e10cSrcweir aRectangle.Left() += aTabCols[nNum - 2]; 1627*cdf0e10cSrcweir if(nNum) 1628*cdf0e10cSrcweir aRectangle.Left() += MINLAY; 1629*cdf0e10cSrcweir if(aTabCols.Count() <= nNum + 1 ) 1630*cdf0e10cSrcweir aRectangle.Right() = nR; 1631*cdf0e10cSrcweir else 1632*cdf0e10cSrcweir aRectangle.Right() = nPageWidth - (nL + aTabCols[nNum + 1]); 1633*cdf0e10cSrcweir 1634*cdf0e10cSrcweir if(nNum < aTabCols.Count()) 1635*cdf0e10cSrcweir aRectangle.Right() += MINLAY; 1636*cdf0e10cSrcweir } 1637*cdf0e10cSrcweir else 1638*cdf0e10cSrcweir { 1639*cdf0e10cSrcweir const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt(); 1640*cdf0e10cSrcweir const SwFmtCol* pCols = pFmt ? &pFmt->GetCol(): 1641*cdf0e10cSrcweir &rDesc.GetMaster().GetCol(); 1642*cdf0e10cSrcweir const SwColumns& rCols = pCols->GetColumns(); 1643*cdf0e10cSrcweir sal_uInt16 nNum = rSh.GetCurOutColNum(); 1644*cdf0e10cSrcweir sal_uInt16 nCount = Min(sal_uInt16(nNum + 1), rCols.Count()); 1645*cdf0e10cSrcweir const SwRect aRect( rSh.GetAnyCurRect( pFmt 1646*cdf0e10cSrcweir ? RECT_FLY_PRT_EMBEDDED 1647*cdf0e10cSrcweir : RECT_PAGE_PRT, pPt )); 1648*cdf0e10cSrcweir const SwRect aAbsRect( rSh.GetAnyCurRect( pFmt 1649*cdf0e10cSrcweir ? RECT_FLY_EMBEDDED 1650*cdf0e10cSrcweir : RECT_PAGE, pPt )); 1651*cdf0e10cSrcweir 1652*cdf0e10cSrcweir //die Breite im Rahmen bzw. innerhalbe der Seitenraender 1653*cdf0e10cSrcweir const sal_uInt16 nTotalWidth = (sal_uInt16)aRect.Width(); 1654*cdf0e10cSrcweir //die gesamte Rahmenbreite - die Differenz ist der doppelte Abstand zum Rand 1655*cdf0e10cSrcweir const sal_uInt16 nOuterWidth = (sal_uInt16)aAbsRect.Width(); 1656*cdf0e10cSrcweir int nWidth = 0, 1657*cdf0e10cSrcweir nStart = 0, 1658*cdf0e10cSrcweir nEnd = 0; 1659*cdf0e10cSrcweir aRectangle.Left() = 0; 1660*cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < nCount; ++i ) 1661*cdf0e10cSrcweir { 1662*cdf0e10cSrcweir SwColumn* pCol = rCols[i]; 1663*cdf0e10cSrcweir nStart = pCol->GetLeft() + nWidth; 1664*cdf0e10cSrcweir if(i == nNum - 2) 1665*cdf0e10cSrcweir aRectangle.Left() = nStart; 1666*cdf0e10cSrcweir nWidth += pCols->CalcColWidth( i, nTotalWidth ); 1667*cdf0e10cSrcweir nEnd = nWidth - pCol->GetRight(); 1668*cdf0e10cSrcweir } 1669*cdf0e10cSrcweir aRectangle.Right() = rPageRect.Right() - nEnd; 1670*cdf0e10cSrcweir aRectangle.Left() -= rPageRect.Left(); 1671*cdf0e10cSrcweir 1672*cdf0e10cSrcweir if(nNum > 1) 1673*cdf0e10cSrcweir { 1674*cdf0e10cSrcweir aRectangle.Left() += MINLAY; 1675*cdf0e10cSrcweir aRectangle.Left() += aRect.Left(); 1676*cdf0e10cSrcweir } 1677*cdf0e10cSrcweir if(pFmt) //Bereich in Rahmen - hier darf man bis zum Rand 1678*cdf0e10cSrcweir aRectangle.Left() = aRectangle.Right() = 0; 1679*cdf0e10cSrcweir else 1680*cdf0e10cSrcweir { 1681*cdf0e10cSrcweir // das Rechteck an die richtige absolute Position verschieben 1682*cdf0e10cSrcweir aRectangle.Left() += aAbsRect.Left(); 1683*cdf0e10cSrcweir aRectangle.Right() -= aAbsRect.Left(); 1684*cdf0e10cSrcweir // Abstand zur Umrandung mit einbeziehen 1685*cdf0e10cSrcweir aRectangle.Right() -= (nOuterWidth - nTotalWidth) / 2; 1686*cdf0e10cSrcweir } 1687*cdf0e10cSrcweir 1688*cdf0e10cSrcweir if(nNum < rCols.Count()) 1689*cdf0e10cSrcweir { 1690*cdf0e10cSrcweir aRectangle.Right() += MINLAY; 1691*cdf0e10cSrcweir } 1692*cdf0e10cSrcweir else 1693*cdf0e10cSrcweir // rechts ist jetzt nur noch der Seitenrand 1694*cdf0e10cSrcweir aRectangle.Right() = 0; 1695*cdf0e10cSrcweir 1696*cdf0e10cSrcweir 1697*cdf0e10cSrcweir } 1698*cdf0e10cSrcweir } 1699*cdf0e10cSrcweir else if ( ((nFrmType & FRMTYPE_TABLE) || IsTabColFromDoc()) && 1700*cdf0e10cSrcweir !bFrmSelection ) 1701*cdf0e10cSrcweir { 1702*cdf0e10cSrcweir sal_Bool bColumn; 1703*cdf0e10cSrcweir if ( IsTabColFromDoc() ) 1704*cdf0e10cSrcweir bColumn = rSh.GetCurMouseColNum( aTabColFromDocPos ) != 0; 1705*cdf0e10cSrcweir else 1706*cdf0e10cSrcweir bColumn = (nFrmType & (FRMTYPE_COLUMN|FRMTYPE_FLY_ANY| 1707*cdf0e10cSrcweir FRMTYPE_COLSECTOUTTAB)) ? 1708*cdf0e10cSrcweir sal_True : sal_False; 1709*cdf0e10cSrcweir if ( !bColumn ) 1710*cdf0e10cSrcweir { 1711*cdf0e10cSrcweir if( nFrmType & FRMTYPE_FLY_ANY && IsTabColFromDoc() ) 1712*cdf0e10cSrcweir { 1713*cdf0e10cSrcweir SwRect aRect( rSh.GetAnyCurRect( 1714*cdf0e10cSrcweir RECT_FLY_PRT_EMBEDDED, pPt ) ); 1715*cdf0e10cSrcweir aRect.Pos() += rSh.GetAnyCurRect( RECT_FLY_EMBEDDED, 1716*cdf0e10cSrcweir pPt ).Pos(); 1717*cdf0e10cSrcweir 1718*cdf0e10cSrcweir aRectangle.Left() = aRect.Left() - rPageRect.Left(); 1719*cdf0e10cSrcweir aRectangle.Right() = rPageRect.Right() - aRect.Right(); 1720*cdf0e10cSrcweir } 1721*cdf0e10cSrcweir else if( bBrowse ) 1722*cdf0e10cSrcweir { 1723*cdf0e10cSrcweir aRectangle.Left() = rPagePrtRect.Left(); 1724*cdf0e10cSrcweir aRectangle.Right() = nPageWidth - rPagePrtRect.Right(); 1725*cdf0e10cSrcweir } 1726*cdf0e10cSrcweir else 1727*cdf0e10cSrcweir { 1728*cdf0e10cSrcweir aRectangle.Left() = aPageLRSpace.GetLeft(); 1729*cdf0e10cSrcweir aRectangle.Right() = aPageLRSpace.GetRight(); 1730*cdf0e10cSrcweir } 1731*cdf0e10cSrcweir } 1732*cdf0e10cSrcweir else 1733*cdf0e10cSrcweir { //hier nur fuer Tabelle in mehrspaltigen Seiten und Rahmen 1734*cdf0e10cSrcweir sal_Bool bSectOutTbl = (nFrmType & FRMTYPE_TABLE) ? sal_True : sal_False; 1735*cdf0e10cSrcweir sal_Bool bFrame = (nFrmType & FRMTYPE_FLY_ANY) ? sal_True : sal_False; 1736*cdf0e10cSrcweir sal_Bool bColSct = (nFrmType & ( bSectOutTbl 1737*cdf0e10cSrcweir ? FRMTYPE_COLSECTOUTTAB 1738*cdf0e10cSrcweir : FRMTYPE_COLSECT ) 1739*cdf0e10cSrcweir ) ? sal_True : sal_False; 1740*cdf0e10cSrcweir //Damit man auch mit der Mouse ziehen kann, 1741*cdf0e10cSrcweir //ohne in der Tabelle zu stehen 1742*cdf0e10cSrcweir CurRectType eRecType = RECT_PAGE_PRT; 1743*cdf0e10cSrcweir sal_uInt16 nNum = IsTabColFromDoc() ? 1744*cdf0e10cSrcweir rSh.GetCurMouseColNum( aTabColFromDocPos ): 1745*cdf0e10cSrcweir rSh.GetCurOutColNum(); 1746*cdf0e10cSrcweir const SwFrmFmt* pFmt = NULL; 1747*cdf0e10cSrcweir if( bColSct ) 1748*cdf0e10cSrcweir { 1749*cdf0e10cSrcweir eRecType = bSectOutTbl ? RECT_OUTTABSECTION 1750*cdf0e10cSrcweir : RECT_SECTION; 1751*cdf0e10cSrcweir const SwSection *pSect = rSh.GetAnySection( bSectOutTbl, pPt ); 1752*cdf0e10cSrcweir ASSERT( pSect, "Welcher Bereich?"); 1753*cdf0e10cSrcweir pFmt = pSect->GetFmt(); 1754*cdf0e10cSrcweir } 1755*cdf0e10cSrcweir else if( bFrame ) 1756*cdf0e10cSrcweir { 1757*cdf0e10cSrcweir pFmt = rSh.GetFlyFrmFmt(); 1758*cdf0e10cSrcweir eRecType = RECT_FLY_PRT_EMBEDDED; 1759*cdf0e10cSrcweir } 1760*cdf0e10cSrcweir 1761*cdf0e10cSrcweir const SwFmtCol* pCols = pFmt ? &pFmt->GetCol(): 1762*cdf0e10cSrcweir &rDesc.GetMaster().GetCol(); 1763*cdf0e10cSrcweir const SwColumns& rCols = pCols->GetColumns(); 1764*cdf0e10cSrcweir const sal_uInt16 nBorder = pFmt ? pFmt->GetBox().GetDistance() : 1765*cdf0e10cSrcweir rDesc.GetMaster().GetBox().GetDistance(); 1766*cdf0e10cSrcweir 1767*cdf0e10cSrcweir /* RECT_FLY_PRT_EMBEDDED returns the relative position to 1768*cdf0e10cSrcweir RECT_FLY_EMBEDDED 1769*cdf0e10cSrcweir the absolute position must be added here 1770*cdf0e10cSrcweir */ 1771*cdf0e10cSrcweir SwRect aRect( rSh.GetAnyCurRect( eRecType, pPt ) ); 1772*cdf0e10cSrcweir if(RECT_FLY_PRT_EMBEDDED == eRecType) 1773*cdf0e10cSrcweir aRect.Pos() += rSh.GetAnyCurRect( RECT_FLY_EMBEDDED, 1774*cdf0e10cSrcweir pPt ).Pos(); 1775*cdf0e10cSrcweir 1776*cdf0e10cSrcweir const sal_uInt16 nTotalWidth = (sal_uInt16)aRect.Width(); 1777*cdf0e10cSrcweir //nStart und nEnd initialisieren fuer nNum == 0 1778*cdf0e10cSrcweir int nWidth = 0, 1779*cdf0e10cSrcweir nStart = 0, 1780*cdf0e10cSrcweir nEnd = nTotalWidth; 1781*cdf0e10cSrcweir 1782*cdf0e10cSrcweir if( nNum > rCols.Count() ) 1783*cdf0e10cSrcweir { 1784*cdf0e10cSrcweir ASSERT( !this, "es wird auf dem falschen FmtCol gearbeitet!" ); 1785*cdf0e10cSrcweir nNum = rCols.Count(); 1786*cdf0e10cSrcweir } 1787*cdf0e10cSrcweir 1788*cdf0e10cSrcweir for( sal_uInt16 i = 0; i < nNum; ++i ) 1789*cdf0e10cSrcweir { 1790*cdf0e10cSrcweir SwColumn* pCol = rCols[i]; 1791*cdf0e10cSrcweir nStart = pCol->GetLeft() + nWidth; 1792*cdf0e10cSrcweir nWidth += pCols->CalcColWidth( i, nTotalWidth ); 1793*cdf0e10cSrcweir nEnd = nWidth - pCol->GetRight(); 1794*cdf0e10cSrcweir } 1795*cdf0e10cSrcweir if( bFrame | bColSct ) 1796*cdf0e10cSrcweir { 1797*cdf0e10cSrcweir aRectangle.Left() = aRect.Left() - rPageRect.Left() + nStart; 1798*cdf0e10cSrcweir aRectangle.Right() = nPageWidth - aRectangle.Left() - nEnd + nStart; 1799*cdf0e10cSrcweir } 1800*cdf0e10cSrcweir else if(!bBrowse) 1801*cdf0e10cSrcweir { 1802*cdf0e10cSrcweir aRectangle.Left() = aPageLRSpace.GetLeft() + nStart; 1803*cdf0e10cSrcweir aRectangle.Right() = nPageWidth - nEnd - aPageLRSpace.GetLeft(); 1804*cdf0e10cSrcweir } 1805*cdf0e10cSrcweir else 1806*cdf0e10cSrcweir { 1807*cdf0e10cSrcweir long nLeft = rPagePrtRect.Left(); 1808*cdf0e10cSrcweir aRectangle.Left() = nStart + nLeft; 1809*cdf0e10cSrcweir aRectangle.Right() = nPageWidth - nEnd - nLeft; 1810*cdf0e10cSrcweir } 1811*cdf0e10cSrcweir if(!bFrame) 1812*cdf0e10cSrcweir { 1813*cdf0e10cSrcweir aRectangle.Left() += nBorder; 1814*cdf0e10cSrcweir aRectangle.Right() -= nBorder; 1815*cdf0e10cSrcweir } 1816*cdf0e10cSrcweir } 1817*cdf0e10cSrcweir } 1818*cdf0e10cSrcweir else if ( nFrmType & ( FRMTYPE_HEADER | FRMTYPE_FOOTER )) 1819*cdf0e10cSrcweir { 1820*cdf0e10cSrcweir aRectangle.Left() = aPageLRSpace.GetLeft(); 1821*cdf0e10cSrcweir aRectangle.Right() = aPageLRSpace.GetRight(); 1822*cdf0e10cSrcweir } 1823*cdf0e10cSrcweir else 1824*cdf0e10cSrcweir aRectangle.Left() = aRectangle.Right() = 0; 1825*cdf0e10cSrcweir 1826*cdf0e10cSrcweir SfxRectangleItem aLR( SID_RULER_LR_MIN_MAX , aRectangle); 1827*cdf0e10cSrcweir rSet.Put(aLR); 1828*cdf0e10cSrcweir } 1829*cdf0e10cSrcweir break; 1830*cdf0e10cSrcweir case SID_RULER_PROTECT: 1831*cdf0e10cSrcweir { 1832*cdf0e10cSrcweir if(bFrmSelection) 1833*cdf0e10cSrcweir { 1834*cdf0e10cSrcweir sal_uInt8 nProtect = pWrtShell->IsSelObjProtected( FLYPROTECT_SIZE|FLYPROTECT_POS|FLYPROTECT_CONTENT ); 1835*cdf0e10cSrcweir 1836*cdf0e10cSrcweir SvxProtectItem aProt(SID_RULER_PROTECT); 1837*cdf0e10cSrcweir aProt.SetCntntProtect((nProtect & FLYPROTECT_CONTENT) != 0); 1838*cdf0e10cSrcweir aProt.SetSizeProtect ((nProtect & FLYPROTECT_SIZE) != 0); 1839*cdf0e10cSrcweir aProt.SetPosProtect ((nProtect & FLYPROTECT_POS) != 0); 1840*cdf0e10cSrcweir rSet.Put(aProt); 1841*cdf0e10cSrcweir } 1842*cdf0e10cSrcweir else 1843*cdf0e10cSrcweir { 1844*cdf0e10cSrcweir SvxProtectItem aProtect(SID_RULER_PROTECT); 1845*cdf0e10cSrcweir if(bBrowse && !(nFrmType & (FRMTYPE_DRAWOBJ|FRMTYPE_COLUMN)) && !rSh.GetTableFmt()) 1846*cdf0e10cSrcweir { 1847*cdf0e10cSrcweir aProtect.SetSizeProtect(sal_True); 1848*cdf0e10cSrcweir aProtect.SetPosProtect(sal_True); 1849*cdf0e10cSrcweir } 1850*cdf0e10cSrcweir rSet.Put(aProtect); 1851*cdf0e10cSrcweir } 1852*cdf0e10cSrcweir } 1853*cdf0e10cSrcweir break; 1854*cdf0e10cSrcweir } 1855*cdf0e10cSrcweir nWhich = aIter.NextWhich(); 1856*cdf0e10cSrcweir } 1857*cdf0e10cSrcweir if(bPutContentProtection) 1858*cdf0e10cSrcweir { 1859*cdf0e10cSrcweir SvxProtectItem aProtect(SID_RULER_PROTECT); 1860*cdf0e10cSrcweir aProtect.SetCntntProtect(sal_True); 1861*cdf0e10cSrcweir rSet.Put(aProtect); 1862*cdf0e10cSrcweir } 1863*cdf0e10cSrcweir } 1864*cdf0e10cSrcweir 1865*cdf0e10cSrcweir 1866