xref: /aoo41x/main/sw/source/ui/uiview/viewtab.cxx (revision cdf0e10c)
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