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_svx.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir // INCLUDE --------------------------------------------------------------- 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir #include <string.h> 34*cdf0e10cSrcweir #include <limits.h> 35*cdf0e10cSrcweir #include <tools/shl.hxx> 36*cdf0e10cSrcweir #include <vcl/image.hxx> 37*cdf0e10cSrcweir #include <svl/eitem.hxx> 38*cdf0e10cSrcweir #include <svl/rectitem.hxx> 39*cdf0e10cSrcweir #include <sfx2/dispatch.hxx> 40*cdf0e10cSrcweir 41*cdf0e10cSrcweir #include <svl/smplhint.hxx> 42*cdf0e10cSrcweir 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir 47*cdf0e10cSrcweir #include <svx/dialogs.hrc> 48*cdf0e10cSrcweir #include <svx/dialmgr.hxx> 49*cdf0e10cSrcweir #include <svx/ruler.hxx> 50*cdf0e10cSrcweir #include "rlrcitem.hxx" 51*cdf0e10cSrcweir #include "svx/rulritem.hxx" 52*cdf0e10cSrcweir #include <editeng/tstpitem.hxx> 53*cdf0e10cSrcweir #include <editeng/lrspitem.hxx> 54*cdf0e10cSrcweir #include "editeng/protitem.hxx" 55*cdf0e10cSrcweir #ifndef _APP_HXX 56*cdf0e10cSrcweir #include <vcl/svapp.hxx> 57*cdf0e10cSrcweir #endif 58*cdf0e10cSrcweir #ifndef RULER_TAB_RTL 59*cdf0e10cSrcweir #define RULER_TAB_RTL ((sal_uInt16)0x0010) 60*cdf0e10cSrcweir #endif 61*cdf0e10cSrcweir 62*cdf0e10cSrcweir #include <comphelper/uieventslogger.hxx> 63*cdf0e10cSrcweir 64*cdf0e10cSrcweir namespace 65*cdf0e10cSrcweir { 66*cdf0e10cSrcweir void lcl_logRulerUse(const ::rtl::OUString& sURL) //#i99729# 67*cdf0e10cSrcweir { 68*cdf0e10cSrcweir using namespace ::com::sun::star; 69*cdf0e10cSrcweir util::URL aTargetURL; 70*cdf0e10cSrcweir aTargetURL.Complete = sURL; 71*cdf0e10cSrcweir aTargetURL.Main = sURL; 72*cdf0e10cSrcweir if(::comphelper::UiEventsLogger::isEnabled()) //#i88653# 73*cdf0e10cSrcweir { 74*cdf0e10cSrcweir ::rtl::OUString sAppName; 75*cdf0e10cSrcweir uno::Sequence<beans::PropertyValue> source; 76*cdf0e10cSrcweir ::comphelper::UiEventsLogger::appendDispatchOrigin(source, sAppName, ::rtl::OUString::createFromAscii("SfxRuler")); 77*cdf0e10cSrcweir ::comphelper::UiEventsLogger::logDispatch(aTargetURL, source); 78*cdf0e10cSrcweir } 79*cdf0e10cSrcweir } 80*cdf0e10cSrcweir } 81*cdf0e10cSrcweir 82*cdf0e10cSrcweir 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir // STATIC DATA ----------------------------------------------------------- 85*cdf0e10cSrcweir 86*cdf0e10cSrcweir #define CTRL_ITEM_COUNT 14 87*cdf0e10cSrcweir #define GAP 10 88*cdf0e10cSrcweir #define OBJECT_BORDER_COUNT 4 89*cdf0e10cSrcweir #define TAB_GAP 1 90*cdf0e10cSrcweir #define INDENT_GAP 2 91*cdf0e10cSrcweir #define INDENT_FIRST_LINE 4 92*cdf0e10cSrcweir #define INDENT_LEFT_MARGIN 5 93*cdf0e10cSrcweir #define INDENT_RIGHT_MARGIN 6 94*cdf0e10cSrcweir #define INDENT_LEFT_BORDER 2 95*cdf0e10cSrcweir #define INDENT_RIGHT_BORDER 3 96*cdf0e10cSrcweir #define INDENT_COUNT 5 //without the first two old values 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir #define PIXEL_H_ADJUST( l1, l2 ) PixelHAdjust(l1,l2) 99*cdf0e10cSrcweir 100*cdf0e10cSrcweir #ifdef DEBUGLIN 101*cdf0e10cSrcweir 102*cdf0e10cSrcweir inline long ToMM(Window *pWin, long lVal) 103*cdf0e10cSrcweir { 104*cdf0e10cSrcweir return pWin->PixelToLogic(Size(lVal, 0), MapMode(MAP_MM)).Width(); 105*cdf0e10cSrcweir } 106*cdf0e10cSrcweir 107*cdf0e10cSrcweir void Debug_Impl(Window *pWin, SvxColumnItem& rColItem) 108*cdf0e10cSrcweir { 109*cdf0e10cSrcweir String aTmp("Aktuell: "); 110*cdf0e10cSrcweir aTmp += rColItem.GetActColumn(); 111*cdf0e10cSrcweir aTmp += " ColLeft: "; 112*cdf0e10cSrcweir aTmp += String(ToMM(pWin, rColItem.GetLeft())); 113*cdf0e10cSrcweir aTmp += " ColRight: "; 114*cdf0e10cSrcweir aTmp += String(ToMM(pWin, rColItem.GetRight())); 115*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < rColItem.Count(); ++i) { 116*cdf0e10cSrcweir aTmp += " Start: "; 117*cdf0e10cSrcweir aTmp += String(ToMM(pWin, rColItem[i].nStart)); 118*cdf0e10cSrcweir aTmp += " End: "; 119*cdf0e10cSrcweir aTmp += String(ToMM(pWin, rColItem[i].nEnd)); 120*cdf0e10cSrcweir } 121*cdf0e10cSrcweir 122*cdf0e10cSrcweir InfoBox(0, aTmp).Execute(); 123*cdf0e10cSrcweir } 124*cdf0e10cSrcweir 125*cdf0e10cSrcweir void Debug_Impl(Window *pWin, const SvxLongLRSpaceItem& rLRSpace) 126*cdf0e10cSrcweir { 127*cdf0e10cSrcweir String aTmp("Left: "); 128*cdf0e10cSrcweir aTmp += pWin->PixelToLogic(Size(rLRSpace.GetLeft(), 0), MapMode(MAP_MM)).Width(); 129*cdf0e10cSrcweir aTmp += " Right: "; 130*cdf0e10cSrcweir aTmp +=pWin->PixelToLogic(Size(rLRSpace.GetRight(), 0), MapMode(MAP_MM)).Width(); 131*cdf0e10cSrcweir InfoBox(0, aTmp).Execute(); 132*cdf0e10cSrcweir } 133*cdf0e10cSrcweir 134*cdf0e10cSrcweir void Debug_Impl(Window *pWin, const SvxLongULSpaceItem& rULSpace) 135*cdf0e10cSrcweir { 136*cdf0e10cSrcweir String aTmp("Upper: "); 137*cdf0e10cSrcweir aTmp += pWin->PixelToLogic(Size(rULSpace.GetUpper(), 0), MapMode(MAP_MM)).Width(); 138*cdf0e10cSrcweir aTmp += " Lower: "; 139*cdf0e10cSrcweir aTmp += pWin->PixelToLogic(Size(rULSpace.GetLower(), 0), MapMode(MAP_MM)).Width(); 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir InfoBox(0, aTmp).Execute(); 142*cdf0e10cSrcweir } 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir void DebugTabStops_Impl(const SvxTabStopItem& rTabs) 145*cdf0e10cSrcweir { 146*cdf0e10cSrcweir String aTmp("Tabs: "); 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir // Def Tabs loeschen 149*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < rTabs.Count(); ++i) 150*cdf0e10cSrcweir { 151*cdf0e10cSrcweir aTmp += String(rTabs[i].GetTabPos() / 56); 152*cdf0e10cSrcweir aTmp += " : "; 153*cdf0e10cSrcweir } 154*cdf0e10cSrcweir InfoBox(0, aTmp).Execute(); 155*cdf0e10cSrcweir } 156*cdf0e10cSrcweir 157*cdf0e10cSrcweir void DebugParaMargin_Impl(const SvxLRSpaceItem& rLRSpace) 158*cdf0e10cSrcweir { 159*cdf0e10cSrcweir String aTmp("ParaLeft: "); 160*cdf0e10cSrcweir aTmp += rLRSpace.GetTxtLeft() / 56; 161*cdf0e10cSrcweir aTmp += " ParaRight: "; 162*cdf0e10cSrcweir aTmp += rLRSpace.GetRight() / 56; 163*cdf0e10cSrcweir aTmp += " FLI: "; 164*cdf0e10cSrcweir aTmp += rLRSpace.GetTxtFirstLineOfst() / 56; 165*cdf0e10cSrcweir InfoBox(0, aTmp).Execute(); 166*cdf0e10cSrcweir } 167*cdf0e10cSrcweir 168*cdf0e10cSrcweir #endif // DEBUGLIN 169*cdf0e10cSrcweir #ifdef DEBUG_RULER 170*cdf0e10cSrcweir #include <vcl/svapp.hxx> 171*cdf0e10cSrcweir #include <vcl/lstbox.hxx> 172*cdf0e10cSrcweir class RulerDebugWindow : public Window 173*cdf0e10cSrcweir { 174*cdf0e10cSrcweir ListBox aBox; 175*cdf0e10cSrcweir public: 176*cdf0e10cSrcweir RulerDebugWindow(Window* pParent) : 177*cdf0e10cSrcweir Window(pParent, WB_BORDER|WB_SIZEMOVE|WB_DIALOGCONTROL|WB_CLIPCHILDREN|WB_SYSTEMWINDOW), 178*cdf0e10cSrcweir aBox(this, WB_BORDER) 179*cdf0e10cSrcweir { 180*cdf0e10cSrcweir Size aOutput(200, 400); 181*cdf0e10cSrcweir SetOutputSizePixel(aOutput); 182*cdf0e10cSrcweir aBox.SetSizePixel(aOutput); 183*cdf0e10cSrcweir aBox.Show(); 184*cdf0e10cSrcweir Show(); 185*cdf0e10cSrcweir Size aParentSize(pParent->GetOutputSizePixel()); 186*cdf0e10cSrcweir Size aOwnSize(GetSizePixel()); 187*cdf0e10cSrcweir aParentSize.Width() -= aOwnSize.Width(); 188*cdf0e10cSrcweir aParentSize.Height() -= aOwnSize.Height(); 189*cdf0e10cSrcweir SetPosPixel(Point(aParentSize.Width(), aParentSize.Height())); 190*cdf0e10cSrcweir } 191*cdf0e10cSrcweir ~RulerDebugWindow(); 192*cdf0e10cSrcweir 193*cdf0e10cSrcweir ListBox& GetLBox() {return aBox;} 194*cdf0e10cSrcweir static void AddDebugText(const sal_Char* pDescription, const String& rText ); 195*cdf0e10cSrcweir }; 196*cdf0e10cSrcweir static RulerDebugWindow* pDebugWindow = 0; 197*cdf0e10cSrcweir 198*cdf0e10cSrcweir RulerDebugWindow::~RulerDebugWindow() 199*cdf0e10cSrcweir { 200*cdf0e10cSrcweir pDebugWindow = 0; 201*cdf0e10cSrcweir } 202*cdf0e10cSrcweir void RulerDebugWindow::AddDebugText(const sal_Char* pDescription, const String& rText ) 203*cdf0e10cSrcweir { 204*cdf0e10cSrcweir if(!pDebugWindow) 205*cdf0e10cSrcweir { 206*cdf0e10cSrcweir Window* pParent = Application::GetFocusWindow(); 207*cdf0e10cSrcweir while(pParent->GetParent()) 208*cdf0e10cSrcweir pParent = pParent->GetParent(); 209*cdf0e10cSrcweir pDebugWindow = new RulerDebugWindow(pParent); 210*cdf0e10cSrcweir } 211*cdf0e10cSrcweir String sContent(String::CreateFromAscii(pDescription)); 212*cdf0e10cSrcweir sContent += rText; 213*cdf0e10cSrcweir sal_uInt16 nPos = pDebugWindow->GetLBox().InsertEntry(sContent); 214*cdf0e10cSrcweir pDebugWindow->GetLBox().SelectEntryPos(nPos); 215*cdf0e10cSrcweir pDebugWindow->GrabFocus(); 216*cdf0e10cSrcweir } 217*cdf0e10cSrcweir 218*cdf0e10cSrcweir #define ADD_DEBUG_TEXT(cDescription, sValue) \ 219*cdf0e10cSrcweir RulerDebugWindow::AddDebugText(cDescription, sValue); 220*cdf0e10cSrcweir 221*cdf0e10cSrcweir #define REMOVE_DEBUG_WINDOW \ 222*cdf0e10cSrcweir delete pDebugWindow; \ 223*cdf0e10cSrcweir pDebugWindow = 0; 224*cdf0e10cSrcweir 225*cdf0e10cSrcweir #else 226*cdf0e10cSrcweir #define ADD_DEBUG_TEXT(cDescription, sValue) 227*cdf0e10cSrcweir #define REMOVE_DEBUG_WINDOW 228*cdf0e10cSrcweir #endif 229*cdf0e10cSrcweir 230*cdf0e10cSrcweir struct SvxRuler_Impl { 231*cdf0e10cSrcweir sal_uInt16 *pPercBuf; 232*cdf0e10cSrcweir sal_uInt16 *pBlockBuf; 233*cdf0e10cSrcweir sal_uInt16 nPercSize; 234*cdf0e10cSrcweir long nTotalDist; 235*cdf0e10cSrcweir long lOldWinPos; 236*cdf0e10cSrcweir long lMaxLeftLogic; 237*cdf0e10cSrcweir long lMaxRightLogic; 238*cdf0e10cSrcweir long lLastLMargin; 239*cdf0e10cSrcweir long lLastRMargin; 240*cdf0e10cSrcweir SvxProtectItem aProtectItem; 241*cdf0e10cSrcweir SfxBoolItem* pTextRTLItem; 242*cdf0e10cSrcweir sal_uInt16 nControlerItems; 243*cdf0e10cSrcweir sal_uInt16 nIdx; 244*cdf0e10cSrcweir sal_uInt16 nColLeftPix, nColRightPix; // Pixelwerte fuer linken / rechten Rand 245*cdf0e10cSrcweir // bei Spalten; gepuffert, um Umrechenfehler 246*cdf0e10cSrcweir // zu vermeiden. 247*cdf0e10cSrcweir // Muesste vielleicht fuer weitere Werte 248*cdf0e10cSrcweir // aufgebohrt werden 249*cdf0e10cSrcweir sal_Bool bIsTableRows : 1; // pColumnItem contains table rows instead of columns 250*cdf0e10cSrcweir //#i24363# tab stops relative to indent 251*cdf0e10cSrcweir sal_Bool bIsTabsRelativeToIndent : 1; // Tab stops relative to paragraph indent? 252*cdf0e10cSrcweir SvxRuler_Impl() : 253*cdf0e10cSrcweir pPercBuf(0), pBlockBuf(0), 254*cdf0e10cSrcweir nPercSize(0), nTotalDist(0), 255*cdf0e10cSrcweir lOldWinPos(0), 256*cdf0e10cSrcweir lMaxLeftLogic(0), lMaxRightLogic(0), 257*cdf0e10cSrcweir lLastLMargin(0), lLastRMargin(0), 258*cdf0e10cSrcweir aProtectItem(SID_RULER_PROTECT), 259*cdf0e10cSrcweir pTextRTLItem(0), nControlerItems(0), 260*cdf0e10cSrcweir nIdx(0), 261*cdf0e10cSrcweir nColLeftPix(0), nColRightPix(0), 262*cdf0e10cSrcweir 263*cdf0e10cSrcweir bIsTableRows(sal_False), 264*cdf0e10cSrcweir bIsTabsRelativeToIndent(sal_True) 265*cdf0e10cSrcweir { 266*cdf0e10cSrcweir } 267*cdf0e10cSrcweir ~SvxRuler_Impl() 268*cdf0e10cSrcweir { 269*cdf0e10cSrcweir nPercSize = 0; nTotalDist = 0; 270*cdf0e10cSrcweir delete[] pPercBuf; delete[] pBlockBuf; pPercBuf = 0; 271*cdf0e10cSrcweir delete pTextRTLItem; 272*cdf0e10cSrcweir } 273*cdf0e10cSrcweir void SetPercSize(sal_uInt16 nSize); 274*cdf0e10cSrcweir 275*cdf0e10cSrcweir }; 276*cdf0e10cSrcweir 277*cdf0e10cSrcweir 278*cdf0e10cSrcweir 279*cdf0e10cSrcweir void SvxRuler_Impl::SetPercSize(sal_uInt16 nSize) 280*cdf0e10cSrcweir { 281*cdf0e10cSrcweir if(nSize > nPercSize) 282*cdf0e10cSrcweir { 283*cdf0e10cSrcweir delete[] pPercBuf; 284*cdf0e10cSrcweir delete[] pBlockBuf; 285*cdf0e10cSrcweir pPercBuf = new sal_uInt16[nPercSize = nSize]; 286*cdf0e10cSrcweir pBlockBuf = new sal_uInt16[nPercSize = nSize]; 287*cdf0e10cSrcweir } 288*cdf0e10cSrcweir size_t nSize2 = sizeof(sal_uInt16) * nPercSize; 289*cdf0e10cSrcweir memset(pPercBuf, 0, nSize2); 290*cdf0e10cSrcweir memset(pBlockBuf, 0, nSize2); 291*cdf0e10cSrcweir } 292*cdf0e10cSrcweir 293*cdf0e10cSrcweir 294*cdf0e10cSrcweir // Konstruktor des Lineals 295*cdf0e10cSrcweir 296*cdf0e10cSrcweir // SID_ATTR_ULSPACE, SID_ATTR_LRSPACE 297*cdf0e10cSrcweir // erwartet als Parameter SvxULSpaceItem f"ur Seitenr"ander 298*cdf0e10cSrcweir // (entweder links/rechts oder oben/unten) 299*cdf0e10cSrcweir // Lineal: SetMargin1, SetMargin2 300*cdf0e10cSrcweir 301*cdf0e10cSrcweir // SID_RULER_PAGE_POS 302*cdf0e10cSrcweir // erwartet als Parameter Anfangswert der Seite sowie Seitenbreite 303*cdf0e10cSrcweir // Lineal: SetPagePos 304*cdf0e10cSrcweir 305*cdf0e10cSrcweir // SID_ATTR_TABSTOP 306*cdf0e10cSrcweir // erwartet: SvxTabStopItem 307*cdf0e10cSrcweir // Lineal: SetTabs 308*cdf0e10cSrcweir 309*cdf0e10cSrcweir // SID_ATTR_PARA_LRSPACE 310*cdf0e10cSrcweir // linker, rechter Absatzrand bei H-Lineal 311*cdf0e10cSrcweir // Lineal: SetIndents 312*cdf0e10cSrcweir 313*cdf0e10cSrcweir // SID_RULER_BORDERS 314*cdf0e10cSrcweir // Tabellenraender, Spalten 315*cdf0e10cSrcweir // erwartet: so etwas wie SwTabCols 316*cdf0e10cSrcweir // Lineal: SetBorders 317*cdf0e10cSrcweir 318*cdf0e10cSrcweir 319*cdf0e10cSrcweir SvxRuler::SvxRuler 320*cdf0e10cSrcweir ( 321*cdf0e10cSrcweir Window* pParent, // StarView Parent 322*cdf0e10cSrcweir Window* pWin, // Ausgabefenster; wird fuer Umrechnung logische 323*cdf0e10cSrcweir // Einheiten <-> Pixel verwendet 324*cdf0e10cSrcweir sal_uInt16 flags, // Anzeige Flags, siehe ruler.hxx 325*cdf0e10cSrcweir SfxBindings &rBindings, // zugeordnete Bindings 326*cdf0e10cSrcweir WinBits nWinStyle // StarView WinBits 327*cdf0e10cSrcweir ) 328*cdf0e10cSrcweir : Ruler(pParent, nWinStyle), 329*cdf0e10cSrcweir pCtrlItem(new SvxRulerItem *[CTRL_ITEM_COUNT]), 330*cdf0e10cSrcweir pLRSpaceItem(0), 331*cdf0e10cSrcweir pMinMaxItem(0), 332*cdf0e10cSrcweir pULSpaceItem(0), 333*cdf0e10cSrcweir pTabStopItem(0), 334*cdf0e10cSrcweir pParaItem(0), 335*cdf0e10cSrcweir pParaBorderItem(0), 336*cdf0e10cSrcweir pPagePosItem(0), 337*cdf0e10cSrcweir pColumnItem(0), 338*cdf0e10cSrcweir pObjectItem(0), 339*cdf0e10cSrcweir pEditWin(pWin), 340*cdf0e10cSrcweir pRuler_Imp(new SvxRuler_Impl), 341*cdf0e10cSrcweir bAppSetNullOffset(sal_False), //Wird der 0-Offset des Lineals 342*cdf0e10cSrcweir //durch die appl. gesetzt? 343*cdf0e10cSrcweir lLogicNullOffset(0), 344*cdf0e10cSrcweir lAppNullOffset(LONG_MAX), 345*cdf0e10cSrcweir lMinFrame(5), 346*cdf0e10cSrcweir lInitialDragPos(0), 347*cdf0e10cSrcweir nFlags(flags), 348*cdf0e10cSrcweir nDragType(NONE), 349*cdf0e10cSrcweir nDefTabType(RULER_TAB_LEFT), 350*cdf0e10cSrcweir nTabCount(0), 351*cdf0e10cSrcweir nTabBufSize(0), 352*cdf0e10cSrcweir lDefTabDist(50), 353*cdf0e10cSrcweir lTabPos(-1), 354*cdf0e10cSrcweir pTabs(0), 355*cdf0e10cSrcweir pIndents(0), 356*cdf0e10cSrcweir pBorders(new RulerBorder[1]), //wg 1 Spaltiger Tabellen 357*cdf0e10cSrcweir nBorderCount(0), 358*cdf0e10cSrcweir pObjectBorders(0), 359*cdf0e10cSrcweir pBindings(&rBindings), 360*cdf0e10cSrcweir nDragOffset(0), 361*cdf0e10cSrcweir nMaxLeft(0), 362*cdf0e10cSrcweir nMaxRight(0), 363*cdf0e10cSrcweir bValid(sal_False), 364*cdf0e10cSrcweir bListening(sal_False), 365*cdf0e10cSrcweir bActive(sal_True) 366*cdf0e10cSrcweir 367*cdf0e10cSrcweir /* 368*cdf0e10cSrcweir [Beschreibung] 369*cdf0e10cSrcweir 370*cdf0e10cSrcweir ctor; 371*cdf0e10cSrcweir Datenpuffer initialisieren; ControllerItems werden erzeugt 372*cdf0e10cSrcweir 373*cdf0e10cSrcweir */ 374*cdf0e10cSrcweir { 375*cdf0e10cSrcweir memset(pCtrlItem, 0, sizeof(SvxRulerItem *) * CTRL_ITEM_COUNT); 376*cdf0e10cSrcweir 377*cdf0e10cSrcweir rBindings.EnterRegistrations(); 378*cdf0e10cSrcweir 379*cdf0e10cSrcweir // Unterstuetzte Items anlegen 380*cdf0e10cSrcweir sal_uInt16 i = 0; 381*cdf0e10cSrcweir // Seitenraender 382*cdf0e10cSrcweir 383*cdf0e10cSrcweir pCtrlItem[i++] = new SvxRulerItem(SID_RULER_LR_MIN_MAX, *this, rBindings); 384*cdf0e10cSrcweir if((nWinStyle & WB_VSCROLL) == WB_VSCROLL) 385*cdf0e10cSrcweir { 386*cdf0e10cSrcweir bHorz = sal_False; 387*cdf0e10cSrcweir pCtrlItem[i++] = new SvxRulerItem(SID_ATTR_LONG_ULSPACE, *this, rBindings); 388*cdf0e10cSrcweir } 389*cdf0e10cSrcweir else 390*cdf0e10cSrcweir { 391*cdf0e10cSrcweir bHorz = sal_True; 392*cdf0e10cSrcweir pCtrlItem[i++] = new SvxRulerItem(SID_ATTR_LONG_LRSPACE, *this, rBindings); 393*cdf0e10cSrcweir } 394*cdf0e10cSrcweir 395*cdf0e10cSrcweir // Seitenposition 396*cdf0e10cSrcweir pCtrlItem[i++] = new SvxRulerItem(SID_RULER_PAGE_POS, *this, rBindings); 397*cdf0e10cSrcweir 398*cdf0e10cSrcweir if((nFlags & SVXRULER_SUPPORT_TABS) == SVXRULER_SUPPORT_TABS) 399*cdf0e10cSrcweir { 400*cdf0e10cSrcweir sal_uInt16 nTabStopId = bHorz ? SID_ATTR_TABSTOP : SID_ATTR_TABSTOP_VERTICAL; 401*cdf0e10cSrcweir pCtrlItem[i++] = new SvxRulerItem(nTabStopId, *this, rBindings); 402*cdf0e10cSrcweir SetExtraType(RULER_EXTRA_TAB, nDefTabType); 403*cdf0e10cSrcweir } 404*cdf0e10cSrcweir 405*cdf0e10cSrcweir 406*cdf0e10cSrcweir if(0 != (nFlags & (SVXRULER_SUPPORT_PARAGRAPH_MARGINS |SVXRULER_SUPPORT_PARAGRAPH_MARGINS_VERTICAL))) 407*cdf0e10cSrcweir { 408*cdf0e10cSrcweir if(bHorz) 409*cdf0e10cSrcweir pCtrlItem[i++] = new SvxRulerItem(SID_ATTR_PARA_LRSPACE, *this, rBindings); 410*cdf0e10cSrcweir else 411*cdf0e10cSrcweir pCtrlItem[i++] = new SvxRulerItem(SID_ATTR_PARA_LRSPACE_VERTICAL, *this, rBindings); 412*cdf0e10cSrcweir pIndents = new RulerIndent[5+INDENT_GAP]; 413*cdf0e10cSrcweir memset(pIndents, 0, sizeof(RulerIndent)*(3+INDENT_GAP)); 414*cdf0e10cSrcweir pIndents[0].nStyle = RULER_STYLE_DONTKNOW; 415*cdf0e10cSrcweir pIndents[1].nStyle = RULER_STYLE_DONTKNOW; 416*cdf0e10cSrcweir pIndents[INDENT_FIRST_LINE].nStyle = RULER_INDENT_TOP; 417*cdf0e10cSrcweir pIndents[INDENT_LEFT_MARGIN].nStyle = RULER_INDENT_BOTTOM; 418*cdf0e10cSrcweir pIndents[INDENT_RIGHT_MARGIN].nStyle = RULER_INDENT_BOTTOM; 419*cdf0e10cSrcweir pIndents[INDENT_LEFT_BORDER].nStyle = RULER_INDENT_BORDER; 420*cdf0e10cSrcweir pIndents[INDENT_RIGHT_BORDER].nStyle = RULER_INDENT_BORDER; 421*cdf0e10cSrcweir for(sal_uInt16 nIn = 0; nIn < 7; nIn++) 422*cdf0e10cSrcweir pIndents[nIn].nPos = 0; 423*cdf0e10cSrcweir } 424*cdf0e10cSrcweir 425*cdf0e10cSrcweir if((nFlags & SVXRULER_SUPPORT_BORDERS) == SVXRULER_SUPPORT_BORDERS) 426*cdf0e10cSrcweir { 427*cdf0e10cSrcweir pCtrlItem[i++] = new SvxRulerItem(bHorz ? SID_RULER_BORDERS : SID_RULER_BORDERS_VERTICAL, *this, rBindings); 428*cdf0e10cSrcweir pCtrlItem[i++] = new SvxRulerItem(bHorz ? SID_RULER_ROWS : SID_RULER_ROWS_VERTICAL, *this, rBindings); 429*cdf0e10cSrcweir } 430*cdf0e10cSrcweir 431*cdf0e10cSrcweir pCtrlItem[i++] = new SvxRulerItem(SID_RULER_TEXT_RIGHT_TO_LEFT, *this, rBindings); 432*cdf0e10cSrcweir 433*cdf0e10cSrcweir if((nFlags & SVXRULER_SUPPORT_OBJECT) == SVXRULER_SUPPORT_OBJECT) 434*cdf0e10cSrcweir { 435*cdf0e10cSrcweir pCtrlItem[i++] = new SvxRulerItem(SID_RULER_OBJECT, *this, rBindings ); 436*cdf0e10cSrcweir pObjectBorders = new RulerBorder[OBJECT_BORDER_COUNT]; 437*cdf0e10cSrcweir size_t nSize = sizeof( RulerBorder ) * OBJECT_BORDER_COUNT; 438*cdf0e10cSrcweir memset(pObjectBorders, 0, nSize); 439*cdf0e10cSrcweir for(sal_uInt16 nBorder = 0; nBorder < OBJECT_BORDER_COUNT; ++nBorder) 440*cdf0e10cSrcweir { 441*cdf0e10cSrcweir pObjectBorders[nBorder].nPos = 0; 442*cdf0e10cSrcweir pObjectBorders[nBorder].nWidth = 0; 443*cdf0e10cSrcweir pObjectBorders[nBorder].nStyle = RULER_BORDER_MOVEABLE; 444*cdf0e10cSrcweir } 445*cdf0e10cSrcweir } 446*cdf0e10cSrcweir 447*cdf0e10cSrcweir pCtrlItem[i++] = new SvxRulerItem( SID_RULER_PROTECT, *this, rBindings ); 448*cdf0e10cSrcweir pCtrlItem[i++] = new SvxRulerItem(SID_RULER_BORDER_DISTANCE, *this, rBindings); 449*cdf0e10cSrcweir pRuler_Imp->nControlerItems=i; 450*cdf0e10cSrcweir 451*cdf0e10cSrcweir if((nFlags & SVXRULER_SUPPORT_SET_NULLOFFSET) == 452*cdf0e10cSrcweir SVXRULER_SUPPORT_SET_NULLOFFSET) 453*cdf0e10cSrcweir SetExtraType(RULER_EXTRA_NULLOFFSET, 0); 454*cdf0e10cSrcweir 455*cdf0e10cSrcweir rBindings.LeaveRegistrations(); 456*cdf0e10cSrcweir } 457*cdf0e10cSrcweir 458*cdf0e10cSrcweir 459*cdf0e10cSrcweir __EXPORT SvxRuler::~SvxRuler() 460*cdf0e10cSrcweir /* 461*cdf0e10cSrcweir [Beschreibung] 462*cdf0e10cSrcweir 463*cdf0e10cSrcweir Destruktor Lineal 464*cdf0e10cSrcweir Freigabe interner Puffer 465*cdf0e10cSrcweir 466*cdf0e10cSrcweir 467*cdf0e10cSrcweir */ 468*cdf0e10cSrcweir { 469*cdf0e10cSrcweir REMOVE_DEBUG_WINDOW 470*cdf0e10cSrcweir if(bListening) 471*cdf0e10cSrcweir EndListening(*pBindings); 472*cdf0e10cSrcweir 473*cdf0e10cSrcweir pBindings->EnterRegistrations(); 474*cdf0e10cSrcweir 475*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < CTRL_ITEM_COUNT && pCtrlItem[i]; ++i) 476*cdf0e10cSrcweir delete pCtrlItem[i]; 477*cdf0e10cSrcweir delete[] pCtrlItem; 478*cdf0e10cSrcweir 479*cdf0e10cSrcweir delete pLRSpaceItem; 480*cdf0e10cSrcweir delete pMinMaxItem; 481*cdf0e10cSrcweir delete pULSpaceItem; 482*cdf0e10cSrcweir delete pTabStopItem; 483*cdf0e10cSrcweir delete pParaItem; 484*cdf0e10cSrcweir delete pParaBorderItem; 485*cdf0e10cSrcweir delete pPagePosItem; 486*cdf0e10cSrcweir delete pColumnItem; 487*cdf0e10cSrcweir delete pObjectItem; 488*cdf0e10cSrcweir delete[] pIndents; 489*cdf0e10cSrcweir delete[] pBorders; 490*cdf0e10cSrcweir delete[] pObjectBorders; 491*cdf0e10cSrcweir delete[] pTabs; 492*cdf0e10cSrcweir delete pRuler_Imp; 493*cdf0e10cSrcweir 494*cdf0e10cSrcweir pBindings->LeaveRegistrations(); 495*cdf0e10cSrcweir } 496*cdf0e10cSrcweir 497*cdf0e10cSrcweir /* 498*cdf0e10cSrcweir 499*cdf0e10cSrcweir [Beschreibung] 500*cdf0e10cSrcweir 501*cdf0e10cSrcweir Interne Umrechenroutinen 502*cdf0e10cSrcweir 503*cdf0e10cSrcweir */ 504*cdf0e10cSrcweir 505*cdf0e10cSrcweir long SvxRuler::ConvertHPosPixel(long nVal) const 506*cdf0e10cSrcweir { 507*cdf0e10cSrcweir return pEditWin->LogicToPixel(Size(nVal, 0)).Width(); 508*cdf0e10cSrcweir } 509*cdf0e10cSrcweir 510*cdf0e10cSrcweir long SvxRuler::ConvertVPosPixel(long nVal) const 511*cdf0e10cSrcweir { 512*cdf0e10cSrcweir return pEditWin->LogicToPixel(Size(0, nVal)).Height(); 513*cdf0e10cSrcweir } 514*cdf0e10cSrcweir 515*cdf0e10cSrcweir long SvxRuler::ConvertHSizePixel(long nVal) const 516*cdf0e10cSrcweir { 517*cdf0e10cSrcweir return pEditWin->LogicToPixel(Size(nVal, 0)).Width(); 518*cdf0e10cSrcweir } 519*cdf0e10cSrcweir 520*cdf0e10cSrcweir long SvxRuler::ConvertVSizePixel(long nVal) const 521*cdf0e10cSrcweir { 522*cdf0e10cSrcweir return pEditWin->LogicToPixel(Size(0, nVal)).Height(); 523*cdf0e10cSrcweir } 524*cdf0e10cSrcweir 525*cdf0e10cSrcweir long SvxRuler::ConvertPosPixel(long nVal) const 526*cdf0e10cSrcweir { 527*cdf0e10cSrcweir return bHorz ? ConvertHPosPixel(nVal): ConvertVPosPixel(nVal); 528*cdf0e10cSrcweir } 529*cdf0e10cSrcweir 530*cdf0e10cSrcweir long SvxRuler::ConvertSizePixel(long nVal) const 531*cdf0e10cSrcweir { 532*cdf0e10cSrcweir return bHorz? ConvertHSizePixel(nVal): ConvertVSizePixel(nVal); 533*cdf0e10cSrcweir } 534*cdf0e10cSrcweir 535*cdf0e10cSrcweir 536*cdf0e10cSrcweir inline long SvxRuler::ConvertHPosLogic(long nVal) const 537*cdf0e10cSrcweir { 538*cdf0e10cSrcweir return pEditWin->PixelToLogic(Size(nVal, 0)).Width(); 539*cdf0e10cSrcweir } 540*cdf0e10cSrcweir 541*cdf0e10cSrcweir inline long SvxRuler::ConvertVPosLogic(long nVal) const 542*cdf0e10cSrcweir { 543*cdf0e10cSrcweir return pEditWin->PixelToLogic(Size(0, nVal)).Height(); 544*cdf0e10cSrcweir } 545*cdf0e10cSrcweir 546*cdf0e10cSrcweir inline long SvxRuler::ConvertHSizeLogic(long nVal) const 547*cdf0e10cSrcweir { 548*cdf0e10cSrcweir return pEditWin->PixelToLogic(Size(nVal, 0)).Width(); 549*cdf0e10cSrcweir } 550*cdf0e10cSrcweir 551*cdf0e10cSrcweir inline long SvxRuler::ConvertVSizeLogic(long nVal) const 552*cdf0e10cSrcweir { 553*cdf0e10cSrcweir return pEditWin->PixelToLogic(Size(0, nVal)).Height(); 554*cdf0e10cSrcweir } 555*cdf0e10cSrcweir 556*cdf0e10cSrcweir inline long SvxRuler::ConvertPosLogic(long nVal) const 557*cdf0e10cSrcweir { 558*cdf0e10cSrcweir return bHorz? ConvertHPosLogic(nVal): ConvertVPosLogic(nVal); 559*cdf0e10cSrcweir } 560*cdf0e10cSrcweir 561*cdf0e10cSrcweir inline long SvxRuler::ConvertSizeLogic(long nVal) const 562*cdf0e10cSrcweir { 563*cdf0e10cSrcweir return bHorz? ConvertHSizeLogic(nVal): ConvertVSizeLogic(nVal); 564*cdf0e10cSrcweir } 565*cdf0e10cSrcweir 566*cdf0e10cSrcweir long SvxRuler::PixelHAdjust(long nVal, long nValOld) const 567*cdf0e10cSrcweir { 568*cdf0e10cSrcweir if(ConvertHSizePixel(nVal)!=ConvertHSizePixel(nValOld)) 569*cdf0e10cSrcweir return nVal; 570*cdf0e10cSrcweir else 571*cdf0e10cSrcweir return nValOld; 572*cdf0e10cSrcweir } 573*cdf0e10cSrcweir 574*cdf0e10cSrcweir long SvxRuler::PixelVAdjust(long nVal, long nValOld) const 575*cdf0e10cSrcweir { 576*cdf0e10cSrcweir if(ConvertVSizePixel(nVal)!=ConvertVSizePixel(nValOld)) 577*cdf0e10cSrcweir return nVal; 578*cdf0e10cSrcweir else 579*cdf0e10cSrcweir return nValOld; 580*cdf0e10cSrcweir } 581*cdf0e10cSrcweir 582*cdf0e10cSrcweir long SvxRuler::PixelAdjust(long nVal, long nValOld) const 583*cdf0e10cSrcweir { 584*cdf0e10cSrcweir if(ConvertSizePixel(nVal)!=ConvertSizePixel(nValOld)) 585*cdf0e10cSrcweir return nVal; 586*cdf0e10cSrcweir else 587*cdf0e10cSrcweir return nValOld; 588*cdf0e10cSrcweir } 589*cdf0e10cSrcweir 590*cdf0e10cSrcweir 591*cdf0e10cSrcweir inline sal_uInt16 SvxRuler::GetObjectBordersOff(sal_uInt16 nIdx) const 592*cdf0e10cSrcweir { 593*cdf0e10cSrcweir return bHorz? nIdx: nIdx + 2; 594*cdf0e10cSrcweir } 595*cdf0e10cSrcweir 596*cdf0e10cSrcweir 597*cdf0e10cSrcweir 598*cdf0e10cSrcweir void SvxRuler::UpdateFrame() 599*cdf0e10cSrcweir 600*cdf0e10cSrcweir /* 601*cdf0e10cSrcweir [Beschreibung] 602*cdf0e10cSrcweir 603*cdf0e10cSrcweir Linken, oberen Rand aktualisieren 604*cdf0e10cSrcweir Items werden in die Darstellung des Lineals uebersetzt. 605*cdf0e10cSrcweir 606*cdf0e10cSrcweir */ 607*cdf0e10cSrcweir 608*cdf0e10cSrcweir { 609*cdf0e10cSrcweir const sal_uInt16 nMarginStyle = 610*cdf0e10cSrcweir ( pRuler_Imp->aProtectItem.IsSizeProtected() || 611*cdf0e10cSrcweir pRuler_Imp->aProtectItem.IsPosProtected() ) ? 612*cdf0e10cSrcweir 0 : RULER_MARGIN_SIZEABLE; 613*cdf0e10cSrcweir 614*cdf0e10cSrcweir if(pLRSpaceItem && pPagePosItem) 615*cdf0e10cSrcweir { 616*cdf0e10cSrcweir // wenn keine Initialisierung durch App Defaultverhalten 617*cdf0e10cSrcweir const long nOld = lLogicNullOffset; 618*cdf0e10cSrcweir lLogicNullOffset = pColumnItem? 619*cdf0e10cSrcweir pColumnItem->GetLeft(): pLRSpaceItem->GetLeft(); 620*cdf0e10cSrcweir if(bAppSetNullOffset) 621*cdf0e10cSrcweir lAppNullOffset += lLogicNullOffset - nOld; 622*cdf0e10cSrcweir if(!bAppSetNullOffset || lAppNullOffset == LONG_MAX) 623*cdf0e10cSrcweir { 624*cdf0e10cSrcweir Ruler::SetNullOffset(ConvertHPosPixel(lLogicNullOffset)); 625*cdf0e10cSrcweir SetMargin1( 0, nMarginStyle ); 626*cdf0e10cSrcweir lAppNullOffset = 0; 627*cdf0e10cSrcweir } 628*cdf0e10cSrcweir else 629*cdf0e10cSrcweir SetMargin1( ConvertHPosPixel( lAppNullOffset ), nMarginStyle ); 630*cdf0e10cSrcweir long lRight = 0; 631*cdf0e10cSrcweir // bei Tabelle rechten Rand der Tabelle auswerten 632*cdf0e10cSrcweir if(pColumnItem && pColumnItem->IsTable()) 633*cdf0e10cSrcweir lRight = pColumnItem->GetRight(); 634*cdf0e10cSrcweir else 635*cdf0e10cSrcweir lRight = pLRSpaceItem->GetRight(); 636*cdf0e10cSrcweir 637*cdf0e10cSrcweir sal_uIntPtr aWidth= 638*cdf0e10cSrcweir ConvertHPosPixel(pPagePosItem->GetWidth() - lRight - 639*cdf0e10cSrcweir lLogicNullOffset + lAppNullOffset); 640*cdf0e10cSrcweir SetMargin2( aWidth, nMarginStyle ); 641*cdf0e10cSrcweir } 642*cdf0e10cSrcweir else 643*cdf0e10cSrcweir if(pULSpaceItem && pPagePosItem) 644*cdf0e10cSrcweir { 645*cdf0e10cSrcweir // Nullpunkt aus oberem Rand des umgebenden Rahmens 646*cdf0e10cSrcweir const long nOld = lLogicNullOffset; 647*cdf0e10cSrcweir lLogicNullOffset = pColumnItem? 648*cdf0e10cSrcweir pColumnItem->GetLeft(): pULSpaceItem->GetUpper(); 649*cdf0e10cSrcweir if(bAppSetNullOffset) 650*cdf0e10cSrcweir lAppNullOffset += lLogicNullOffset - nOld; 651*cdf0e10cSrcweir if(!bAppSetNullOffset || lAppNullOffset == LONG_MAX) { 652*cdf0e10cSrcweir Ruler::SetNullOffset(ConvertVPosPixel(lLogicNullOffset)); 653*cdf0e10cSrcweir lAppNullOffset = 0; 654*cdf0e10cSrcweir SetMargin1( 0, nMarginStyle ); 655*cdf0e10cSrcweir } 656*cdf0e10cSrcweir else 657*cdf0e10cSrcweir SetMargin1( ConvertVPosPixel( lAppNullOffset ),nMarginStyle ); 658*cdf0e10cSrcweir 659*cdf0e10cSrcweir long lLower = pColumnItem ? 660*cdf0e10cSrcweir pColumnItem->GetRight() : pULSpaceItem->GetLower(); 661*cdf0e10cSrcweir 662*cdf0e10cSrcweir SetMargin2(ConvertVPosPixel(pPagePosItem->GetHeight() - lLower - 663*cdf0e10cSrcweir lLogicNullOffset + lAppNullOffset), 664*cdf0e10cSrcweir nMarginStyle ); 665*cdf0e10cSrcweir } 666*cdf0e10cSrcweir else 667*cdf0e10cSrcweir { 668*cdf0e10cSrcweir // schaltet die Anzeige aus 669*cdf0e10cSrcweir SetMargin1(); 670*cdf0e10cSrcweir SetMargin2(); 671*cdf0e10cSrcweir } 672*cdf0e10cSrcweir if(pColumnItem) 673*cdf0e10cSrcweir { 674*cdf0e10cSrcweir pRuler_Imp->nColLeftPix = (sal_uInt16) ConvertSizePixel(pColumnItem->GetLeft()); 675*cdf0e10cSrcweir pRuler_Imp->nColRightPix = (sal_uInt16) ConvertSizePixel(pColumnItem->GetRight()); 676*cdf0e10cSrcweir } 677*cdf0e10cSrcweir 678*cdf0e10cSrcweir } 679*cdf0e10cSrcweir 680*cdf0e10cSrcweir void SvxRuler::MouseMove( const MouseEvent& rMEvt ) 681*cdf0e10cSrcweir { 682*cdf0e10cSrcweir if( bActive ) 683*cdf0e10cSrcweir { 684*cdf0e10cSrcweir pBindings->Update( SID_RULER_LR_MIN_MAX ); 685*cdf0e10cSrcweir pBindings->Update( SID_ATTR_LONG_ULSPACE ); 686*cdf0e10cSrcweir pBindings->Update( SID_ATTR_LONG_LRSPACE ); 687*cdf0e10cSrcweir pBindings->Update( SID_RULER_PAGE_POS ); 688*cdf0e10cSrcweir pBindings->Update( bHorz ? SID_ATTR_TABSTOP : SID_ATTR_TABSTOP_VERTICAL); 689*cdf0e10cSrcweir pBindings->Update( bHorz ? SID_ATTR_PARA_LRSPACE : SID_ATTR_PARA_LRSPACE_VERTICAL); 690*cdf0e10cSrcweir pBindings->Update( bHorz ? SID_RULER_BORDERS : SID_RULER_BORDERS_VERTICAL); 691*cdf0e10cSrcweir pBindings->Update( bHorz ? SID_RULER_ROWS : SID_RULER_ROWS_VERTICAL); 692*cdf0e10cSrcweir pBindings->Update( SID_RULER_OBJECT ); 693*cdf0e10cSrcweir pBindings->Update( SID_RULER_PROTECT ); 694*cdf0e10cSrcweir } 695*cdf0e10cSrcweir Ruler::MouseMove( rMEvt ); 696*cdf0e10cSrcweir } 697*cdf0e10cSrcweir void SvxRuler::StartListening_Impl() 698*cdf0e10cSrcweir { 699*cdf0e10cSrcweir if(!bListening) 700*cdf0e10cSrcweir { 701*cdf0e10cSrcweir bValid = sal_False; 702*cdf0e10cSrcweir StartListening(*pBindings); 703*cdf0e10cSrcweir bListening = sal_True; 704*cdf0e10cSrcweir } 705*cdf0e10cSrcweir } 706*cdf0e10cSrcweir 707*cdf0e10cSrcweir void SvxRuler::UpdateFrame 708*cdf0e10cSrcweir ( 709*cdf0e10cSrcweir const SvxLongLRSpaceItem *pItem // neuer Wert LRSpace 710*cdf0e10cSrcweir ) 711*cdf0e10cSrcweir 712*cdf0e10cSrcweir /* 713*cdf0e10cSrcweir [Beschreibung] 714*cdf0e10cSrcweir 715*cdf0e10cSrcweir Neuen Wert fuer LRSpace merken; alten gfs. loeschen 716*cdf0e10cSrcweir 717*cdf0e10cSrcweir */ 718*cdf0e10cSrcweir 719*cdf0e10cSrcweir { 720*cdf0e10cSrcweir if(bActive) 721*cdf0e10cSrcweir { 722*cdf0e10cSrcweir delete pLRSpaceItem; pLRSpaceItem = 0; 723*cdf0e10cSrcweir if(pItem) 724*cdf0e10cSrcweir pLRSpaceItem = new SvxLongLRSpaceItem(*pItem); 725*cdf0e10cSrcweir StartListening_Impl(); 726*cdf0e10cSrcweir } 727*cdf0e10cSrcweir } 728*cdf0e10cSrcweir 729*cdf0e10cSrcweir 730*cdf0e10cSrcweir void SvxRuler::UpdateFrameMinMax 731*cdf0e10cSrcweir ( 732*cdf0e10cSrcweir const SfxRectangleItem *pItem // Werte fuer MinMax 733*cdf0e10cSrcweir ) 734*cdf0e10cSrcweir 735*cdf0e10cSrcweir /* 736*cdf0e10cSrcweir [Beschreibung] 737*cdf0e10cSrcweir 738*cdf0e10cSrcweir Neuen Wert fuer MinMax setzen; alten gfs. loeschen 739*cdf0e10cSrcweir 740*cdf0e10cSrcweir */ 741*cdf0e10cSrcweir 742*cdf0e10cSrcweir { 743*cdf0e10cSrcweir if(bActive) 744*cdf0e10cSrcweir { 745*cdf0e10cSrcweir delete pMinMaxItem; pMinMaxItem = 0; 746*cdf0e10cSrcweir if(pItem) 747*cdf0e10cSrcweir pMinMaxItem = new SfxRectangleItem(*pItem); 748*cdf0e10cSrcweir } 749*cdf0e10cSrcweir } 750*cdf0e10cSrcweir 751*cdf0e10cSrcweir 752*cdf0e10cSrcweir void SvxRuler::UpdateFrame 753*cdf0e10cSrcweir ( 754*cdf0e10cSrcweir const SvxLongULSpaceItem *pItem // neuer Wert 755*cdf0e10cSrcweir ) 756*cdf0e10cSrcweir 757*cdf0e10cSrcweir /* 758*cdf0e10cSrcweir [Beschreibung] 759*cdf0e10cSrcweir 760*cdf0e10cSrcweir Rechten / unteren Rand aktualisieren 761*cdf0e10cSrcweir 762*cdf0e10cSrcweir */ 763*cdf0e10cSrcweir 764*cdf0e10cSrcweir 765*cdf0e10cSrcweir { 766*cdf0e10cSrcweir if(bActive && !bHorz) 767*cdf0e10cSrcweir { 768*cdf0e10cSrcweir delete pULSpaceItem; pULSpaceItem = 0; 769*cdf0e10cSrcweir if(pItem) 770*cdf0e10cSrcweir pULSpaceItem = new SvxLongULSpaceItem(*pItem); 771*cdf0e10cSrcweir StartListening_Impl(); 772*cdf0e10cSrcweir } 773*cdf0e10cSrcweir } 774*cdf0e10cSrcweir 775*cdf0e10cSrcweir void SvxRuler::Update( const SvxProtectItem* pItem ) 776*cdf0e10cSrcweir { 777*cdf0e10cSrcweir if( pItem ) pRuler_Imp->aProtectItem = *pItem; 778*cdf0e10cSrcweir } 779*cdf0e10cSrcweir /* -----------------------------22.08.2002 13:10------------------------------ 780*cdf0e10cSrcweir 781*cdf0e10cSrcweir ---------------------------------------------------------------------------*/ 782*cdf0e10cSrcweir void SvxRuler::UpdateTextRTL(const SfxBoolItem* pItem) 783*cdf0e10cSrcweir { 784*cdf0e10cSrcweir if(bActive && bHorz) 785*cdf0e10cSrcweir { 786*cdf0e10cSrcweir delete pRuler_Imp->pTextRTLItem; pRuler_Imp->pTextRTLItem = 0; 787*cdf0e10cSrcweir if(pItem) 788*cdf0e10cSrcweir pRuler_Imp->pTextRTLItem = new SfxBoolItem(*pItem); 789*cdf0e10cSrcweir SetTextRTL(pRuler_Imp->pTextRTLItem && pRuler_Imp->pTextRTLItem->GetValue()); 790*cdf0e10cSrcweir StartListening_Impl(); 791*cdf0e10cSrcweir } 792*cdf0e10cSrcweir } 793*cdf0e10cSrcweir 794*cdf0e10cSrcweir void SvxRuler::Update 795*cdf0e10cSrcweir ( 796*cdf0e10cSrcweir const SvxColumnItem *pItem, // neuer Wert 797*cdf0e10cSrcweir sal_uInt16 nSID //Slot Id to identify NULL items 798*cdf0e10cSrcweir ) 799*cdf0e10cSrcweir 800*cdf0e10cSrcweir /* 801*cdf0e10cSrcweir [Beschreibung] 802*cdf0e10cSrcweir 803*cdf0e10cSrcweir Neuen Wert fuer Spaltendarstellung setzen 804*cdf0e10cSrcweir 805*cdf0e10cSrcweir */ 806*cdf0e10cSrcweir 807*cdf0e10cSrcweir { 808*cdf0e10cSrcweir if(bActive) 809*cdf0e10cSrcweir { 810*cdf0e10cSrcweir if(pItem) 811*cdf0e10cSrcweir { 812*cdf0e10cSrcweir delete pColumnItem; pColumnItem = 0; 813*cdf0e10cSrcweir pRuler_Imp->bIsTableRows = (pItem->Which() == SID_RULER_ROWS || pItem->Which() == SID_RULER_ROWS_VERTICAL); 814*cdf0e10cSrcweir pColumnItem = new SvxColumnItem(*pItem); 815*cdf0e10cSrcweir if(!bHorz && !pRuler_Imp->bIsTableRows) 816*cdf0e10cSrcweir pColumnItem->SetWhich(SID_RULER_BORDERS_VERTICAL); 817*cdf0e10cSrcweir } 818*cdf0e10cSrcweir else if(pColumnItem && pColumnItem->Which() == nSID) 819*cdf0e10cSrcweir //there are two groups of column items table/frame columns and table rows 820*cdf0e10cSrcweir //both can occur in vertical or horizontal mode 821*cdf0e10cSrcweir //the horizontal ruler handles the SID_RULER_BORDERS and SID_RULER_ROWS_VERTICAL 822*cdf0e10cSrcweir //and the vertical handles SID_RULER_BORDERS_VERTICAL and SID_RULER_ROWS 823*cdf0e10cSrcweir //if pColumnItem is already set with one of the ids then a NULL pItem argument 824*cdf0e10cSrcweir //must not delete it 825*cdf0e10cSrcweir { 826*cdf0e10cSrcweir delete pColumnItem; pColumnItem = 0; 827*cdf0e10cSrcweir pRuler_Imp->bIsTableRows = sal_False; 828*cdf0e10cSrcweir } 829*cdf0e10cSrcweir StartListening_Impl(); 830*cdf0e10cSrcweir } 831*cdf0e10cSrcweir } 832*cdf0e10cSrcweir 833*cdf0e10cSrcweir 834*cdf0e10cSrcweir void SvxRuler::UpdateColumns() 835*cdf0e10cSrcweir /* 836*cdf0e10cSrcweir [Beschreibung] 837*cdf0e10cSrcweir 838*cdf0e10cSrcweir Anzeige der Spaltendarstellung aktualisieren 839*cdf0e10cSrcweir 840*cdf0e10cSrcweir */ 841*cdf0e10cSrcweir { 842*cdf0e10cSrcweir if(pColumnItem && pColumnItem->Count() > 1) 843*cdf0e10cSrcweir { 844*cdf0e10cSrcweir if( nBorderCount < pColumnItem->Count()) 845*cdf0e10cSrcweir { 846*cdf0e10cSrcweir delete[] pBorders; 847*cdf0e10cSrcweir nBorderCount = pColumnItem->Count(); 848*cdf0e10cSrcweir pBorders = new RulerBorder[nBorderCount]; 849*cdf0e10cSrcweir } 850*cdf0e10cSrcweir sal_uInt16 _nFlags = RULER_BORDER_VARIABLE; 851*cdf0e10cSrcweir sal_Bool bProtectColumns = 852*cdf0e10cSrcweir pRuler_Imp->aProtectItem.IsSizeProtected() || 853*cdf0e10cSrcweir pRuler_Imp->aProtectItem.IsPosProtected(); 854*cdf0e10cSrcweir if( !bProtectColumns ) 855*cdf0e10cSrcweir _nFlags |= RULER_BORDER_MOVEABLE; 856*cdf0e10cSrcweir if( pColumnItem->IsTable() ) 857*cdf0e10cSrcweir _nFlags |= RULER_BORDER_TABLE; 858*cdf0e10cSrcweir else 859*cdf0e10cSrcweir if ( !bProtectColumns ) 860*cdf0e10cSrcweir _nFlags |= RULER_BORDER_SIZEABLE; 861*cdf0e10cSrcweir 862*cdf0e10cSrcweir sal_uInt16 nBorders = pColumnItem->Count(); 863*cdf0e10cSrcweir if(!pRuler_Imp->bIsTableRows) 864*cdf0e10cSrcweir --nBorders; 865*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nBorders; ++i) 866*cdf0e10cSrcweir { 867*cdf0e10cSrcweir pBorders[i].nStyle = _nFlags; 868*cdf0e10cSrcweir if(!(*pColumnItem)[i].bVisible) 869*cdf0e10cSrcweir pBorders[i].nStyle |= RULER_STYLE_INVISIBLE; 870*cdf0e10cSrcweir pBorders[i].nPos = 871*cdf0e10cSrcweir ConvertPosPixel((*pColumnItem)[i].nEnd + lAppNullOffset); 872*cdf0e10cSrcweir if(pColumnItem->Count() == i + 1) 873*cdf0e10cSrcweir { 874*cdf0e10cSrcweir //with table rows the end of the table is contained in the 875*cdf0e10cSrcweir //column item but it has no width! 876*cdf0e10cSrcweir pBorders[i].nWidth = 0; 877*cdf0e10cSrcweir } 878*cdf0e10cSrcweir else 879*cdf0e10cSrcweir { 880*cdf0e10cSrcweir pBorders[i].nWidth = 881*cdf0e10cSrcweir ConvertSizePixel((*pColumnItem)[i+1].nStart - 882*cdf0e10cSrcweir (*pColumnItem)[i].nEnd); 883*cdf0e10cSrcweir } 884*cdf0e10cSrcweir pBorders[i].nMinPos = 885*cdf0e10cSrcweir ConvertPosPixel((*pColumnItem)[i].nEndMin + lAppNullOffset); 886*cdf0e10cSrcweir pBorders[i].nMaxPos = 887*cdf0e10cSrcweir ConvertPosPixel((*pColumnItem)[i].nEndMax + lAppNullOffset); 888*cdf0e10cSrcweir } 889*cdf0e10cSrcweir SetBorders(pColumnItem->Count()-1, pBorders); 890*cdf0e10cSrcweir } 891*cdf0e10cSrcweir else 892*cdf0e10cSrcweir { 893*cdf0e10cSrcweir SetBorders(); 894*cdf0e10cSrcweir } 895*cdf0e10cSrcweir } 896*cdf0e10cSrcweir 897*cdf0e10cSrcweir 898*cdf0e10cSrcweir void SvxRuler::UpdateObject() 899*cdf0e10cSrcweir 900*cdf0e10cSrcweir /* 901*cdf0e10cSrcweir [Beschreibung] 902*cdf0e10cSrcweir 903*cdf0e10cSrcweir Anzeige der Objektdarstellung aktualisieren 904*cdf0e10cSrcweir 905*cdf0e10cSrcweir */ 906*cdf0e10cSrcweir 907*cdf0e10cSrcweir { 908*cdf0e10cSrcweir if(pObjectItem) 909*cdf0e10cSrcweir { 910*cdf0e10cSrcweir DBG_ASSERT(pObjectBorders, "kein Buffer"); 911*cdf0e10cSrcweir // !! zum Seitenrand 912*cdf0e10cSrcweir long nMargin = pLRSpaceItem? pLRSpaceItem->GetLeft(): 0; 913*cdf0e10cSrcweir pObjectBorders[0].nPos = 914*cdf0e10cSrcweir ConvertPosPixel(pObjectItem->GetStartX() - 915*cdf0e10cSrcweir nMargin + lAppNullOffset); 916*cdf0e10cSrcweir pObjectBorders[1].nPos = 917*cdf0e10cSrcweir ConvertPosPixel(pObjectItem->GetEndX() - nMargin + lAppNullOffset); 918*cdf0e10cSrcweir nMargin = pULSpaceItem? pULSpaceItem->GetUpper(): 0; 919*cdf0e10cSrcweir pObjectBorders[2].nPos = 920*cdf0e10cSrcweir ConvertPosPixel(pObjectItem->GetStartY() - 921*cdf0e10cSrcweir nMargin + lAppNullOffset); 922*cdf0e10cSrcweir pObjectBorders[3].nPos = 923*cdf0e10cSrcweir ConvertPosPixel(pObjectItem->GetEndY() - nMargin + lAppNullOffset); 924*cdf0e10cSrcweir 925*cdf0e10cSrcweir const sal_uInt16 nOff = GetObjectBordersOff(0); 926*cdf0e10cSrcweir SetBorders(2, pObjectBorders + nOff); 927*cdf0e10cSrcweir } 928*cdf0e10cSrcweir else 929*cdf0e10cSrcweir { 930*cdf0e10cSrcweir SetBorders(); 931*cdf0e10cSrcweir } 932*cdf0e10cSrcweir } 933*cdf0e10cSrcweir 934*cdf0e10cSrcweir 935*cdf0e10cSrcweir void SvxRuler::UpdatePara() 936*cdf0e10cSrcweir 937*cdf0e10cSrcweir /* 938*cdf0e10cSrcweir [Beschreibung] 939*cdf0e10cSrcweir 940*cdf0e10cSrcweir Anzeige der Absatzeinzuege aktualisieren: 941*cdf0e10cSrcweir Linken Rand, Erstzeileneinzug, rechten Rand Absatz aktualisieren 942*cdf0e10cSrcweir pIndents[0] = Buffer fuer alten Einzug 943*cdf0e10cSrcweir pIndents[1] = Buffer fuer alten Einzug 944*cdf0e10cSrcweir pIndents[INDENT_FIRST_LINE] = Erstzeileneinzug 945*cdf0e10cSrcweir pIndents[3] = linker Rand 946*cdf0e10cSrcweir pIndents[4] = rechter Rand 947*cdf0e10cSrcweir pIndents[5] = left border distance 948*cdf0e10cSrcweir pIndents[6] = right border distance 949*cdf0e10cSrcweir 950*cdf0e10cSrcweir */ 951*cdf0e10cSrcweir 952*cdf0e10cSrcweir { 953*cdf0e10cSrcweir // Abhaengigkeit zu PagePosItem 954*cdf0e10cSrcweir if(pParaItem && pPagePosItem && !pObjectItem) 955*cdf0e10cSrcweir { 956*cdf0e10cSrcweir sal_Bool bRTLText = pRuler_Imp->pTextRTLItem && pRuler_Imp->pTextRTLItem->GetValue(); 957*cdf0e10cSrcweir // Erstzeileneinzug, ist negativ zum linken Absatzrand 958*cdf0e10cSrcweir long nLeftFrameMargin = GetLeftFrameMargin(); 959*cdf0e10cSrcweir long nRightFrameMargin = GetRightFrameMargin(); 960*cdf0e10cSrcweir if(bRTLText) 961*cdf0e10cSrcweir pIndents[INDENT_FIRST_LINE].nPos = 962*cdf0e10cSrcweir ConvertHPosPixel( 963*cdf0e10cSrcweir nRightFrameMargin - 964*cdf0e10cSrcweir pParaItem->GetTxtLeft() - 965*cdf0e10cSrcweir pParaItem->GetTxtFirstLineOfst() + lAppNullOffset ); 966*cdf0e10cSrcweir else 967*cdf0e10cSrcweir pIndents[INDENT_FIRST_LINE].nPos = 968*cdf0e10cSrcweir ConvertHPosPixel( 969*cdf0e10cSrcweir nLeftFrameMargin + 970*cdf0e10cSrcweir pParaItem->GetTxtLeft() + 971*cdf0e10cSrcweir pParaItem->GetTxtFirstLineOfst() + 972*cdf0e10cSrcweir lAppNullOffset); 973*cdf0e10cSrcweir if( pParaItem->IsAutoFirst() ) 974*cdf0e10cSrcweir pIndents[INDENT_FIRST_LINE].nStyle |= RULER_STYLE_INVISIBLE; 975*cdf0e10cSrcweir else 976*cdf0e10cSrcweir pIndents[INDENT_FIRST_LINE].nStyle &= ~RULER_STYLE_INVISIBLE; 977*cdf0e10cSrcweir 978*cdf0e10cSrcweir if(bRTLText) 979*cdf0e10cSrcweir { 980*cdf0e10cSrcweir // left margin 981*cdf0e10cSrcweir pIndents[INDENT_LEFT_MARGIN].nPos = 982*cdf0e10cSrcweir ConvertHPosPixel( 983*cdf0e10cSrcweir nRightFrameMargin - 984*cdf0e10cSrcweir pParaItem->GetTxtLeft() + lAppNullOffset); 985*cdf0e10cSrcweir // right margin 986*cdf0e10cSrcweir pIndents[INDENT_RIGHT_MARGIN].nPos = 987*cdf0e10cSrcweir ConvertHPosPixel( 988*cdf0e10cSrcweir nLeftFrameMargin + 989*cdf0e10cSrcweir pParaItem->GetRight() + lAppNullOffset); 990*cdf0e10cSrcweir } 991*cdf0e10cSrcweir else 992*cdf0e10cSrcweir { 993*cdf0e10cSrcweir // linker Rand 994*cdf0e10cSrcweir pIndents[INDENT_LEFT_MARGIN].nPos = 995*cdf0e10cSrcweir ConvertHPosPixel( 996*cdf0e10cSrcweir nLeftFrameMargin + 997*cdf0e10cSrcweir pParaItem->GetTxtLeft() + lAppNullOffset); 998*cdf0e10cSrcweir // rechter Rand, immer negativ zum rechten Rand des umgebenden Frames 999*cdf0e10cSrcweir pIndents[INDENT_RIGHT_MARGIN].nPos = 1000*cdf0e10cSrcweir ConvertHPosPixel( 1001*cdf0e10cSrcweir nRightFrameMargin - 1002*cdf0e10cSrcweir pParaItem->GetRight() + lAppNullOffset); 1003*cdf0e10cSrcweir } 1004*cdf0e10cSrcweir if(pParaBorderItem) 1005*cdf0e10cSrcweir { 1006*cdf0e10cSrcweir pIndents[INDENT_LEFT_BORDER].nPos = 1007*cdf0e10cSrcweir ConvertHPosPixel( nLeftFrameMargin + lAppNullOffset); 1008*cdf0e10cSrcweir pIndents[INDENT_RIGHT_BORDER].nPos = 1009*cdf0e10cSrcweir ConvertHPosPixel(nRightFrameMargin - lAppNullOffset); 1010*cdf0e10cSrcweir pIndents[INDENT_LEFT_BORDER].nStyle = pIndents[INDENT_RIGHT_BORDER].nStyle &= ~RULER_STYLE_INVISIBLE; 1011*cdf0e10cSrcweir } 1012*cdf0e10cSrcweir else 1013*cdf0e10cSrcweir pIndents[INDENT_LEFT_BORDER].nStyle = pIndents[INDENT_RIGHT_BORDER].nStyle |= RULER_STYLE_INVISIBLE; 1014*cdf0e10cSrcweir 1015*cdf0e10cSrcweir SetIndents(INDENT_COUNT, pIndents+INDENT_GAP); 1016*cdf0e10cSrcweir } 1017*cdf0e10cSrcweir else 1018*cdf0e10cSrcweir { 1019*cdf0e10cSrcweir if(pIndents) 1020*cdf0e10cSrcweir { 1021*cdf0e10cSrcweir pIndents[INDENT_FIRST_LINE].nPos = 1022*cdf0e10cSrcweir pIndents[INDENT_LEFT_MARGIN].nPos = 1023*cdf0e10cSrcweir pIndents[INDENT_RIGHT_MARGIN].nPos = 0; 1024*cdf0e10cSrcweir } 1025*cdf0e10cSrcweir SetIndents(); // ausschalten 1026*cdf0e10cSrcweir } 1027*cdf0e10cSrcweir } 1028*cdf0e10cSrcweir 1029*cdf0e10cSrcweir 1030*cdf0e10cSrcweir void SvxRuler::UpdatePara 1031*cdf0e10cSrcweir ( 1032*cdf0e10cSrcweir const SvxLRSpaceItem *pItem // neuer Wert Absatzeinzuege 1033*cdf0e10cSrcweir ) 1034*cdf0e10cSrcweir 1035*cdf0e10cSrcweir /* 1036*cdf0e10cSrcweir [Beschreibung] 1037*cdf0e10cSrcweir 1038*cdf0e10cSrcweir Neuen Wert Absatzeinzuege merken 1039*cdf0e10cSrcweir */ 1040*cdf0e10cSrcweir 1041*cdf0e10cSrcweir { 1042*cdf0e10cSrcweir if(bActive) 1043*cdf0e10cSrcweir { 1044*cdf0e10cSrcweir delete pParaItem; pParaItem = 0; 1045*cdf0e10cSrcweir if(pItem) 1046*cdf0e10cSrcweir pParaItem = new SvxLRSpaceItem(*pItem); 1047*cdf0e10cSrcweir StartListening_Impl(); 1048*cdf0e10cSrcweir } 1049*cdf0e10cSrcweir } 1050*cdf0e10cSrcweir void SvxRuler::UpdateParaBorder(const SvxLRSpaceItem * pItem ) 1051*cdf0e10cSrcweir /* 1052*cdf0e10cSrcweir [Description] 1053*cdf0e10cSrcweir Border distance 1054*cdf0e10cSrcweir */ 1055*cdf0e10cSrcweir 1056*cdf0e10cSrcweir { 1057*cdf0e10cSrcweir if(bActive) 1058*cdf0e10cSrcweir { 1059*cdf0e10cSrcweir delete pParaBorderItem; pParaBorderItem = 0; 1060*cdf0e10cSrcweir if(pItem) 1061*cdf0e10cSrcweir pParaBorderItem = new SvxLRSpaceItem(*pItem); 1062*cdf0e10cSrcweir StartListening_Impl(); 1063*cdf0e10cSrcweir } 1064*cdf0e10cSrcweir } 1065*cdf0e10cSrcweir 1066*cdf0e10cSrcweir 1067*cdf0e10cSrcweir void SvxRuler::UpdatePage() 1068*cdf0e10cSrcweir 1069*cdf0e10cSrcweir /* 1070*cdf0e10cSrcweir [Beschreibung] 1071*cdf0e10cSrcweir 1072*cdf0e10cSrcweir Anzeige von Postion und Breite der Seite aktualisieren 1073*cdf0e10cSrcweir 1074*cdf0e10cSrcweir */ 1075*cdf0e10cSrcweir 1076*cdf0e10cSrcweir { 1077*cdf0e10cSrcweir if(pPagePosItem) 1078*cdf0e10cSrcweir { 1079*cdf0e10cSrcweir // alle Objekte werden automatisch angepasst 1080*cdf0e10cSrcweir if(bHorz) 1081*cdf0e10cSrcweir SetPagePos( 1082*cdf0e10cSrcweir pEditWin->LogicToPixel(pPagePosItem->GetPos()).X(), 1083*cdf0e10cSrcweir pEditWin->LogicToPixel(Size(pPagePosItem->GetWidth(),0)). 1084*cdf0e10cSrcweir Width()); 1085*cdf0e10cSrcweir else 1086*cdf0e10cSrcweir SetPagePos( 1087*cdf0e10cSrcweir pEditWin->LogicToPixel(pPagePosItem->GetPos()).Y(), 1088*cdf0e10cSrcweir pEditWin->LogicToPixel(Size(0, pPagePosItem->GetHeight())). 1089*cdf0e10cSrcweir Height()); 1090*cdf0e10cSrcweir if(bAppSetNullOffset) 1091*cdf0e10cSrcweir SetNullOffset(ConvertSizePixel(-lAppNullOffset + lLogicNullOffset)); 1092*cdf0e10cSrcweir } 1093*cdf0e10cSrcweir else 1094*cdf0e10cSrcweir SetPagePos(); 1095*cdf0e10cSrcweir 1096*cdf0e10cSrcweir long lPos = 0; 1097*cdf0e10cSrcweir Point aOwnPos = GetPosPixel(); 1098*cdf0e10cSrcweir Point aEdtWinPos = pEditWin->GetPosPixel(); 1099*cdf0e10cSrcweir if( Application::GetSettings().GetLayoutRTL() && bHorz ) 1100*cdf0e10cSrcweir { 1101*cdf0e10cSrcweir //#i73321# in RTL the window and the ruler is not mirrored but the 1102*cdf0e10cSrcweir // influence of the vertical ruler is inverted 1103*cdf0e10cSrcweir Size aOwnSize = GetSizePixel(); 1104*cdf0e10cSrcweir Size aEdtWinSize = pEditWin->GetSizePixel(); 1105*cdf0e10cSrcweir lPos = aOwnSize.Width() - aEdtWinSize.Width(); 1106*cdf0e10cSrcweir lPos -= (aEdtWinPos - aOwnPos).X(); 1107*cdf0e10cSrcweir } 1108*cdf0e10cSrcweir else 1109*cdf0e10cSrcweir { 1110*cdf0e10cSrcweir Point aPos(aEdtWinPos - aOwnPos); 1111*cdf0e10cSrcweir lPos= bHorz ? aPos.X() : aPos.Y(); 1112*cdf0e10cSrcweir } 1113*cdf0e10cSrcweir 1114*cdf0e10cSrcweir // Leider bekommen wir den Offset des Editfensters zum Lineal nie 1115*cdf0e10cSrcweir // per Statusmeldung. Also setzen wir ihn selbst, wenn noetig. 1116*cdf0e10cSrcweir 1117*cdf0e10cSrcweir if(lPos!=pRuler_Imp->lOldWinPos) 1118*cdf0e10cSrcweir { 1119*cdf0e10cSrcweir pRuler_Imp->lOldWinPos=lPos; 1120*cdf0e10cSrcweir SetWinPos(lPos); 1121*cdf0e10cSrcweir } 1122*cdf0e10cSrcweir } 1123*cdf0e10cSrcweir 1124*cdf0e10cSrcweir 1125*cdf0e10cSrcweir void SvxRuler::Update 1126*cdf0e10cSrcweir ( 1127*cdf0e10cSrcweir const SvxPagePosSizeItem *pItem // neuer Wert Seitenattribute 1128*cdf0e10cSrcweir ) 1129*cdf0e10cSrcweir 1130*cdf0e10cSrcweir /* 1131*cdf0e10cSrcweir [Beschreibung] 1132*cdf0e10cSrcweir 1133*cdf0e10cSrcweir Neuen Wert Seitenattribute merken 1134*cdf0e10cSrcweir 1135*cdf0e10cSrcweir */ 1136*cdf0e10cSrcweir 1137*cdf0e10cSrcweir { 1138*cdf0e10cSrcweir if(bActive) 1139*cdf0e10cSrcweir { 1140*cdf0e10cSrcweir delete pPagePosItem; pPagePosItem = 0; 1141*cdf0e10cSrcweir if(pItem) 1142*cdf0e10cSrcweir pPagePosItem = new SvxPagePosSizeItem(*pItem); 1143*cdf0e10cSrcweir StartListening_Impl(); 1144*cdf0e10cSrcweir } 1145*cdf0e10cSrcweir } 1146*cdf0e10cSrcweir 1147*cdf0e10cSrcweir 1148*cdf0e10cSrcweir // 1149*cdf0e10cSrcweir 1150*cdf0e10cSrcweir void SvxRuler::SetDefTabDist 1151*cdf0e10cSrcweir ( 1152*cdf0e10cSrcweir long l // Neuer Abstand fuer DefaultTabs in App-Metrik 1153*cdf0e10cSrcweir ) 1154*cdf0e10cSrcweir 1155*cdf0e10cSrcweir /* 1156*cdf0e10cSrcweir [Beschreibung] 1157*cdf0e10cSrcweir 1158*cdf0e10cSrcweir Neuer Abstand fuer DefaultTabs wird gesetzt 1159*cdf0e10cSrcweir 1160*cdf0e10cSrcweir */ 1161*cdf0e10cSrcweir 1162*cdf0e10cSrcweir { 1163*cdf0e10cSrcweir 1164*cdf0e10cSrcweir lDefTabDist = l; 1165*cdf0e10cSrcweir UpdateTabs(); 1166*cdf0e10cSrcweir } 1167*cdf0e10cSrcweir 1168*cdf0e10cSrcweir 1169*cdf0e10cSrcweir long SvxRuler::GetDefTabDist() const 1170*cdf0e10cSrcweir 1171*cdf0e10cSrcweir /* 1172*cdf0e10cSrcweir [Beschreibung] 1173*cdf0e10cSrcweir 1174*cdf0e10cSrcweir Wert fuer DefaultTabs erfragen (wird in App.-Methik geliefert) 1175*cdf0e10cSrcweir 1176*cdf0e10cSrcweir */ 1177*cdf0e10cSrcweir 1178*cdf0e10cSrcweir { 1179*cdf0e10cSrcweir return lDefTabDist; 1180*cdf0e10cSrcweir } 1181*cdf0e10cSrcweir 1182*cdf0e10cSrcweir 1183*cdf0e10cSrcweir sal_uInt16 ToSvTab_Impl(SvxTabAdjust eAdj) 1184*cdf0e10cSrcweir 1185*cdf0e10cSrcweir /* 1186*cdf0e10cSrcweir [Beschreibung] 1187*cdf0e10cSrcweir 1188*cdf0e10cSrcweir Interne Konvertierungsroutinen zwischen SV-Tab.-Enum und Svx 1189*cdf0e10cSrcweir 1190*cdf0e10cSrcweir */ 1191*cdf0e10cSrcweir 1192*cdf0e10cSrcweir { 1193*cdf0e10cSrcweir switch(eAdj) { 1194*cdf0e10cSrcweir case SVX_TAB_ADJUST_LEFT: return RULER_TAB_LEFT; 1195*cdf0e10cSrcweir case SVX_TAB_ADJUST_RIGHT: return RULER_TAB_RIGHT; 1196*cdf0e10cSrcweir case SVX_TAB_ADJUST_DECIMAL: return RULER_TAB_DECIMAL; 1197*cdf0e10cSrcweir case SVX_TAB_ADJUST_CENTER: return RULER_TAB_CENTER; 1198*cdf0e10cSrcweir case SVX_TAB_ADJUST_DEFAULT: return RULER_TAB_DEFAULT; 1199*cdf0e10cSrcweir default: ;//prevent warning 1200*cdf0e10cSrcweir } 1201*cdf0e10cSrcweir return 0; 1202*cdf0e10cSrcweir } 1203*cdf0e10cSrcweir 1204*cdf0e10cSrcweir 1205*cdf0e10cSrcweir SvxTabAdjust ToAttrTab_Impl(sal_uInt16 eAdj) 1206*cdf0e10cSrcweir { 1207*cdf0e10cSrcweir switch(eAdj) { 1208*cdf0e10cSrcweir case RULER_TAB_LEFT: return SVX_TAB_ADJUST_LEFT ; 1209*cdf0e10cSrcweir case RULER_TAB_RIGHT: return SVX_TAB_ADJUST_RIGHT ; 1210*cdf0e10cSrcweir case RULER_TAB_DECIMAL: return SVX_TAB_ADJUST_DECIMAL ; 1211*cdf0e10cSrcweir case RULER_TAB_CENTER: return SVX_TAB_ADJUST_CENTER ; 1212*cdf0e10cSrcweir case RULER_TAB_DEFAULT: return SVX_TAB_ADJUST_DEFAULT ; 1213*cdf0e10cSrcweir } 1214*cdf0e10cSrcweir return SVX_TAB_ADJUST_LEFT; 1215*cdf0e10cSrcweir } 1216*cdf0e10cSrcweir 1217*cdf0e10cSrcweir 1218*cdf0e10cSrcweir void SvxRuler::UpdateTabs() 1219*cdf0e10cSrcweir 1220*cdf0e10cSrcweir /* 1221*cdf0e10cSrcweir [Beschreibung] 1222*cdf0e10cSrcweir 1223*cdf0e10cSrcweir Anzeige der Tabulatoren 1224*cdf0e10cSrcweir 1225*cdf0e10cSrcweir */ 1226*cdf0e10cSrcweir 1227*cdf0e10cSrcweir { 1228*cdf0e10cSrcweir if(IsDrag()) 1229*cdf0e10cSrcweir return; 1230*cdf0e10cSrcweir if(pPagePosItem && pParaItem && pTabStopItem && !pObjectItem) 1231*cdf0e10cSrcweir { 1232*cdf0e10cSrcweir // Puffer fuer DefaultTabStop 1233*cdf0e10cSrcweir // Abstand letzter Tab <-> Rechter Absatzrand / DefaultTabDist 1234*cdf0e10cSrcweir sal_Bool bRTL = pRuler_Imp->pTextRTLItem && pRuler_Imp->pTextRTLItem->GetValue(); 1235*cdf0e10cSrcweir long nLeftFrameMargin = GetLeftFrameMargin(); 1236*cdf0e10cSrcweir long nRightFrameMargin = GetRightFrameMargin(); 1237*cdf0e10cSrcweir 1238*cdf0e10cSrcweir //#i24363# tab stops relative to indent 1239*cdf0e10cSrcweir const long nParaItemTxtLeft = pParaItem->GetTxtLeft(); 1240*cdf0e10cSrcweir 1241*cdf0e10cSrcweir const long lParaIndent = nLeftFrameMargin + nParaItemTxtLeft; 1242*cdf0e10cSrcweir 1243*cdf0e10cSrcweir const long lLastTab = 1244*cdf0e10cSrcweir pTabStopItem->Count()? 1245*cdf0e10cSrcweir ConvertHPosPixel((*pTabStopItem)[pTabStopItem->Count()-1].GetTabPos()): 0; 1246*cdf0e10cSrcweir const long lPosPixel = 1247*cdf0e10cSrcweir ConvertHPosPixel(lParaIndent) + lLastTab; 1248*cdf0e10cSrcweir const long lRightIndent = 1249*cdf0e10cSrcweir ConvertHPosPixel(nRightFrameMargin - pParaItem->GetRight()); 1250*cdf0e10cSrcweir long nDefTabDist = ConvertHPosPixel(lDefTabDist); 1251*cdf0e10cSrcweir if( !nDefTabDist ) 1252*cdf0e10cSrcweir nDefTabDist = 1; 1253*cdf0e10cSrcweir const sal_uInt16 nDefTabBuf = lPosPixel > lRightIndent || 1254*cdf0e10cSrcweir lLastTab > lRightIndent 1255*cdf0e10cSrcweir ? 0 1256*cdf0e10cSrcweir : (sal_uInt16)( (lRightIndent - lPosPixel) / nDefTabDist ); 1257*cdf0e10cSrcweir 1258*cdf0e10cSrcweir if(pTabStopItem->Count() + TAB_GAP + nDefTabBuf > nTabBufSize) 1259*cdf0e10cSrcweir { 1260*cdf0e10cSrcweir delete[] pTabs; 1261*cdf0e10cSrcweir // 10 (GAP) auf Vorrat 1262*cdf0e10cSrcweir nTabBufSize = pTabStopItem->Count() + TAB_GAP + nDefTabBuf + GAP; 1263*cdf0e10cSrcweir pTabs = new RulerTab[nTabBufSize]; 1264*cdf0e10cSrcweir } 1265*cdf0e10cSrcweir 1266*cdf0e10cSrcweir nTabCount = 0; 1267*cdf0e10cSrcweir sal_uInt16 j; 1268*cdf0e10cSrcweir //#i24363# tab stops relative to indent 1269*cdf0e10cSrcweir const long lRightPixMargin = ConvertSizePixel(nRightFrameMargin - nParaItemTxtLeft ); 1270*cdf0e10cSrcweir const long lParaIndentPix = ConvertSizePixel(lParaIndent); 1271*cdf0e10cSrcweir for(j = 0; j < pTabStopItem->Count(); ++j) 1272*cdf0e10cSrcweir { 1273*cdf0e10cSrcweir const SvxTabStop *pTab = &(*pTabStopItem)[j]; 1274*cdf0e10cSrcweir pTabs[nTabCount+TAB_GAP].nPos = 1275*cdf0e10cSrcweir ConvertHPosPixel( 1276*cdf0e10cSrcweir (pRuler_Imp->bIsTabsRelativeToIndent ? lParaIndent : 0 ) + pTab->GetTabPos() + lAppNullOffset); 1277*cdf0e10cSrcweir if(bRTL) 1278*cdf0e10cSrcweir { 1279*cdf0e10cSrcweir pTabs[nTabCount+TAB_GAP].nPos = lParaIndentPix + lRightPixMargin - pTabs[nTabCount+TAB_GAP].nPos; 1280*cdf0e10cSrcweir } 1281*cdf0e10cSrcweir pTabs[nTabCount+TAB_GAP].nStyle = ToSvTab_Impl(pTab->GetAdjustment()); 1282*cdf0e10cSrcweir ++nTabCount; 1283*cdf0e10cSrcweir } 1284*cdf0e10cSrcweir if(!pTabStopItem->Count()) 1285*cdf0e10cSrcweir pTabs[0].nPos = bRTL ? lRightPixMargin : lParaIndentPix; 1286*cdf0e10cSrcweir 1287*cdf0e10cSrcweir // Rest mit Default-Tabs fuellen 1288*cdf0e10cSrcweir if(bRTL) 1289*cdf0e10cSrcweir { 1290*cdf0e10cSrcweir for(j = 0; j < nDefTabBuf; ++j) 1291*cdf0e10cSrcweir { 1292*cdf0e10cSrcweir pTabs[nTabCount + TAB_GAP].nPos = 1293*cdf0e10cSrcweir pTabs[nTabCount].nPos - nDefTabDist; 1294*cdf0e10cSrcweir 1295*cdf0e10cSrcweir if(j == 0 ) 1296*cdf0e10cSrcweir pTabs[nTabCount + TAB_GAP].nPos -= 1297*cdf0e10cSrcweir ((pTabs[nTabCount + TAB_GAP].nPos - lRightPixMargin) 1298*cdf0e10cSrcweir % nDefTabDist ); 1299*cdf0e10cSrcweir if(pTabs[nTabCount+TAB_GAP].nPos <= lParaIndentPix) 1300*cdf0e10cSrcweir break; 1301*cdf0e10cSrcweir pTabs[nTabCount + TAB_GAP].nStyle = RULER_TAB_DEFAULT; 1302*cdf0e10cSrcweir ++nTabCount; 1303*cdf0e10cSrcweir } 1304*cdf0e10cSrcweir } 1305*cdf0e10cSrcweir else 1306*cdf0e10cSrcweir { 1307*cdf0e10cSrcweir for(j = 0; j < nDefTabBuf; ++j) 1308*cdf0e10cSrcweir { 1309*cdf0e10cSrcweir if( j == 0 ) 1310*cdf0e10cSrcweir { 1311*cdf0e10cSrcweir //set the first default tab stop 1312*cdf0e10cSrcweir if(pRuler_Imp->bIsTabsRelativeToIndent) 1313*cdf0e10cSrcweir { 1314*cdf0e10cSrcweir pTabs[nTabCount + TAB_GAP].nPos = 1315*cdf0e10cSrcweir (pTabs[nTabCount].nPos + nDefTabDist); 1316*cdf0e10cSrcweir pTabs[nTabCount + TAB_GAP].nPos -= 1317*cdf0e10cSrcweir ((pTabs[nTabCount + TAB_GAP].nPos - lParaIndentPix) 1318*cdf0e10cSrcweir % nDefTabDist ); 1319*cdf0e10cSrcweir } 1320*cdf0e10cSrcweir else 1321*cdf0e10cSrcweir { 1322*cdf0e10cSrcweir if( pTabs[nTabCount].nPos < 0 ) 1323*cdf0e10cSrcweir { 1324*cdf0e10cSrcweir pTabs[nTabCount + TAB_GAP].nPos = ( pTabs[nTabCount].nPos / nDefTabDist ) * nDefTabDist; 1325*cdf0e10cSrcweir } 1326*cdf0e10cSrcweir else 1327*cdf0e10cSrcweir { 1328*cdf0e10cSrcweir pTabs[nTabCount + TAB_GAP].nPos = ( pTabs[nTabCount].nPos / nDefTabDist + 1 ) * nDefTabDist; 1329*cdf0e10cSrcweir } 1330*cdf0e10cSrcweir } 1331*cdf0e10cSrcweir 1332*cdf0e10cSrcweir } 1333*cdf0e10cSrcweir else 1334*cdf0e10cSrcweir { 1335*cdf0e10cSrcweir //simply add the default distance to the last position 1336*cdf0e10cSrcweir pTabs[nTabCount + TAB_GAP].nPos = 1337*cdf0e10cSrcweir pTabs[nTabCount].nPos + nDefTabDist; 1338*cdf0e10cSrcweir } 1339*cdf0e10cSrcweir 1340*cdf0e10cSrcweir if(pTabs[nTabCount+TAB_GAP].nPos >= lRightIndent) 1341*cdf0e10cSrcweir break; 1342*cdf0e10cSrcweir pTabs[nTabCount + TAB_GAP].nStyle = RULER_TAB_DEFAULT; 1343*cdf0e10cSrcweir ++nTabCount; 1344*cdf0e10cSrcweir } 1345*cdf0e10cSrcweir } 1346*cdf0e10cSrcweir SetTabs(nTabCount, pTabs+TAB_GAP); 1347*cdf0e10cSrcweir DBG_ASSERT(nTabCount + TAB_GAP <= nTabBufSize, "BufferSize zu klein"); 1348*cdf0e10cSrcweir } 1349*cdf0e10cSrcweir else 1350*cdf0e10cSrcweir { 1351*cdf0e10cSrcweir SetTabs(); 1352*cdf0e10cSrcweir } 1353*cdf0e10cSrcweir } 1354*cdf0e10cSrcweir 1355*cdf0e10cSrcweir 1356*cdf0e10cSrcweir void SvxRuler::Update 1357*cdf0e10cSrcweir ( 1358*cdf0e10cSrcweir const SvxTabStopItem *pItem // Neuer Wert fuer Tabulatoren 1359*cdf0e10cSrcweir ) 1360*cdf0e10cSrcweir 1361*cdf0e10cSrcweir /* 1362*cdf0e10cSrcweir [Beschreibung] 1363*cdf0e10cSrcweir 1364*cdf0e10cSrcweir Neuen Wert fuer Tabulatoren merken; alten gfs. loeschen 1365*cdf0e10cSrcweir 1366*cdf0e10cSrcweir */ 1367*cdf0e10cSrcweir 1368*cdf0e10cSrcweir { 1369*cdf0e10cSrcweir if(bActive) 1370*cdf0e10cSrcweir { 1371*cdf0e10cSrcweir delete pTabStopItem; pTabStopItem = 0; 1372*cdf0e10cSrcweir if(pItem) 1373*cdf0e10cSrcweir { 1374*cdf0e10cSrcweir pTabStopItem = new SvxTabStopItem(*pItem); 1375*cdf0e10cSrcweir if(!bHorz) 1376*cdf0e10cSrcweir pTabStopItem->SetWhich(SID_ATTR_TABSTOP_VERTICAL); 1377*cdf0e10cSrcweir } 1378*cdf0e10cSrcweir StartListening_Impl(); 1379*cdf0e10cSrcweir } 1380*cdf0e10cSrcweir } 1381*cdf0e10cSrcweir 1382*cdf0e10cSrcweir 1383*cdf0e10cSrcweir void SvxRuler::Update 1384*cdf0e10cSrcweir ( 1385*cdf0e10cSrcweir const SvxObjectItem *pItem // Neuer Wert fuer Objekte 1386*cdf0e10cSrcweir ) 1387*cdf0e10cSrcweir 1388*cdf0e10cSrcweir /* 1389*cdf0e10cSrcweir [Beschreibung] 1390*cdf0e10cSrcweir 1391*cdf0e10cSrcweir Neuen Wert fuer Objekte merken 1392*cdf0e10cSrcweir 1393*cdf0e10cSrcweir */ 1394*cdf0e10cSrcweir 1395*cdf0e10cSrcweir { 1396*cdf0e10cSrcweir if(bActive) 1397*cdf0e10cSrcweir { 1398*cdf0e10cSrcweir delete pObjectItem; pObjectItem = 0; 1399*cdf0e10cSrcweir if(pItem) 1400*cdf0e10cSrcweir pObjectItem = new SvxObjectItem(*pItem); 1401*cdf0e10cSrcweir StartListening_Impl(); 1402*cdf0e10cSrcweir } 1403*cdf0e10cSrcweir } 1404*cdf0e10cSrcweir 1405*cdf0e10cSrcweir 1406*cdf0e10cSrcweir void SvxRuler::SetNullOffsetLogic 1407*cdf0e10cSrcweir ( 1408*cdf0e10cSrcweir long lVal // Setzen des logischen NullOffsets 1409*cdf0e10cSrcweir ) 1410*cdf0e10cSrcweir { 1411*cdf0e10cSrcweir lAppNullOffset = lLogicNullOffset - lVal; 1412*cdf0e10cSrcweir bAppSetNullOffset = sal_True; 1413*cdf0e10cSrcweir Ruler::SetNullOffset(ConvertSizePixel(lVal)); 1414*cdf0e10cSrcweir Update(); 1415*cdf0e10cSrcweir } 1416*cdf0e10cSrcweir 1417*cdf0e10cSrcweir 1418*cdf0e10cSrcweir void SvxRuler::Update() 1419*cdf0e10cSrcweir 1420*cdf0e10cSrcweir /* 1421*cdf0e10cSrcweir [Beschreibung] 1422*cdf0e10cSrcweir 1423*cdf0e10cSrcweir Aktualisierung der Anzeige anstossen 1424*cdf0e10cSrcweir 1425*cdf0e10cSrcweir */ 1426*cdf0e10cSrcweir 1427*cdf0e10cSrcweir { 1428*cdf0e10cSrcweir if(IsDrag()) 1429*cdf0e10cSrcweir return; 1430*cdf0e10cSrcweir UpdatePage(); 1431*cdf0e10cSrcweir UpdateFrame(); 1432*cdf0e10cSrcweir if((nFlags & SVXRULER_SUPPORT_OBJECT) == SVXRULER_SUPPORT_OBJECT) 1433*cdf0e10cSrcweir UpdateObject(); 1434*cdf0e10cSrcweir else 1435*cdf0e10cSrcweir UpdateColumns(); 1436*cdf0e10cSrcweir 1437*cdf0e10cSrcweir if(0 != (nFlags & (SVXRULER_SUPPORT_PARAGRAPH_MARGINS |SVXRULER_SUPPORT_PARAGRAPH_MARGINS_VERTICAL))) 1438*cdf0e10cSrcweir UpdatePara(); 1439*cdf0e10cSrcweir if(0 != (nFlags & SVXRULER_SUPPORT_TABS)) 1440*cdf0e10cSrcweir UpdateTabs(); 1441*cdf0e10cSrcweir } 1442*cdf0e10cSrcweir 1443*cdf0e10cSrcweir 1444*cdf0e10cSrcweir inline long SvxRuler::GetPageWidth() const 1445*cdf0e10cSrcweir { 1446*cdf0e10cSrcweir return bHorz ? pPagePosItem->GetWidth() : pPagePosItem->GetHeight(); 1447*cdf0e10cSrcweir 1448*cdf0e10cSrcweir } 1449*cdf0e10cSrcweir 1450*cdf0e10cSrcweir 1451*cdf0e10cSrcweir inline long SvxRuler::GetFrameLeft() const 1452*cdf0e10cSrcweir 1453*cdf0e10cSrcweir /* 1454*cdf0e10cSrcweir [Beschreibung] 1455*cdf0e10cSrcweir 1456*cdf0e10cSrcweir Erfragen des linken Randes in Pixeln 1457*cdf0e10cSrcweir 1458*cdf0e10cSrcweir */ 1459*cdf0e10cSrcweir 1460*cdf0e10cSrcweir 1461*cdf0e10cSrcweir { 1462*cdf0e10cSrcweir return bAppSetNullOffset? 1463*cdf0e10cSrcweir GetMargin1() + ConvertSizePixel(lLogicNullOffset): 1464*cdf0e10cSrcweir Ruler::GetNullOffset(); 1465*cdf0e10cSrcweir } 1466*cdf0e10cSrcweir 1467*cdf0e10cSrcweir inline void SvxRuler::SetFrameLeft(long l) 1468*cdf0e10cSrcweir 1469*cdf0e10cSrcweir /* 1470*cdf0e10cSrcweir [Beschreibung] 1471*cdf0e10cSrcweir 1472*cdf0e10cSrcweir Setzen des linken Randes in Pixeln 1473*cdf0e10cSrcweir 1474*cdf0e10cSrcweir */ 1475*cdf0e10cSrcweir 1476*cdf0e10cSrcweir { 1477*cdf0e10cSrcweir sal_Bool bProtectColumns = 1478*cdf0e10cSrcweir pRuler_Imp->aProtectItem.IsSizeProtected() || 1479*cdf0e10cSrcweir pRuler_Imp->aProtectItem.IsPosProtected(); 1480*cdf0e10cSrcweir if(bAppSetNullOffset) 1481*cdf0e10cSrcweir SetMargin1(l - ConvertSizePixel(lLogicNullOffset), 1482*cdf0e10cSrcweir bProtectColumns ? 0 : RULER_MARGIN_SIZEABLE); 1483*cdf0e10cSrcweir else 1484*cdf0e10cSrcweir Ruler::SetNullOffset(l); 1485*cdf0e10cSrcweir } 1486*cdf0e10cSrcweir 1487*cdf0e10cSrcweir 1488*cdf0e10cSrcweir long SvxRuler::GetFirstLineIndent() const 1489*cdf0e10cSrcweir 1490*cdf0e10cSrcweir /* 1491*cdf0e10cSrcweir [Beschreibung] 1492*cdf0e10cSrcweir 1493*cdf0e10cSrcweir Erstzeileneinzug in Pixels erfragen 1494*cdf0e10cSrcweir */ 1495*cdf0e10cSrcweir 1496*cdf0e10cSrcweir { 1497*cdf0e10cSrcweir return pParaItem? pIndents[INDENT_FIRST_LINE].nPos: GetMargin1(); 1498*cdf0e10cSrcweir } 1499*cdf0e10cSrcweir 1500*cdf0e10cSrcweir 1501*cdf0e10cSrcweir long SvxRuler::GetLeftIndent() const 1502*cdf0e10cSrcweir 1503*cdf0e10cSrcweir /* 1504*cdf0e10cSrcweir [Beschreibung] 1505*cdf0e10cSrcweir 1506*cdf0e10cSrcweir Linken Absatzrand in Pixels erfragen 1507*cdf0e10cSrcweir */ 1508*cdf0e10cSrcweir 1509*cdf0e10cSrcweir { 1510*cdf0e10cSrcweir return pParaItem? pIndents[INDENT_LEFT_MARGIN].nPos: GetMargin1(); 1511*cdf0e10cSrcweir } 1512*cdf0e10cSrcweir 1513*cdf0e10cSrcweir 1514*cdf0e10cSrcweir 1515*cdf0e10cSrcweir long SvxRuler::GetRightIndent() const 1516*cdf0e10cSrcweir 1517*cdf0e10cSrcweir /* 1518*cdf0e10cSrcweir [Beschreibung] 1519*cdf0e10cSrcweir 1520*cdf0e10cSrcweir Rechten Absatzrand in Pixels erfragen 1521*cdf0e10cSrcweir */ 1522*cdf0e10cSrcweir 1523*cdf0e10cSrcweir { 1524*cdf0e10cSrcweir return pParaItem? pIndents[INDENT_RIGHT_MARGIN].nPos: GetMargin2(); 1525*cdf0e10cSrcweir } 1526*cdf0e10cSrcweir 1527*cdf0e10cSrcweir 1528*cdf0e10cSrcweir long SvxRuler::GetLogicRightIndent() const 1529*cdf0e10cSrcweir 1530*cdf0e10cSrcweir /* 1531*cdf0e10cSrcweir [Beschreibung] 1532*cdf0e10cSrcweir 1533*cdf0e10cSrcweir Rechten Absatzrand in Logic erfragen 1534*cdf0e10cSrcweir */ 1535*cdf0e10cSrcweir 1536*cdf0e10cSrcweir { 1537*cdf0e10cSrcweir return pParaItem ? GetRightFrameMargin()-pParaItem->GetRight() : GetRightFrameMargin(); 1538*cdf0e10cSrcweir } 1539*cdf0e10cSrcweir 1540*cdf0e10cSrcweir // linker Rand in App-Werten; ist entweder der Seitenrand (=0) 1541*cdf0e10cSrcweir // oder der linke Rand der Spalte, die im Spaltenattribut als 1542*cdf0e10cSrcweir // altuelle Spalte eingestellt ist. 1543*cdf0e10cSrcweir 1544*cdf0e10cSrcweir long SvxRuler::GetLeftFrameMargin() const 1545*cdf0e10cSrcweir { 1546*cdf0e10cSrcweir // #126721# for some unknown reason the current column is set to 0xffff 1547*cdf0e10cSrcweir DBG_ASSERT(!pColumnItem || pColumnItem->GetActColumn() < pColumnItem->Count(), 1548*cdf0e10cSrcweir "issue #126721# - invalid current column!"); 1549*cdf0e10cSrcweir long nLeft = 1550*cdf0e10cSrcweir pColumnItem && pColumnItem->Count() && pColumnItem->GetActColumn() < pColumnItem->Count() ? 1551*cdf0e10cSrcweir (*pColumnItem)[pColumnItem->GetActColumn()].nStart : 0; 1552*cdf0e10cSrcweir if(pParaBorderItem && (!pColumnItem || pColumnItem->IsTable())) 1553*cdf0e10cSrcweir nLeft += pParaBorderItem->GetLeft(); 1554*cdf0e10cSrcweir return nLeft; 1555*cdf0e10cSrcweir } 1556*cdf0e10cSrcweir 1557*cdf0e10cSrcweir inline long SvxRuler::GetLeftMin() const 1558*cdf0e10cSrcweir { 1559*cdf0e10cSrcweir DBG_ASSERT(pMinMaxItem, "kein MinMax-Wert gesetzt"); 1560*cdf0e10cSrcweir return pMinMaxItem? 1561*cdf0e10cSrcweir bHorz? pMinMaxItem->GetValue().Left(): pMinMaxItem->GetValue().Top() 1562*cdf0e10cSrcweir : 0; 1563*cdf0e10cSrcweir } 1564*cdf0e10cSrcweir 1565*cdf0e10cSrcweir inline long SvxRuler::GetRightMax() const 1566*cdf0e10cSrcweir { 1567*cdf0e10cSrcweir DBG_ASSERT(pMinMaxItem, "kein MinMax-Wert gesetzt"); 1568*cdf0e10cSrcweir return pMinMaxItem? 1569*cdf0e10cSrcweir bHorz? pMinMaxItem->GetValue().Right(): pMinMaxItem->GetValue().Bottom() 1570*cdf0e10cSrcweir : 0; 1571*cdf0e10cSrcweir } 1572*cdf0e10cSrcweir 1573*cdf0e10cSrcweir 1574*cdf0e10cSrcweir long SvxRuler::GetRightFrameMargin() const 1575*cdf0e10cSrcweir 1576*cdf0e10cSrcweir /* 1577*cdf0e10cSrcweir [Beschreibung] 1578*cdf0e10cSrcweir 1579*cdf0e10cSrcweir Rechten umgebenden Rand erfragen (in logischen Einheiten) 1580*cdf0e10cSrcweir 1581*cdf0e10cSrcweir */ 1582*cdf0e10cSrcweir 1583*cdf0e10cSrcweir { 1584*cdf0e10cSrcweir if(pColumnItem) 1585*cdf0e10cSrcweir { 1586*cdf0e10cSrcweir if(!IsActLastColumn( sal_True )) 1587*cdf0e10cSrcweir { 1588*cdf0e10cSrcweir long nRet = (*pColumnItem)[GetActRightColumn( sal_True )].nEnd; 1589*cdf0e10cSrcweir if(pColumnItem->IsTable() && pParaBorderItem) 1590*cdf0e10cSrcweir nRet -= pParaBorderItem->GetRight(); 1591*cdf0e10cSrcweir return nRet; 1592*cdf0e10cSrcweir } 1593*cdf0e10cSrcweir } 1594*cdf0e10cSrcweir 1595*cdf0e10cSrcweir long l = lLogicNullOffset; 1596*cdf0e10cSrcweir 1597*cdf0e10cSrcweir // gfs. rechten Tabelleneinzug abziehen 1598*cdf0e10cSrcweir if(pColumnItem && pColumnItem->IsTable()) 1599*cdf0e10cSrcweir l += pColumnItem->GetRight(); 1600*cdf0e10cSrcweir else if(bHorz && pLRSpaceItem) 1601*cdf0e10cSrcweir l += pLRSpaceItem->GetRight(); 1602*cdf0e10cSrcweir else if(!bHorz && pULSpaceItem) 1603*cdf0e10cSrcweir l += pULSpaceItem->GetLower(); 1604*cdf0e10cSrcweir 1605*cdf0e10cSrcweir if(pParaBorderItem && 1606*cdf0e10cSrcweir (!pColumnItem || pColumnItem->IsTable()||IsActLastColumn( sal_True ))) 1607*cdf0e10cSrcweir l += pParaBorderItem->GetRight(); 1608*cdf0e10cSrcweir 1609*cdf0e10cSrcweir if(bHorz) 1610*cdf0e10cSrcweir l = pPagePosItem->GetWidth() - l; 1611*cdf0e10cSrcweir else 1612*cdf0e10cSrcweir l = pPagePosItem->GetHeight() - l; 1613*cdf0e10cSrcweir return l; 1614*cdf0e10cSrcweir } 1615*cdf0e10cSrcweir 1616*cdf0e10cSrcweir #define NEG_FLAG ( (nFlags & SVXRULER_SUPPORT_NEGATIVE_MARGINS) == \ 1617*cdf0e10cSrcweir SVXRULER_SUPPORT_NEGATIVE_MARGINS ) 1618*cdf0e10cSrcweir #define TAB_FLAG ( pColumnItem && pColumnItem->IsTable() ) 1619*cdf0e10cSrcweir 1620*cdf0e10cSrcweir long SvxRuler::GetCorrectedDragPos( sal_Bool bLeft, sal_Bool bRight ) 1621*cdf0e10cSrcweir 1622*cdf0e10cSrcweir /* 1623*cdf0e10cSrcweir [Beschreibung] 1624*cdf0e10cSrcweir 1625*cdf0e10cSrcweir Korrigiert die Position innerhalb der errechneten Grenzwerte. 1626*cdf0e10cSrcweir Die Grenzwerte sind in Pixel relativ zum Seitenrand. 1627*cdf0e10cSrcweir 1628*cdf0e10cSrcweir */ 1629*cdf0e10cSrcweir 1630*cdf0e10cSrcweir { 1631*cdf0e10cSrcweir const long lNullPix = Ruler::GetNullOffset(); 1632*cdf0e10cSrcweir long lDragPos = GetDragPos() + lNullPix; 1633*cdf0e10cSrcweir ADD_DEBUG_TEXT("lDragPos: ", String::CreateFromInt32(lDragPos)) 1634*cdf0e10cSrcweir sal_Bool bHoriRows = bHorz && pRuler_Imp->bIsTableRows; 1635*cdf0e10cSrcweir if((bLeft || (bHoriRows)) && lDragPos < nMaxLeft) 1636*cdf0e10cSrcweir lDragPos = nMaxLeft; 1637*cdf0e10cSrcweir else if((bRight||bHoriRows) && lDragPos > nMaxRight) 1638*cdf0e10cSrcweir lDragPos = nMaxRight; 1639*cdf0e10cSrcweir return lDragPos - lNullPix; 1640*cdf0e10cSrcweir } 1641*cdf0e10cSrcweir 1642*cdf0e10cSrcweir 1643*cdf0e10cSrcweir 1644*cdf0e10cSrcweir void ModifyTabs_Impl 1645*cdf0e10cSrcweir ( 1646*cdf0e10cSrcweir sal_uInt16 nCount, // Anzahl Tabs 1647*cdf0e10cSrcweir RulerTab *pTabs, // Tab-Puffer 1648*cdf0e10cSrcweir long lDiff // zu addierende Differenz 1649*cdf0e10cSrcweir ) 1650*cdf0e10cSrcweir 1651*cdf0e10cSrcweir /* 1652*cdf0e10cSrcweir [Beschreibung] 1653*cdf0e10cSrcweir 1654*cdf0e10cSrcweir Hilfsroutine; alle Tabs um einen festen Wert verschieben 1655*cdf0e10cSrcweir 1656*cdf0e10cSrcweir */ 1657*cdf0e10cSrcweir { 1658*cdf0e10cSrcweir if( pTabs ) 1659*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nCount; ++i) pTabs[i].nPos += lDiff; 1660*cdf0e10cSrcweir } 1661*cdf0e10cSrcweir 1662*cdf0e10cSrcweir 1663*cdf0e10cSrcweir 1664*cdf0e10cSrcweir void SvxRuler::DragMargin1() 1665*cdf0e10cSrcweir 1666*cdf0e10cSrcweir /* 1667*cdf0e10cSrcweir [Beschreibung] 1668*cdf0e10cSrcweir 1669*cdf0e10cSrcweir Draggen des linken Frame-Randes 1670*cdf0e10cSrcweir 1671*cdf0e10cSrcweir */ 1672*cdf0e10cSrcweir { 1673*cdf0e10cSrcweir const long lDragPos = GetCorrectedDragPos( !TAB_FLAG || !NEG_FLAG, sal_True ); 1674*cdf0e10cSrcweir DrawLine_Impl(lTabPos, ( TAB_FLAG && NEG_FLAG ) ? 3 : 7, bHorz); 1675*cdf0e10cSrcweir if(pColumnItem&& 1676*cdf0e10cSrcweir (//nDragType & DRAG_OBJECT_SIZE_LINEAR || 1677*cdf0e10cSrcweir nDragType & DRAG_OBJECT_SIZE_PROPORTIONAL)) 1678*cdf0e10cSrcweir DragBorders(); 1679*cdf0e10cSrcweir AdjustMargin1(lDragPos); 1680*cdf0e10cSrcweir } 1681*cdf0e10cSrcweir void SvxRuler::AdjustMargin1(long lDiff) 1682*cdf0e10cSrcweir { 1683*cdf0e10cSrcweir const long nOld = bAppSetNullOffset? GetMargin1(): GetNullOffset(); 1684*cdf0e10cSrcweir const long lDragPos = lDiff; 1685*cdf0e10cSrcweir sal_Bool bProtectColumns = 1686*cdf0e10cSrcweir pRuler_Imp->aProtectItem.IsSizeProtected() || 1687*cdf0e10cSrcweir pRuler_Imp->aProtectItem.IsPosProtected(); 1688*cdf0e10cSrcweir 1689*cdf0e10cSrcweir const sal_uInt16 nMarginStyle = 1690*cdf0e10cSrcweir bProtectColumns ? 0 : RULER_MARGIN_SIZEABLE; 1691*cdf0e10cSrcweir 1692*cdf0e10cSrcweir if(!bAppSetNullOffset) 1693*cdf0e10cSrcweir { 1694*cdf0e10cSrcweir long _lDiff = lDragPos; 1695*cdf0e10cSrcweir SetNullOffset(nOld + _lDiff); 1696*cdf0e10cSrcweir if(!pColumnItem||!(nDragType & DRAG_OBJECT_SIZE_LINEAR)) 1697*cdf0e10cSrcweir { 1698*cdf0e10cSrcweir SetMargin2( GetMargin2() - _lDiff, nMarginStyle ); 1699*cdf0e10cSrcweir 1700*cdf0e10cSrcweir if(!pColumnItem && !pObjectItem && pParaItem) 1701*cdf0e10cSrcweir { 1702*cdf0e10cSrcweir // Rechten Einzug an alter Position 1703*cdf0e10cSrcweir pIndents[INDENT_RIGHT_MARGIN].nPos -= _lDiff; 1704*cdf0e10cSrcweir SetIndents(INDENT_COUNT, pIndents+INDENT_GAP); 1705*cdf0e10cSrcweir } 1706*cdf0e10cSrcweir if(pObjectItem) 1707*cdf0e10cSrcweir { 1708*cdf0e10cSrcweir pObjectBorders[GetObjectBordersOff(0)].nPos -= _lDiff; 1709*cdf0e10cSrcweir pObjectBorders[GetObjectBordersOff(1)].nPos -= _lDiff; 1710*cdf0e10cSrcweir SetBorders(2, pObjectBorders + GetObjectBordersOff(0)); 1711*cdf0e10cSrcweir } 1712*cdf0e10cSrcweir if(pColumnItem) 1713*cdf0e10cSrcweir { 1714*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < pColumnItem->Count()-1; ++i) 1715*cdf0e10cSrcweir pBorders[i].nPos -= _lDiff; 1716*cdf0e10cSrcweir SetBorders(pColumnItem->Count()-1, pBorders); 1717*cdf0e10cSrcweir if(pColumnItem->IsFirstAct()) 1718*cdf0e10cSrcweir { 1719*cdf0e10cSrcweir // Rechten Einzug an alter Position 1720*cdf0e10cSrcweir if(pParaItem) 1721*cdf0e10cSrcweir { 1722*cdf0e10cSrcweir pIndents[INDENT_RIGHT_MARGIN].nPos -= _lDiff; 1723*cdf0e10cSrcweir SetIndents(INDENT_COUNT, pIndents+INDENT_GAP); 1724*cdf0e10cSrcweir } 1725*cdf0e10cSrcweir } 1726*cdf0e10cSrcweir else 1727*cdf0e10cSrcweir { 1728*cdf0e10cSrcweir if(pParaItem) 1729*cdf0e10cSrcweir { 1730*cdf0e10cSrcweir pIndents[INDENT_FIRST_LINE].nPos -= _lDiff; 1731*cdf0e10cSrcweir pIndents[INDENT_LEFT_MARGIN].nPos -= _lDiff; 1732*cdf0e10cSrcweir pIndents[INDENT_RIGHT_MARGIN].nPos -= _lDiff; 1733*cdf0e10cSrcweir SetIndents(INDENT_COUNT, pIndents+INDENT_GAP); 1734*cdf0e10cSrcweir } 1735*cdf0e10cSrcweir } 1736*cdf0e10cSrcweir if(pTabStopItem&& (nDragType & DRAG_OBJECT_SIZE_PROPORTIONAL) 1737*cdf0e10cSrcweir &&!IsActFirstColumn()) 1738*cdf0e10cSrcweir { 1739*cdf0e10cSrcweir ModifyTabs_Impl(nTabCount+TAB_GAP, pTabs, -_lDiff); 1740*cdf0e10cSrcweir SetTabs(nTabCount, pTabs+TAB_GAP); 1741*cdf0e10cSrcweir } 1742*cdf0e10cSrcweir } 1743*cdf0e10cSrcweir } 1744*cdf0e10cSrcweir } 1745*cdf0e10cSrcweir else 1746*cdf0e10cSrcweir { 1747*cdf0e10cSrcweir long _lDiff = lDragPos - nOld; 1748*cdf0e10cSrcweir SetMargin1(nOld + _lDiff, nMarginStyle ); 1749*cdf0e10cSrcweir 1750*cdf0e10cSrcweir if(!pColumnItem||!(nDragType & (DRAG_OBJECT_SIZE_LINEAR | 1751*cdf0e10cSrcweir DRAG_OBJECT_SIZE_PROPORTIONAL))) 1752*cdf0e10cSrcweir { 1753*cdf0e10cSrcweir if(!pColumnItem && !pObjectItem && pParaItem) 1754*cdf0e10cSrcweir { 1755*cdf0e10cSrcweir // Linke Einzuege an alter Position 1756*cdf0e10cSrcweir pIndents[INDENT_FIRST_LINE].nPos += _lDiff; 1757*cdf0e10cSrcweir pIndents[INDENT_LEFT_MARGIN].nPos += _lDiff; 1758*cdf0e10cSrcweir SetIndents(INDENT_COUNT, pIndents+INDENT_GAP); 1759*cdf0e10cSrcweir } 1760*cdf0e10cSrcweir 1761*cdf0e10cSrcweir if(pColumnItem) 1762*cdf0e10cSrcweir { 1763*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < pColumnItem->Count()-1; ++i) 1764*cdf0e10cSrcweir pBorders[i].nPos += _lDiff; 1765*cdf0e10cSrcweir SetBorders(pColumnItem->Count()-1, pBorders); 1766*cdf0e10cSrcweir if(pColumnItem->IsFirstAct()) 1767*cdf0e10cSrcweir { 1768*cdf0e10cSrcweir // Linke Einzuege an alter Position 1769*cdf0e10cSrcweir if(pParaItem) 1770*cdf0e10cSrcweir { 1771*cdf0e10cSrcweir pIndents[INDENT_FIRST_LINE].nPos += _lDiff; 1772*cdf0e10cSrcweir pIndents[INDENT_LEFT_MARGIN].nPos += _lDiff; 1773*cdf0e10cSrcweir SetIndents(INDENT_COUNT, pIndents+INDENT_GAP); 1774*cdf0e10cSrcweir } 1775*cdf0e10cSrcweir } 1776*cdf0e10cSrcweir else 1777*cdf0e10cSrcweir { 1778*cdf0e10cSrcweir if(pParaItem) 1779*cdf0e10cSrcweir { 1780*cdf0e10cSrcweir pIndents[INDENT_FIRST_LINE].nPos += _lDiff; 1781*cdf0e10cSrcweir pIndents[INDENT_LEFT_MARGIN].nPos += _lDiff; 1782*cdf0e10cSrcweir pIndents[INDENT_RIGHT_MARGIN].nPos += _lDiff; 1783*cdf0e10cSrcweir SetIndents(INDENT_COUNT, pIndents+INDENT_GAP); 1784*cdf0e10cSrcweir } 1785*cdf0e10cSrcweir } 1786*cdf0e10cSrcweir } 1787*cdf0e10cSrcweir if(pTabStopItem) 1788*cdf0e10cSrcweir { 1789*cdf0e10cSrcweir ModifyTabs_Impl(nTabCount+TAB_GAP, pTabs, _lDiff); 1790*cdf0e10cSrcweir SetTabs(nTabCount, pTabs+TAB_GAP); 1791*cdf0e10cSrcweir } 1792*cdf0e10cSrcweir } 1793*cdf0e10cSrcweir } 1794*cdf0e10cSrcweir } 1795*cdf0e10cSrcweir 1796*cdf0e10cSrcweir 1797*cdf0e10cSrcweir void SvxRuler::DragMargin2() 1798*cdf0e10cSrcweir /* 1799*cdf0e10cSrcweir [Beschreibung] 1800*cdf0e10cSrcweir 1801*cdf0e10cSrcweir Draggen des rechten Frame-Randes 1802*cdf0e10cSrcweir 1803*cdf0e10cSrcweir */ 1804*cdf0e10cSrcweir { 1805*cdf0e10cSrcweir const long lDragPos = GetCorrectedDragPos( sal_True, !TAB_FLAG || !NEG_FLAG); 1806*cdf0e10cSrcweir DrawLine_Impl(lTabPos, ( TAB_FLAG && NEG_FLAG ) ? 5 : 7, bHorz); 1807*cdf0e10cSrcweir long lDiff = lDragPos - GetMargin2(); 1808*cdf0e10cSrcweir 1809*cdf0e10cSrcweir if(pRuler_Imp->bIsTableRows && !bHorz && pColumnItem&& 1810*cdf0e10cSrcweir (//nDragType & DRAG_OBJECT_SIZE_LINEAR || 1811*cdf0e10cSrcweir nDragType & DRAG_OBJECT_SIZE_PROPORTIONAL)) 1812*cdf0e10cSrcweir DragBorders(); 1813*cdf0e10cSrcweir 1814*cdf0e10cSrcweir sal_Bool bProtectColumns = 1815*cdf0e10cSrcweir pRuler_Imp->aProtectItem.IsSizeProtected() || 1816*cdf0e10cSrcweir pRuler_Imp->aProtectItem.IsPosProtected(); 1817*cdf0e10cSrcweir const sal_uInt16 nMarginStyle = 1818*cdf0e10cSrcweir bProtectColumns ? 0 : RULER_MARGIN_SIZEABLE; 1819*cdf0e10cSrcweir SetMargin2( lDragPos, nMarginStyle ); 1820*cdf0e10cSrcweir 1821*cdf0e10cSrcweir // Rechten Einzug an alter Position 1822*cdf0e10cSrcweir if((!pColumnItem || IsActLastColumn()) && pParaItem) 1823*cdf0e10cSrcweir { 1824*cdf0e10cSrcweir pIndents[INDENT_FIRST_LINE].nPos += lDiff; 1825*cdf0e10cSrcweir SetIndents(INDENT_COUNT, pIndents+INDENT_GAP); 1826*cdf0e10cSrcweir } 1827*cdf0e10cSrcweir } 1828*cdf0e10cSrcweir 1829*cdf0e10cSrcweir 1830*cdf0e10cSrcweir void SvxRuler::DragIndents() 1831*cdf0e10cSrcweir /* 1832*cdf0e10cSrcweir [Beschreibung] 1833*cdf0e10cSrcweir 1834*cdf0e10cSrcweir Draggen der Absatzeinzuege 1835*cdf0e10cSrcweir 1836*cdf0e10cSrcweir */ 1837*cdf0e10cSrcweir { 1838*cdf0e10cSrcweir const long lDragPos = NEG_FLAG ? GetDragPos() : GetCorrectedDragPos(); 1839*cdf0e10cSrcweir const sal_uInt16 nIdx = GetDragAryPos()+INDENT_GAP; 1840*cdf0e10cSrcweir const long lDiff = pIndents[nIdx].nPos - lDragPos; 1841*cdf0e10cSrcweir 1842*cdf0e10cSrcweir if((nIdx == INDENT_FIRST_LINE || 1843*cdf0e10cSrcweir nIdx == INDENT_LEFT_MARGIN ) && 1844*cdf0e10cSrcweir (nDragType & DRAG_OBJECT_LEFT_INDENT_ONLY) != 1845*cdf0e10cSrcweir DRAG_OBJECT_LEFT_INDENT_ONLY) 1846*cdf0e10cSrcweir pIndents[INDENT_FIRST_LINE].nPos -= lDiff; 1847*cdf0e10cSrcweir 1848*cdf0e10cSrcweir pIndents[nIdx].nPos = lDragPos; 1849*cdf0e10cSrcweir 1850*cdf0e10cSrcweir SetIndents(INDENT_COUNT, pIndents + INDENT_GAP); 1851*cdf0e10cSrcweir DrawLine_Impl(lTabPos, 1, bHorz); 1852*cdf0e10cSrcweir } 1853*cdf0e10cSrcweir 1854*cdf0e10cSrcweir 1855*cdf0e10cSrcweir void SvxRuler::DrawLine_Impl(long &_lTabPos, int nNew, sal_Bool Hori) 1856*cdf0e10cSrcweir /* 1857*cdf0e10cSrcweir [Beschreibung] 1858*cdf0e10cSrcweir 1859*cdf0e10cSrcweir Ausgaberoutine fuer Hilfslinie beim Vereschieben von Tabs, Tabellen- 1860*cdf0e10cSrcweir und anderen Spalten 1861*cdf0e10cSrcweir 1862*cdf0e10cSrcweir */ 1863*cdf0e10cSrcweir { 1864*cdf0e10cSrcweir if(Hori) 1865*cdf0e10cSrcweir { 1866*cdf0e10cSrcweir const long nHeight = pEditWin->GetOutputSize().Height(); 1867*cdf0e10cSrcweir Point aZero=pEditWin->GetMapMode().GetOrigin(); 1868*cdf0e10cSrcweir if(_lTabPos!=-1) 1869*cdf0e10cSrcweir pEditWin->InvertTracking( 1870*cdf0e10cSrcweir Rectangle( Point(_lTabPos, -aZero.Y()), 1871*cdf0e10cSrcweir Point(_lTabPos, -aZero.Y()+nHeight)), 1872*cdf0e10cSrcweir SHOWTRACK_SPLIT | SHOWTRACK_CLIP ); 1873*cdf0e10cSrcweir if( nNew & 1 ) 1874*cdf0e10cSrcweir { 1875*cdf0e10cSrcweir 1876*cdf0e10cSrcweir _lTabPos = ConvertHSizeLogic( 1877*cdf0e10cSrcweir GetCorrectedDragPos( ( nNew&4 ) != 0, ( nNew&2 ) != 0 ) + 1878*cdf0e10cSrcweir GetNullOffset() ); 1879*cdf0e10cSrcweir if(pPagePosItem) 1880*cdf0e10cSrcweir _lTabPos += pPagePosItem->GetPos().X(); 1881*cdf0e10cSrcweir pEditWin->InvertTracking( 1882*cdf0e10cSrcweir Rectangle(Point(_lTabPos, -aZero.Y()), 1883*cdf0e10cSrcweir Point(_lTabPos, -aZero.Y()+nHeight)), 1884*cdf0e10cSrcweir SHOWTRACK_CLIP | SHOWTRACK_SPLIT ); 1885*cdf0e10cSrcweir } 1886*cdf0e10cSrcweir } 1887*cdf0e10cSrcweir else 1888*cdf0e10cSrcweir { 1889*cdf0e10cSrcweir const long nWidth = pEditWin->GetOutputSize().Width(); 1890*cdf0e10cSrcweir Point aZero=pEditWin->GetMapMode().GetOrigin(); 1891*cdf0e10cSrcweir if(_lTabPos != -1) 1892*cdf0e10cSrcweir { 1893*cdf0e10cSrcweir pEditWin->InvertTracking( 1894*cdf0e10cSrcweir Rectangle( Point(-aZero.X(), _lTabPos), 1895*cdf0e10cSrcweir Point(-aZero.X()+nWidth, _lTabPos)), 1896*cdf0e10cSrcweir SHOWTRACK_SPLIT | SHOWTRACK_CLIP ); 1897*cdf0e10cSrcweir } 1898*cdf0e10cSrcweir 1899*cdf0e10cSrcweir if(nNew & 1) 1900*cdf0e10cSrcweir { 1901*cdf0e10cSrcweir _lTabPos = ConvertVSizeLogic(GetCorrectedDragPos()+GetNullOffset()); 1902*cdf0e10cSrcweir if(pPagePosItem) 1903*cdf0e10cSrcweir _lTabPos += pPagePosItem->GetPos().Y(); 1904*cdf0e10cSrcweir pEditWin->InvertTracking( 1905*cdf0e10cSrcweir Rectangle( Point(-aZero.X(), _lTabPos), 1906*cdf0e10cSrcweir Point(-aZero.X()+nWidth, _lTabPos)), 1907*cdf0e10cSrcweir SHOWTRACK_CLIP | SHOWTRACK_SPLIT ); 1908*cdf0e10cSrcweir } 1909*cdf0e10cSrcweir } 1910*cdf0e10cSrcweir } 1911*cdf0e10cSrcweir 1912*cdf0e10cSrcweir 1913*cdf0e10cSrcweir 1914*cdf0e10cSrcweir 1915*cdf0e10cSrcweir void SvxRuler::DragTabs() 1916*cdf0e10cSrcweir 1917*cdf0e10cSrcweir /* 1918*cdf0e10cSrcweir [Beschreibung] 1919*cdf0e10cSrcweir 1920*cdf0e10cSrcweir Draggen von Tabs 1921*cdf0e10cSrcweir 1922*cdf0e10cSrcweir */ 1923*cdf0e10cSrcweir { 1924*cdf0e10cSrcweir 1925*cdf0e10cSrcweir long lDragPos = GetCorrectedDragPos(sal_True, sal_False); 1926*cdf0e10cSrcweir 1927*cdf0e10cSrcweir sal_uInt16 nIdx = GetDragAryPos()+TAB_GAP; 1928*cdf0e10cSrcweir DrawLine_Impl(lTabPos, 7, bHorz); 1929*cdf0e10cSrcweir 1930*cdf0e10cSrcweir long nDiff = lDragPos - pTabs[nIdx].nPos; 1931*cdf0e10cSrcweir 1932*cdf0e10cSrcweir if(nDragType & DRAG_OBJECT_SIZE_LINEAR) 1933*cdf0e10cSrcweir { 1934*cdf0e10cSrcweir 1935*cdf0e10cSrcweir for(sal_uInt16 i = nIdx; i < nTabCount; ++i) 1936*cdf0e10cSrcweir { 1937*cdf0e10cSrcweir pTabs[i].nPos += nDiff; 1938*cdf0e10cSrcweir // auf Maximum begrenzen 1939*cdf0e10cSrcweir if(pTabs[i].nPos > GetMargin2()) 1940*cdf0e10cSrcweir pTabs[nIdx].nStyle |= RULER_STYLE_INVISIBLE; 1941*cdf0e10cSrcweir else 1942*cdf0e10cSrcweir pTabs[nIdx].nStyle &= ~RULER_STYLE_INVISIBLE; 1943*cdf0e10cSrcweir } 1944*cdf0e10cSrcweir } 1945*cdf0e10cSrcweir else if(nDragType & DRAG_OBJECT_SIZE_PROPORTIONAL) 1946*cdf0e10cSrcweir { 1947*cdf0e10cSrcweir pRuler_Imp->nTotalDist -= nDiff; 1948*cdf0e10cSrcweir pTabs[nIdx].nPos = lDragPos; 1949*cdf0e10cSrcweir for(sal_uInt16 i = nIdx+1; i < nTabCount; ++i) 1950*cdf0e10cSrcweir { 1951*cdf0e10cSrcweir if(pTabs[i].nStyle & RULER_TAB_DEFAULT) 1952*cdf0e10cSrcweir // bei den DefaultTabs kann abgebrochen werden 1953*cdf0e10cSrcweir break; 1954*cdf0e10cSrcweir long nDelta = pRuler_Imp->nTotalDist * pRuler_Imp->pPercBuf[i]; 1955*cdf0e10cSrcweir nDelta /= 1000; 1956*cdf0e10cSrcweir pTabs[i].nPos = pTabs[nIdx].nPos + nDelta; 1957*cdf0e10cSrcweir if(pTabs[i].nPos+GetNullOffset() > nMaxRight) 1958*cdf0e10cSrcweir pTabs[i].nStyle |= RULER_STYLE_INVISIBLE; 1959*cdf0e10cSrcweir else 1960*cdf0e10cSrcweir pTabs[i].nStyle &= ~RULER_STYLE_INVISIBLE; 1961*cdf0e10cSrcweir } 1962*cdf0e10cSrcweir } 1963*cdf0e10cSrcweir else 1964*cdf0e10cSrcweir pTabs[nIdx].nPos = lDragPos; 1965*cdf0e10cSrcweir 1966*cdf0e10cSrcweir if(IsDragDelete()) 1967*cdf0e10cSrcweir pTabs[nIdx].nStyle |= RULER_STYLE_INVISIBLE; 1968*cdf0e10cSrcweir else 1969*cdf0e10cSrcweir pTabs[nIdx].nStyle &= ~RULER_STYLE_INVISIBLE; 1970*cdf0e10cSrcweir SetTabs(nTabCount, pTabs+TAB_GAP); 1971*cdf0e10cSrcweir } 1972*cdf0e10cSrcweir 1973*cdf0e10cSrcweir 1974*cdf0e10cSrcweir 1975*cdf0e10cSrcweir void SvxRuler::SetActive(sal_Bool bOn) 1976*cdf0e10cSrcweir { 1977*cdf0e10cSrcweir if(bOn) 1978*cdf0e10cSrcweir { 1979*cdf0e10cSrcweir Activate(); 1980*cdf0e10cSrcweir /* pBindings->Invalidate( SID_RULER_LR_MIN_MAX, sal_True, sal_True ); 1981*cdf0e10cSrcweir pBindings->Update( SID_RULER_LR_MIN_MAX ); 1982*cdf0e10cSrcweir pBindings->Invalidate( SID_ATTR_LONG_ULSPACE, sal_True, sal_True ); 1983*cdf0e10cSrcweir pBindings->Update( SID_ATTR_LONG_ULSPACE ); 1984*cdf0e10cSrcweir pBindings->Invalidate( SID_ATTR_LONG_LRSPACE, sal_True, sal_True ); 1985*cdf0e10cSrcweir pBindings->Update( SID_ATTR_LONG_LRSPACE ); 1986*cdf0e10cSrcweir pBindings->Invalidate( SID_RULER_PAGE_POS, sal_True, sal_True ); 1987*cdf0e10cSrcweir pBindings->Update( SID_RULER_PAGE_POS ); 1988*cdf0e10cSrcweir pBindings->Invalidate( SID_ATTR_TABSTOP, sal_True, sal_True ); 1989*cdf0e10cSrcweir pBindings->Update( SID_ATTR_TABSTOP ); 1990*cdf0e10cSrcweir pBindings->Invalidate( SID_ATTR_PARA_LRSPACE, sal_True, sal_True ); 1991*cdf0e10cSrcweir pBindings->Update( SID_ATTR_PARA_LRSPACE ); 1992*cdf0e10cSrcweir pBindings->Invalidate( SID_RULER_BORDERS, sal_True, sal_True ); 1993*cdf0e10cSrcweir pBindings->Update( SID_RULER_BORDERS ); 1994*cdf0e10cSrcweir pBindings->Invalidate( SID_RULER_OBJECT, sal_True, sal_True ); 1995*cdf0e10cSrcweir pBindings->Update( SID_RULER_OBJECT ); 1996*cdf0e10cSrcweir pBindings->Invalidate( SID_RULER_PROTECT, sal_True, sal_True ); 1997*cdf0e10cSrcweir pBindings->Update( SID_RULER_PROTECT );*/ 1998*cdf0e10cSrcweir } 1999*cdf0e10cSrcweir else 2000*cdf0e10cSrcweir Deactivate(); 2001*cdf0e10cSrcweir if(bActive!=bOn) 2002*cdf0e10cSrcweir { 2003*cdf0e10cSrcweir pBindings->EnterRegistrations(); 2004*cdf0e10cSrcweir if(bOn) 2005*cdf0e10cSrcweir for(sal_uInt16 i=0;i<pRuler_Imp->nControlerItems;i++) 2006*cdf0e10cSrcweir pCtrlItem[i]->ReBind(); 2007*cdf0e10cSrcweir else 2008*cdf0e10cSrcweir for(sal_uInt16 j=0;j<pRuler_Imp->nControlerItems;j++) 2009*cdf0e10cSrcweir pCtrlItem[j]->UnBind(); 2010*cdf0e10cSrcweir pBindings->LeaveRegistrations(); 2011*cdf0e10cSrcweir } 2012*cdf0e10cSrcweir bActive = bOn; 2013*cdf0e10cSrcweir } 2014*cdf0e10cSrcweir 2015*cdf0e10cSrcweir 2016*cdf0e10cSrcweir 2017*cdf0e10cSrcweir 2018*cdf0e10cSrcweir void SvxRuler::UpdateParaContents_Impl 2019*cdf0e10cSrcweir ( 2020*cdf0e10cSrcweir long l, // Differenz 2021*cdf0e10cSrcweir UpdateType eType // Art (alle, links oder rechts) 2022*cdf0e10cSrcweir ) 2023*cdf0e10cSrcweir 2024*cdf0e10cSrcweir /* 2025*cdf0e10cSrcweir [Beschreibung] 2026*cdf0e10cSrcweir 2027*cdf0e10cSrcweir Hilfsroutine; Mitfuehren von Tabulatoren und Absatzraendern 2028*cdf0e10cSrcweir 2029*cdf0e10cSrcweir */ 2030*cdf0e10cSrcweir { 2031*cdf0e10cSrcweir switch(eType) { 2032*cdf0e10cSrcweir case MOVE_RIGHT: 2033*cdf0e10cSrcweir pIndents[INDENT_RIGHT_MARGIN].nPos += l; 2034*cdf0e10cSrcweir break; 2035*cdf0e10cSrcweir case MOVE_ALL: 2036*cdf0e10cSrcweir pIndents[INDENT_RIGHT_MARGIN].nPos += l; 2037*cdf0e10cSrcweir // no break 2038*cdf0e10cSrcweir case MOVE_LEFT: 2039*cdf0e10cSrcweir { 2040*cdf0e10cSrcweir pIndents[INDENT_FIRST_LINE].nPos += l; 2041*cdf0e10cSrcweir pIndents[INDENT_LEFT_MARGIN].nPos += l; 2042*cdf0e10cSrcweir if ( pTabs ) 2043*cdf0e10cSrcweir { 2044*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < nTabCount+TAB_GAP;++i) 2045*cdf0e10cSrcweir pTabs[i].nPos += l; 2046*cdf0e10cSrcweir SetTabs(nTabCount, pTabs+TAB_GAP); 2047*cdf0e10cSrcweir } 2048*cdf0e10cSrcweir break; 2049*cdf0e10cSrcweir } 2050*cdf0e10cSrcweir } 2051*cdf0e10cSrcweir SetIndents(INDENT_COUNT, pIndents+INDENT_GAP); 2052*cdf0e10cSrcweir } 2053*cdf0e10cSrcweir 2054*cdf0e10cSrcweir 2055*cdf0e10cSrcweir 2056*cdf0e10cSrcweir void SvxRuler::DragBorders() 2057*cdf0e10cSrcweir 2058*cdf0e10cSrcweir /* 2059*cdf0e10cSrcweir [Beschreibung] 2060*cdf0e10cSrcweir 2061*cdf0e10cSrcweir Draggen von Borders (Tabellen- und anderen Spalten) 2062*cdf0e10cSrcweir 2063*cdf0e10cSrcweir */ 2064*cdf0e10cSrcweir { 2065*cdf0e10cSrcweir sal_Bool bLeftIndentsCorrected = sal_False, bRightIndentsCorrected = sal_False; 2066*cdf0e10cSrcweir int nIdx; 2067*cdf0e10cSrcweir 2068*cdf0e10cSrcweir if(GetDragType()==RULER_TYPE_BORDER) 2069*cdf0e10cSrcweir { 2070*cdf0e10cSrcweir DrawLine_Impl(lTabPos, 7, bHorz); 2071*cdf0e10cSrcweir nIdx = GetDragAryPos(); 2072*cdf0e10cSrcweir } 2073*cdf0e10cSrcweir else 2074*cdf0e10cSrcweir nIdx=0; 2075*cdf0e10cSrcweir 2076*cdf0e10cSrcweir sal_uInt16 nDragSize = GetDragSize(); 2077*cdf0e10cSrcweir long lDiff = 0; 2078*cdf0e10cSrcweir 2079*cdf0e10cSrcweir // the drag position has to be corrected to be able to prevent borders from passing each other 2080*cdf0e10cSrcweir long lPos = GetCorrectedDragPos(); 2081*cdf0e10cSrcweir 2082*cdf0e10cSrcweir 2083*cdf0e10cSrcweir switch(nDragSize) 2084*cdf0e10cSrcweir { 2085*cdf0e10cSrcweir case RULER_DRAGSIZE_MOVE: 2086*cdf0e10cSrcweir { 2087*cdf0e10cSrcweir ADD_DEBUG_TEXT("lLastLMargin: ", String::CreateFromInt32(pRuler_Imp->lLastLMargin)) 2088*cdf0e10cSrcweir lDiff = GetDragType()==RULER_TYPE_BORDER ? 2089*cdf0e10cSrcweir lPos-nDragOffset - pBorders[nIdx].nPos 2090*cdf0e10cSrcweir : GetDragType() == RULER_TYPE_MARGIN1 ? lPos - pRuler_Imp->lLastLMargin : lPos - pRuler_Imp->lLastRMargin; 2091*cdf0e10cSrcweir 2092*cdf0e10cSrcweir // pBorders[nIdx].nPos += lDiff; 2093*cdf0e10cSrcweir // lDiff = pBorders[nIdx].nPos - nOld; 2094*cdf0e10cSrcweir if(nDragType & DRAG_OBJECT_SIZE_LINEAR) 2095*cdf0e10cSrcweir { 2096*cdf0e10cSrcweir long nRight = GetMargin2()-lMinFrame; // rechter Begrenzer 2097*cdf0e10cSrcweir for(int i = nBorderCount-2; i >= nIdx; --i) 2098*cdf0e10cSrcweir { 2099*cdf0e10cSrcweir long l = pBorders[i].nPos; 2100*cdf0e10cSrcweir pBorders[i].nPos += lDiff; 2101*cdf0e10cSrcweir pBorders[i].nPos = Min(pBorders[i].nPos, nRight - pBorders[i].nWidth); 2102*cdf0e10cSrcweir nRight = pBorders[i].nPos - lMinFrame; 2103*cdf0e10cSrcweir // RR der Spalte aktualisieren 2104*cdf0e10cSrcweir if(i == GetActRightColumn()) 2105*cdf0e10cSrcweir { 2106*cdf0e10cSrcweir UpdateParaContents_Impl(pBorders[i].nPos - l, MOVE_RIGHT); 2107*cdf0e10cSrcweir bRightIndentsCorrected = sal_True; 2108*cdf0e10cSrcweir } 2109*cdf0e10cSrcweir // LAR, EZE der Spalte aktualisieren 2110*cdf0e10cSrcweir else if(i == GetActLeftColumn()) 2111*cdf0e10cSrcweir { 2112*cdf0e10cSrcweir UpdateParaContents_Impl(pBorders[i].nPos - l, MOVE_LEFT); 2113*cdf0e10cSrcweir bLeftIndentsCorrected = sal_True; 2114*cdf0e10cSrcweir } 2115*cdf0e10cSrcweir } 2116*cdf0e10cSrcweir } 2117*cdf0e10cSrcweir else if(nDragType & DRAG_OBJECT_SIZE_PROPORTIONAL) 2118*cdf0e10cSrcweir { 2119*cdf0e10cSrcweir int nLimit; 2120*cdf0e10cSrcweir long lLeft; 2121*cdf0e10cSrcweir int nStartLimit = nBorderCount-2; 2122*cdf0e10cSrcweir switch(GetDragType()) 2123*cdf0e10cSrcweir { 2124*cdf0e10cSrcweir default: ;//prevent warning 2125*cdf0e10cSrcweir DBG_ERROR("svx::SvxRuler::DragBorders(), unknown drag type!" ); 2126*cdf0e10cSrcweir case RULER_TYPE_BORDER: 2127*cdf0e10cSrcweir if(pRuler_Imp->bIsTableRows) 2128*cdf0e10cSrcweir { 2129*cdf0e10cSrcweir pBorders[nIdx].nPos += lDiff; 2130*cdf0e10cSrcweir if(bHorz) 2131*cdf0e10cSrcweir { 2132*cdf0e10cSrcweir lLeft = pBorders[nIdx].nPos; 2133*cdf0e10cSrcweir pRuler_Imp->nTotalDist -= lDiff; 2134*cdf0e10cSrcweir nLimit=nIdx+1; 2135*cdf0e10cSrcweir } 2136*cdf0e10cSrcweir else 2137*cdf0e10cSrcweir { 2138*cdf0e10cSrcweir lLeft = 0; 2139*cdf0e10cSrcweir nStartLimit = nIdx - 1; 2140*cdf0e10cSrcweir pRuler_Imp->nTotalDist += lDiff; 2141*cdf0e10cSrcweir nLimit = 0; 2142*cdf0e10cSrcweir } 2143*cdf0e10cSrcweir } 2144*cdf0e10cSrcweir else 2145*cdf0e10cSrcweir { 2146*cdf0e10cSrcweir nLimit=nIdx+1; 2147*cdf0e10cSrcweir pBorders[nIdx].nPos += lDiff; 2148*cdf0e10cSrcweir lLeft = pBorders[nIdx].nPos; 2149*cdf0e10cSrcweir pRuler_Imp->nTotalDist-=lDiff; 2150*cdf0e10cSrcweir } 2151*cdf0e10cSrcweir break; 2152*cdf0e10cSrcweir case RULER_TYPE_MARGIN1: 2153*cdf0e10cSrcweir nLimit=0; 2154*cdf0e10cSrcweir lLeft=pRuler_Imp->lLastLMargin+lDiff; 2155*cdf0e10cSrcweir pRuler_Imp->nTotalDist-=lDiff; 2156*cdf0e10cSrcweir break; 2157*cdf0e10cSrcweir case RULER_TYPE_MARGIN2: 2158*cdf0e10cSrcweir nLimit = 0; 2159*cdf0e10cSrcweir lLeft= 0;//pRuler_Imp->lLastRMargin + lDiff; 2160*cdf0e10cSrcweir nStartLimit = nBorderCount - 2; 2161*cdf0e10cSrcweir pRuler_Imp->nTotalDist += lDiff; 2162*cdf0e10cSrcweir break; 2163*cdf0e10cSrcweir } 2164*cdf0e10cSrcweir 2165*cdf0e10cSrcweir for(int i = nStartLimit; i >= nLimit; --i) 2166*cdf0e10cSrcweir { 2167*cdf0e10cSrcweir 2168*cdf0e10cSrcweir long l = pBorders[i].nPos; 2169*cdf0e10cSrcweir pBorders[i].nPos=lLeft+ 2170*cdf0e10cSrcweir (pRuler_Imp->nTotalDist*pRuler_Imp->pPercBuf[i])/1000+ 2171*cdf0e10cSrcweir pRuler_Imp->pBlockBuf[i]; 2172*cdf0e10cSrcweir 2173*cdf0e10cSrcweir // RR der Spalte aktualisieren 2174*cdf0e10cSrcweir if(!pRuler_Imp->bIsTableRows) 2175*cdf0e10cSrcweir { 2176*cdf0e10cSrcweir if(i == GetActRightColumn()) 2177*cdf0e10cSrcweir { 2178*cdf0e10cSrcweir UpdateParaContents_Impl(pBorders[i].nPos - l, MOVE_RIGHT); 2179*cdf0e10cSrcweir bRightIndentsCorrected = sal_True; 2180*cdf0e10cSrcweir } 2181*cdf0e10cSrcweir // LAR, EZE der Spalte aktualisieren 2182*cdf0e10cSrcweir else if(i == GetActLeftColumn()) 2183*cdf0e10cSrcweir { 2184*cdf0e10cSrcweir UpdateParaContents_Impl(pBorders[i].nPos - l, MOVE_LEFT); 2185*cdf0e10cSrcweir bLeftIndentsCorrected = sal_True; 2186*cdf0e10cSrcweir } 2187*cdf0e10cSrcweir } 2188*cdf0e10cSrcweir } 2189*cdf0e10cSrcweir if(pRuler_Imp->bIsTableRows) 2190*cdf0e10cSrcweir { 2191*cdf0e10cSrcweir //in vertical tables the left borders have to be moved 2192*cdf0e10cSrcweir if(bHorz) 2193*cdf0e10cSrcweir { 2194*cdf0e10cSrcweir for(int i = 0; i < nIdx; ++i) 2195*cdf0e10cSrcweir pBorders[i].nPos += lDiff; 2196*cdf0e10cSrcweir AdjustMargin1(lDiff); 2197*cdf0e10cSrcweir } 2198*cdf0e10cSrcweir else 2199*cdf0e10cSrcweir { 2200*cdf0e10cSrcweir //otherwise the right borders are moved 2201*cdf0e10cSrcweir for(int i = pColumnItem->Count() - 1; i > nIdx; --i) 2202*cdf0e10cSrcweir pBorders[i].nPos += lDiff; 2203*cdf0e10cSrcweir SetMargin2( GetMargin2() + lDiff, 0 ); 2204*cdf0e10cSrcweir } 2205*cdf0e10cSrcweir } 2206*cdf0e10cSrcweir } 2207*cdf0e10cSrcweir else if(pRuler_Imp->bIsTableRows) 2208*cdf0e10cSrcweir { 2209*cdf0e10cSrcweir //moving rows: if a row is resized all following rows 2210*cdf0e10cSrcweir //have to be moved by the same amount. 2211*cdf0e10cSrcweir //This includes the left border when the table is not limited 2212*cdf0e10cSrcweir //to a lower frame border. 2213*cdf0e10cSrcweir int nLimit; 2214*cdf0e10cSrcweir long lLeft; 2215*cdf0e10cSrcweir if(GetDragType()==RULER_TYPE_BORDER) 2216*cdf0e10cSrcweir { 2217*cdf0e10cSrcweir nLimit=nIdx+1; 2218*cdf0e10cSrcweir lLeft=(pBorders[nIdx].nPos+=lDiff); 2219*cdf0e10cSrcweir } 2220*cdf0e10cSrcweir else 2221*cdf0e10cSrcweir { 2222*cdf0e10cSrcweir nLimit=0; 2223*cdf0e10cSrcweir lLeft=pRuler_Imp->lLastLMargin+lDiff; 2224*cdf0e10cSrcweir } 2225*cdf0e10cSrcweir //in vertical tables the left borders have to be moved 2226*cdf0e10cSrcweir if(bHorz) 2227*cdf0e10cSrcweir { 2228*cdf0e10cSrcweir for(int i = 0; i < nIdx; ++i) 2229*cdf0e10cSrcweir { 2230*cdf0e10cSrcweir pBorders[i].nPos += lDiff; 2231*cdf0e10cSrcweir } 2232*cdf0e10cSrcweir AdjustMargin1(lDiff); 2233*cdf0e10cSrcweir } 2234*cdf0e10cSrcweir else 2235*cdf0e10cSrcweir { 2236*cdf0e10cSrcweir //otherwise the right borders are moved 2237*cdf0e10cSrcweir for(int i = nBorderCount-2; i >= nLimit; --i) 2238*cdf0e10cSrcweir { 2239*cdf0e10cSrcweir pBorders[i].nPos += lDiff; 2240*cdf0e10cSrcweir } 2241*cdf0e10cSrcweir SetMargin2( GetMargin2() + lDiff, 0 ); 2242*cdf0e10cSrcweir } 2243*cdf0e10cSrcweir } 2244*cdf0e10cSrcweir else 2245*cdf0e10cSrcweir pBorders[nIdx].nPos+=lDiff; 2246*cdf0e10cSrcweir break; 2247*cdf0e10cSrcweir } 2248*cdf0e10cSrcweir case RULER_DRAGSIZE_1: 2249*cdf0e10cSrcweir { 2250*cdf0e10cSrcweir lDiff = lPos - pBorders[nIdx].nPos; 2251*cdf0e10cSrcweir pBorders[nIdx].nWidth += pBorders[nIdx].nPos - lPos; 2252*cdf0e10cSrcweir pBorders[nIdx].nPos = lPos; 2253*cdf0e10cSrcweir break; 2254*cdf0e10cSrcweir } 2255*cdf0e10cSrcweir case RULER_DRAGSIZE_2: 2256*cdf0e10cSrcweir { 2257*cdf0e10cSrcweir const long nOld = pBorders[nIdx].nWidth; 2258*cdf0e10cSrcweir pBorders[nIdx].nWidth = lPos - pBorders[nIdx].nPos; 2259*cdf0e10cSrcweir lDiff = pBorders[nIdx].nWidth - nOld; 2260*cdf0e10cSrcweir break; 2261*cdf0e10cSrcweir } 2262*cdf0e10cSrcweir } 2263*cdf0e10cSrcweir if(!bRightIndentsCorrected && 2264*cdf0e10cSrcweir GetActRightColumn() == nIdx && 2265*cdf0e10cSrcweir nDragSize != RULER_DRAGSIZE_2 && pIndents && 2266*cdf0e10cSrcweir !pRuler_Imp->bIsTableRows) 2267*cdf0e10cSrcweir { 2268*cdf0e10cSrcweir UpdateParaContents_Impl(lDiff, MOVE_RIGHT); 2269*cdf0e10cSrcweir } 2270*cdf0e10cSrcweir else if(!bLeftIndentsCorrected && 2271*cdf0e10cSrcweir GetActLeftColumn()==nIdx && 2272*cdf0e10cSrcweir nDragSize != RULER_DRAGSIZE_1 && pIndents) 2273*cdf0e10cSrcweir { 2274*cdf0e10cSrcweir UpdateParaContents_Impl(lDiff, MOVE_LEFT); 2275*cdf0e10cSrcweir } 2276*cdf0e10cSrcweir SetBorders(pColumnItem->Count()-1, pBorders); 2277*cdf0e10cSrcweir } 2278*cdf0e10cSrcweir 2279*cdf0e10cSrcweir 2280*cdf0e10cSrcweir void SvxRuler::DragObjectBorder() 2281*cdf0e10cSrcweir 2282*cdf0e10cSrcweir /* 2283*cdf0e10cSrcweir [Beschreibung] 2284*cdf0e10cSrcweir 2285*cdf0e10cSrcweir Draggen von Objektraendern 2286*cdf0e10cSrcweir 2287*cdf0e10cSrcweir */ 2288*cdf0e10cSrcweir { 2289*cdf0e10cSrcweir if(RULER_DRAGSIZE_MOVE == GetDragSize()) 2290*cdf0e10cSrcweir { 2291*cdf0e10cSrcweir const long lPos = GetCorrectedDragPos(); 2292*cdf0e10cSrcweir const sal_uInt16 nIdx = GetDragAryPos(); 2293*cdf0e10cSrcweir pObjectBorders[GetObjectBordersOff(nIdx)].nPos = lPos; 2294*cdf0e10cSrcweir SetBorders(2, pObjectBorders + GetObjectBordersOff(0)); 2295*cdf0e10cSrcweir DrawLine_Impl(lTabPos, 7, bHorz); 2296*cdf0e10cSrcweir 2297*cdf0e10cSrcweir } 2298*cdf0e10cSrcweir } 2299*cdf0e10cSrcweir 2300*cdf0e10cSrcweir 2301*cdf0e10cSrcweir void SvxRuler::ApplyMargins() 2302*cdf0e10cSrcweir /* 2303*cdf0e10cSrcweir [Beschreibung] 2304*cdf0e10cSrcweir 2305*cdf0e10cSrcweir Anwenden von Randeinstellungen; durch Draggen veraendert. 2306*cdf0e10cSrcweir 2307*cdf0e10cSrcweir */ 2308*cdf0e10cSrcweir { 2309*cdf0e10cSrcweir const SfxPoolItem *pItem = 0; 2310*cdf0e10cSrcweir sal_uInt16 nId = SID_ATTR_LONG_LRSPACE; 2311*cdf0e10cSrcweir if(bHorz) 2312*cdf0e10cSrcweir { 2313*cdf0e10cSrcweir const long lOldNull = lLogicNullOffset; 2314*cdf0e10cSrcweir if(pRuler_Imp->lMaxLeftLogic!=-1&&nMaxLeft==GetMargin1()+Ruler::GetNullOffset()) 2315*cdf0e10cSrcweir pLRSpaceItem->SetLeft(lLogicNullOffset=pRuler_Imp->lMaxLeftLogic); 2316*cdf0e10cSrcweir else 2317*cdf0e10cSrcweir pLRSpaceItem->SetLeft(PixelHAdjust( 2318*cdf0e10cSrcweir lLogicNullOffset = ConvertHPosLogic(GetFrameLeft()) - 2319*cdf0e10cSrcweir lAppNullOffset, pLRSpaceItem->GetLeft())); 2320*cdf0e10cSrcweir 2321*cdf0e10cSrcweir if(bAppSetNullOffset) 2322*cdf0e10cSrcweir lAppNullOffset += lLogicNullOffset - lOldNull; 2323*cdf0e10cSrcweir 2324*cdf0e10cSrcweir if(pRuler_Imp->lMaxRightLogic!=-1 2325*cdf0e10cSrcweir &&nMaxRight==GetMargin2()+Ruler::GetNullOffset()) 2326*cdf0e10cSrcweir pLRSpaceItem->SetRight(GetPageWidth()-pRuler_Imp->lMaxRightLogic); 2327*cdf0e10cSrcweir else 2328*cdf0e10cSrcweir pLRSpaceItem->SetRight( 2329*cdf0e10cSrcweir PixelHAdjust( 2330*cdf0e10cSrcweir Max((long)0,pPagePosItem->GetWidth() - 2331*cdf0e10cSrcweir pLRSpaceItem->GetLeft() - 2332*cdf0e10cSrcweir (ConvertHPosLogic(GetMargin2()) - 2333*cdf0e10cSrcweir lAppNullOffset)),pLRSpaceItem->GetRight())); 2334*cdf0e10cSrcweir pItem = pLRSpaceItem; 2335*cdf0e10cSrcweir #ifdef DEBUGLIN 2336*cdf0e10cSrcweir Debug_Impl(pEditWin,*pLRSpaceItem); 2337*cdf0e10cSrcweir #endif // DEBUGLIN 2338*cdf0e10cSrcweir } 2339*cdf0e10cSrcweir else { 2340*cdf0e10cSrcweir const long lOldNull = lLogicNullOffset; 2341*cdf0e10cSrcweir pULSpaceItem->SetUpper( 2342*cdf0e10cSrcweir PixelVAdjust( 2343*cdf0e10cSrcweir lLogicNullOffset = 2344*cdf0e10cSrcweir ConvertVPosLogic(GetFrameLeft()) - 2345*cdf0e10cSrcweir lAppNullOffset,pULSpaceItem->GetUpper())); 2346*cdf0e10cSrcweir if(bAppSetNullOffset) 2347*cdf0e10cSrcweir lAppNullOffset += lLogicNullOffset - lOldNull; 2348*cdf0e10cSrcweir pULSpaceItem->SetLower( 2349*cdf0e10cSrcweir PixelVAdjust( 2350*cdf0e10cSrcweir Max((long)0, pPagePosItem->GetHeight() - 2351*cdf0e10cSrcweir pULSpaceItem->GetUpper() - 2352*cdf0e10cSrcweir (ConvertVPosLogic(GetMargin2()) - 2353*cdf0e10cSrcweir lAppNullOffset)),pULSpaceItem->GetLower())); 2354*cdf0e10cSrcweir pItem = pULSpaceItem; 2355*cdf0e10cSrcweir nId = SID_ATTR_LONG_ULSPACE; 2356*cdf0e10cSrcweir #ifdef DEBUGLIN 2357*cdf0e10cSrcweir Debug_Impl(pEditWin,*pULSpaceItem); 2358*cdf0e10cSrcweir #endif // DEBUGLIN 2359*cdf0e10cSrcweir } 2360*cdf0e10cSrcweir pBindings->GetDispatcher()->Execute( nId, SFX_CALLMODE_RECORD, pItem, 0L ); 2361*cdf0e10cSrcweir if(pTabStopItem) 2362*cdf0e10cSrcweir UpdateTabs(); 2363*cdf0e10cSrcweir } 2364*cdf0e10cSrcweir 2365*cdf0e10cSrcweir 2366*cdf0e10cSrcweir void SvxRuler::ApplyIndents() 2367*cdf0e10cSrcweir /* 2368*cdf0e10cSrcweir [Beschreibung] 2369*cdf0e10cSrcweir 2370*cdf0e10cSrcweir Anwenden von Absatzeinstellungen; durch Draggen veraendert. 2371*cdf0e10cSrcweir 2372*cdf0e10cSrcweir */ 2373*cdf0e10cSrcweir { 2374*cdf0e10cSrcweir long nNewTxtLeft; 2375*cdf0e10cSrcweir if(pColumnItem&&!IsActFirstColumn( sal_True )) 2376*cdf0e10cSrcweir { 2377*cdf0e10cSrcweir long nLeftCol=GetActLeftColumn( sal_True ); 2378*cdf0e10cSrcweir nNewTxtLeft = 2379*cdf0e10cSrcweir PixelHAdjust( 2380*cdf0e10cSrcweir ConvertHPosLogic( 2381*cdf0e10cSrcweir pIndents[INDENT_LEFT_MARGIN].nPos- 2382*cdf0e10cSrcweir (pBorders[nLeftCol].nPos + 2383*cdf0e10cSrcweir pBorders[nLeftCol].nWidth))- 2384*cdf0e10cSrcweir lAppNullOffset,pParaItem->GetTxtLeft()); 2385*cdf0e10cSrcweir } 2386*cdf0e10cSrcweir else 2387*cdf0e10cSrcweir nNewTxtLeft = 2388*cdf0e10cSrcweir PixelHAdjust( 2389*cdf0e10cSrcweir ConvertHPosLogic(pIndents[INDENT_LEFT_MARGIN].nPos), 2390*cdf0e10cSrcweir pParaItem->GetTxtLeft()); 2391*cdf0e10cSrcweir 2392*cdf0e10cSrcweir sal_Bool bRTL = pRuler_Imp->pTextRTLItem && pRuler_Imp->pTextRTLItem->GetValue(); 2393*cdf0e10cSrcweir 2394*cdf0e10cSrcweir long nNewFirstLineOffset; 2395*cdf0e10cSrcweir if(bRTL) 2396*cdf0e10cSrcweir { 2397*cdf0e10cSrcweir long nRightFrameMargin = GetRightFrameMargin(); 2398*cdf0e10cSrcweir nNewFirstLineOffset = PixelHAdjust(nRightFrameMargin - 2399*cdf0e10cSrcweir ConvertHPosLogic(pIndents[INDENT_FIRST_LINE].nPos ) - 2400*cdf0e10cSrcweir lAppNullOffset, 2401*cdf0e10cSrcweir pParaItem->GetTxtFirstLineOfst()); 2402*cdf0e10cSrcweir } 2403*cdf0e10cSrcweir else 2404*cdf0e10cSrcweir nNewFirstLineOffset= 2405*cdf0e10cSrcweir PixelHAdjust( 2406*cdf0e10cSrcweir ConvertHPosLogic(pIndents[INDENT_FIRST_LINE].nPos - 2407*cdf0e10cSrcweir pIndents[INDENT_LEFT_MARGIN].nPos) - 2408*cdf0e10cSrcweir lAppNullOffset, 2409*cdf0e10cSrcweir pParaItem->GetTxtFirstLineOfst()); 2410*cdf0e10cSrcweir 2411*cdf0e10cSrcweir // #62986# : Ist der neue TxtLeft kleiner als der alte FirstLineIndent, 2412*cdf0e10cSrcweir // dann geht die Differenz verloren und der Absatz wird insgesamt 2413*cdf0e10cSrcweir // zu weit eingerueckt, deswegen erst den FirstLineOffset setzen, dann den TxtLeft 2414*cdf0e10cSrcweir if(bRTL) 2415*cdf0e10cSrcweir { 2416*cdf0e10cSrcweir long nLeftFrameMargin = GetLeftFrameMargin(); 2417*cdf0e10cSrcweir long nRightFrameMargin = GetRightFrameMargin(); 2418*cdf0e10cSrcweir nNewTxtLeft = nRightFrameMargin - nNewTxtLeft - nLeftFrameMargin; 2419*cdf0e10cSrcweir nNewFirstLineOffset -= nNewTxtLeft; 2420*cdf0e10cSrcweir if(pParaBorderItem) 2421*cdf0e10cSrcweir { 2422*cdf0e10cSrcweir nNewTxtLeft += pParaBorderItem->GetLeft() + pParaBorderItem->GetRight(); 2423*cdf0e10cSrcweir nNewFirstLineOffset -= pParaBorderItem->GetRight(); 2424*cdf0e10cSrcweir } 2425*cdf0e10cSrcweir } 2426*cdf0e10cSrcweir pParaItem->SetTxtFirstLineOfst( 2427*cdf0e10cSrcweir sal::static_int_cast< short >(nNewFirstLineOffset)); 2428*cdf0e10cSrcweir pParaItem->SetTxtLeft(nNewTxtLeft); 2429*cdf0e10cSrcweir 2430*cdf0e10cSrcweir if(pColumnItem && ((!bRTL && !IsActLastColumn( sal_True ))|| (bRTL && !IsActFirstColumn()))) 2431*cdf0e10cSrcweir { 2432*cdf0e10cSrcweir if(bRTL) 2433*cdf0e10cSrcweir { 2434*cdf0e10cSrcweir long nActBorder = pBorders[GetActLeftColumn( sal_True )].nPos; 2435*cdf0e10cSrcweir long nRightMargin = pIndents[INDENT_RIGHT_MARGIN].nPos; 2436*cdf0e10cSrcweir long nConvert = ConvertHPosLogic( nRightMargin - nActBorder ); 2437*cdf0e10cSrcweir pParaItem->SetRight( PixelHAdjust( nConvert - lAppNullOffset, pParaItem->GetRight() ) ); 2438*cdf0e10cSrcweir } 2439*cdf0e10cSrcweir else 2440*cdf0e10cSrcweir { 2441*cdf0e10cSrcweir pParaItem->SetRight( 2442*cdf0e10cSrcweir PixelHAdjust( 2443*cdf0e10cSrcweir ConvertHPosLogic( 2444*cdf0e10cSrcweir pBorders[GetActRightColumn( sal_True )].nPos - 2445*cdf0e10cSrcweir pIndents[INDENT_RIGHT_MARGIN].nPos) - 2446*cdf0e10cSrcweir lAppNullOffset, 2447*cdf0e10cSrcweir pParaItem->GetRight())); 2448*cdf0e10cSrcweir } 2449*cdf0e10cSrcweir 2450*cdf0e10cSrcweir } 2451*cdf0e10cSrcweir else 2452*cdf0e10cSrcweir { 2453*cdf0e10cSrcweir if(bRTL) 2454*cdf0e10cSrcweir { 2455*cdf0e10cSrcweir pParaItem->SetRight( PixelHAdjust( 2456*cdf0e10cSrcweir ConvertHPosLogic(GetMargin1() + 2457*cdf0e10cSrcweir pIndents[INDENT_RIGHT_MARGIN].nPos) - GetLeftFrameMargin() + 2458*cdf0e10cSrcweir (pParaBorderItem ? pParaBorderItem->GetLeft() : 0) - 2459*cdf0e10cSrcweir lAppNullOffset, pParaItem->GetRight())); 2460*cdf0e10cSrcweir } 2461*cdf0e10cSrcweir else 2462*cdf0e10cSrcweir { 2463*cdf0e10cSrcweir pParaItem->SetRight( PixelHAdjust( 2464*cdf0e10cSrcweir ConvertHPosLogic(GetMargin2() - 2465*cdf0e10cSrcweir pIndents[INDENT_RIGHT_MARGIN].nPos) - 2466*cdf0e10cSrcweir lAppNullOffset, pParaItem->GetRight())); 2467*cdf0e10cSrcweir } 2468*cdf0e10cSrcweir } 2469*cdf0e10cSrcweir sal_uInt16 nParaId = bHorz ? SID_ATTR_PARA_LRSPACE : SID_ATTR_PARA_LRSPACE_VERTICAL; 2470*cdf0e10cSrcweir pBindings->GetDispatcher()->Execute( nParaId, SFX_CALLMODE_RECORD, pParaItem, 0L ); 2471*cdf0e10cSrcweir UpdateTabs(); 2472*cdf0e10cSrcweir } 2473*cdf0e10cSrcweir 2474*cdf0e10cSrcweir 2475*cdf0e10cSrcweir void SvxRuler::ApplyTabs() 2476*cdf0e10cSrcweir /* 2477*cdf0e10cSrcweir [Beschreibung] 2478*cdf0e10cSrcweir 2479*cdf0e10cSrcweir Anwenden von Tabulatoreinstellungen; durch Draggen veraendert. 2480*cdf0e10cSrcweir 2481*cdf0e10cSrcweir */ 2482*cdf0e10cSrcweir { 2483*cdf0e10cSrcweir sal_Bool bRTL = pRuler_Imp->pTextRTLItem && pRuler_Imp->pTextRTLItem->GetValue(); 2484*cdf0e10cSrcweir const sal_uInt16 nCoreIdx = GetDragAryPos(); 2485*cdf0e10cSrcweir if(IsDragDelete()) 2486*cdf0e10cSrcweir { 2487*cdf0e10cSrcweir pTabStopItem->Remove(nCoreIdx); 2488*cdf0e10cSrcweir } 2489*cdf0e10cSrcweir else if(DRAG_OBJECT_SIZE_LINEAR & nDragType || 2490*cdf0e10cSrcweir DRAG_OBJECT_SIZE_PROPORTIONAL & nDragType) 2491*cdf0e10cSrcweir { 2492*cdf0e10cSrcweir SvxTabStopItem *pItem = new SvxTabStopItem(pTabStopItem->Which()); 2493*cdf0e10cSrcweir //remove default tab stops 2494*cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < pItem->Count(); ) 2495*cdf0e10cSrcweir { 2496*cdf0e10cSrcweir if ( SVX_TAB_ADJUST_DEFAULT == (*pItem)[i].GetAdjustment() ) 2497*cdf0e10cSrcweir { 2498*cdf0e10cSrcweir pItem->Remove(i); 2499*cdf0e10cSrcweir continue; 2500*cdf0e10cSrcweir } 2501*cdf0e10cSrcweir ++i; 2502*cdf0e10cSrcweir } 2503*cdf0e10cSrcweir 2504*cdf0e10cSrcweir sal_uInt16 j; 2505*cdf0e10cSrcweir for(j = 0; j < nCoreIdx; ++j) 2506*cdf0e10cSrcweir { 2507*cdf0e10cSrcweir pItem->Insert((*pTabStopItem)[j]); 2508*cdf0e10cSrcweir } 2509*cdf0e10cSrcweir for(; j < pTabStopItem->Count(); ++j) 2510*cdf0e10cSrcweir { 2511*cdf0e10cSrcweir SvxTabStop aTabStop = (*pTabStopItem)[j]; 2512*cdf0e10cSrcweir aTabStop.GetTabPos() = PixelHAdjust( 2513*cdf0e10cSrcweir ConvertHPosLogic(pTabs[j+TAB_GAP].nPos - 2514*cdf0e10cSrcweir GetLeftIndent()) - 2515*cdf0e10cSrcweir lAppNullOffset, 2516*cdf0e10cSrcweir aTabStop.GetTabPos()); 2517*cdf0e10cSrcweir pItem->Insert(aTabStop); 2518*cdf0e10cSrcweir } 2519*cdf0e10cSrcweir delete pTabStopItem; 2520*cdf0e10cSrcweir pTabStopItem = pItem; 2521*cdf0e10cSrcweir } 2522*cdf0e10cSrcweir else if( pTabStopItem->Count() == 0 ) 2523*cdf0e10cSrcweir return; 2524*cdf0e10cSrcweir else 2525*cdf0e10cSrcweir { 2526*cdf0e10cSrcweir SvxTabStop aTabStop = (*pTabStopItem)[nCoreIdx]; 2527*cdf0e10cSrcweir if(pRuler_Imp->lMaxRightLogic!=-1&& 2528*cdf0e10cSrcweir pTabs[nCoreIdx+TAB_GAP].nPos+Ruler::GetNullOffset()==nMaxRight) 2529*cdf0e10cSrcweir aTabStop.GetTabPos() = pRuler_Imp->lMaxRightLogic-lLogicNullOffset; 2530*cdf0e10cSrcweir else 2531*cdf0e10cSrcweir { 2532*cdf0e10cSrcweir if(bRTL) 2533*cdf0e10cSrcweir { 2534*cdf0e10cSrcweir //#i24363# tab stops relative to indent 2535*cdf0e10cSrcweir const long nTmpLeftIndent = pRuler_Imp->bIsTabsRelativeToIndent ? 2536*cdf0e10cSrcweir GetLeftIndent() : 2537*cdf0e10cSrcweir ConvertHPosPixel( GetRightFrameMargin() + lAppNullOffset ); 2538*cdf0e10cSrcweir 2539*cdf0e10cSrcweir aTabStop.GetTabPos() = PixelHAdjust( 2540*cdf0e10cSrcweir ConvertHPosLogic( nTmpLeftIndent - pTabs[nCoreIdx+TAB_GAP].nPos) - lAppNullOffset, 2541*cdf0e10cSrcweir aTabStop.GetTabPos()); 2542*cdf0e10cSrcweir } 2543*cdf0e10cSrcweir else 2544*cdf0e10cSrcweir { 2545*cdf0e10cSrcweir //#i24363# tab stops relative to indent 2546*cdf0e10cSrcweir const long nTmpLeftIndent = pRuler_Imp->bIsTabsRelativeToIndent ? 2547*cdf0e10cSrcweir GetLeftIndent() : 2548*cdf0e10cSrcweir 0; 2549*cdf0e10cSrcweir 2550*cdf0e10cSrcweir aTabStop.GetTabPos() = PixelHAdjust( 2551*cdf0e10cSrcweir ConvertHPosLogic( pTabs[nCoreIdx+TAB_GAP].nPos - nTmpLeftIndent ) - lAppNullOffset, 2552*cdf0e10cSrcweir aTabStop.GetTabPos() ); 2553*cdf0e10cSrcweir } 2554*cdf0e10cSrcweir } 2555*cdf0e10cSrcweir pTabStopItem->Remove(nCoreIdx); 2556*cdf0e10cSrcweir pTabStopItem->Insert(aTabStop); 2557*cdf0e10cSrcweir } 2558*cdf0e10cSrcweir sal_uInt16 nTabStopId = bHorz ? SID_ATTR_TABSTOP : SID_ATTR_TABSTOP_VERTICAL; 2559*cdf0e10cSrcweir pBindings->GetDispatcher()->Execute( nTabStopId, SFX_CALLMODE_RECORD, pTabStopItem, 0L ); 2560*cdf0e10cSrcweir UpdateTabs(); 2561*cdf0e10cSrcweir } 2562*cdf0e10cSrcweir 2563*cdf0e10cSrcweir 2564*cdf0e10cSrcweir void SvxRuler::ApplyBorders() 2565*cdf0e10cSrcweir /* 2566*cdf0e10cSrcweir [Beschreibung] 2567*cdf0e10cSrcweir 2568*cdf0e10cSrcweir Anwenden von (Tabellen-)Spalteneinstellungen; durch Draggen veraendert. 2569*cdf0e10cSrcweir 2570*cdf0e10cSrcweir */ 2571*cdf0e10cSrcweir { 2572*cdf0e10cSrcweir if(pColumnItem->IsTable()) 2573*cdf0e10cSrcweir { 2574*cdf0e10cSrcweir long l = GetFrameLeft(); 2575*cdf0e10cSrcweir if(l != pRuler_Imp->nColLeftPix) 2576*cdf0e10cSrcweir pColumnItem->SetLeft( PixelHAdjust( 2577*cdf0e10cSrcweir ConvertHPosLogic(l) - lAppNullOffset, pColumnItem->GetLeft())); 2578*cdf0e10cSrcweir l = GetMargin2(); 2579*cdf0e10cSrcweir if(l != pRuler_Imp->nColRightPix) 2580*cdf0e10cSrcweir { 2581*cdf0e10cSrcweir long nWidthOrHeight = bHorz ? pPagePosItem->GetWidth() : pPagePosItem->GetHeight(); 2582*cdf0e10cSrcweir pColumnItem->SetRight( PixelHAdjust( nWidthOrHeight - 2583*cdf0e10cSrcweir pColumnItem->GetLeft() - ConvertHPosLogic(l) - 2584*cdf0e10cSrcweir lAppNullOffset, pColumnItem->GetRight() ) ); 2585*cdf0e10cSrcweir } 2586*cdf0e10cSrcweir } 2587*cdf0e10cSrcweir for(sal_uInt16 i = 0; i < pColumnItem->Count()-1; ++i) 2588*cdf0e10cSrcweir { 2589*cdf0e10cSrcweir long& nEnd = (*pColumnItem)[i].nEnd; 2590*cdf0e10cSrcweir nEnd = PIXEL_H_ADJUST( 2591*cdf0e10cSrcweir ConvertPosLogic(pBorders[i].nPos), 2592*cdf0e10cSrcweir (*pColumnItem)[i].nEnd); 2593*cdf0e10cSrcweir long& nStart = (*pColumnItem)[i+1].nStart; 2594*cdf0e10cSrcweir nStart = PIXEL_H_ADJUST( 2595*cdf0e10cSrcweir ConvertSizeLogic(pBorders[i].nPos + 2596*cdf0e10cSrcweir pBorders[i].nWidth) - 2597*cdf0e10cSrcweir lAppNullOffset, 2598*cdf0e10cSrcweir (*pColumnItem)[i+1].nStart); 2599*cdf0e10cSrcweir // Es kann sein, dass aufgrund der PIXEL_H_ADJUST rejustierung auf 2600*cdf0e10cSrcweir // alte Werte die Breite < 0 wird. Das rerejustieren wir. 2601*cdf0e10cSrcweir if( nEnd > nStart ) 2602*cdf0e10cSrcweir nStart = nEnd; 2603*cdf0e10cSrcweir } 2604*cdf0e10cSrcweir #ifdef DEBUGLIN 2605*cdf0e10cSrcweir Debug_Impl(pEditWin,*pColumnItem); 2606*cdf0e10cSrcweir #endif // DEBUGLIN 2607*cdf0e10cSrcweir SfxBoolItem aFlag(SID_RULER_ACT_LINE_ONLY, 2608*cdf0e10cSrcweir nDragType & DRAG_OBJECT_ACTLINE_ONLY? sal_True : sal_False); 2609*cdf0e10cSrcweir sal_uInt16 nColId = pRuler_Imp->bIsTableRows ? (bHorz ? SID_RULER_ROWS : SID_RULER_ROWS_VERTICAL) : 2610*cdf0e10cSrcweir (bHorz ? SID_RULER_BORDERS : SID_RULER_BORDERS_VERTICAL); 2611*cdf0e10cSrcweir pBindings->GetDispatcher()->Execute( nColId, SFX_CALLMODE_RECORD, pColumnItem, &aFlag, 0L ); 2612*cdf0e10cSrcweir } 2613*cdf0e10cSrcweir 2614*cdf0e10cSrcweir void SvxRuler::ApplyObject() 2615*cdf0e10cSrcweir /* 2616*cdf0e10cSrcweir [Beschreibung] 2617*cdf0e10cSrcweir 2618*cdf0e10cSrcweir Anwenden von Objekteinstellungen; durch Draggen veraendert. 2619*cdf0e10cSrcweir 2620*cdf0e10cSrcweir */ 2621*cdf0e10cSrcweir { 2622*cdf0e10cSrcweir // zum Seitenrand 2623*cdf0e10cSrcweir long nMargin = pLRSpaceItem? pLRSpaceItem->GetLeft(): 0; 2624*cdf0e10cSrcweir pObjectItem->SetStartX( 2625*cdf0e10cSrcweir PixelAdjust( 2626*cdf0e10cSrcweir ConvertPosLogic(pObjectBorders[0].nPos) 2627*cdf0e10cSrcweir + nMargin - lAppNullOffset,pObjectItem->GetStartX())); 2628*cdf0e10cSrcweir pObjectItem->SetEndX( 2629*cdf0e10cSrcweir PixelAdjust( 2630*cdf0e10cSrcweir ConvertPosLogic(pObjectBorders[1].nPos) 2631*cdf0e10cSrcweir + nMargin - lAppNullOffset,pObjectItem->GetEndX())); 2632*cdf0e10cSrcweir nMargin = pULSpaceItem? pULSpaceItem->GetUpper(): 0; 2633*cdf0e10cSrcweir pObjectItem->SetStartY( 2634*cdf0e10cSrcweir PixelAdjust( 2635*cdf0e10cSrcweir ConvertPosLogic(pObjectBorders[2].nPos) 2636*cdf0e10cSrcweir + nMargin - lAppNullOffset,pObjectItem->GetStartY())); 2637*cdf0e10cSrcweir pObjectItem->SetEndY( 2638*cdf0e10cSrcweir PixelAdjust( 2639*cdf0e10cSrcweir ConvertPosLogic(pObjectBorders[3].nPos) 2640*cdf0e10cSrcweir + nMargin - lAppNullOffset,pObjectItem->GetEndY())); 2641*cdf0e10cSrcweir pBindings->GetDispatcher()->Execute( SID_RULER_OBJECT, SFX_CALLMODE_RECORD, pObjectItem, 0L ); 2642*cdf0e10cSrcweir } 2643*cdf0e10cSrcweir 2644*cdf0e10cSrcweir void SvxRuler::PrepareProportional_Impl(RulerType eType) 2645*cdf0e10cSrcweir /* 2646*cdf0e10cSrcweir [Beschreibung] 2647*cdf0e10cSrcweir 2648*cdf0e10cSrcweir Vorbereitung proportionales Draggen; es wird der proportionale 2649*cdf0e10cSrcweir Anteil bezogen auf die Gesamtbreite in Promille berechnet. 2650*cdf0e10cSrcweir 2651*cdf0e10cSrcweir */ 2652*cdf0e10cSrcweir { 2653*cdf0e10cSrcweir pRuler_Imp->nTotalDist = GetMargin2(); 2654*cdf0e10cSrcweir switch((int)eType) 2655*cdf0e10cSrcweir { 2656*cdf0e10cSrcweir case RULER_TYPE_MARGIN2: 2657*cdf0e10cSrcweir case RULER_TYPE_MARGIN1: 2658*cdf0e10cSrcweir case RULER_TYPE_BORDER: 2659*cdf0e10cSrcweir { 2660*cdf0e10cSrcweir DBG_ASSERT(pColumnItem, "kein ColumnItem"); 2661*cdf0e10cSrcweir 2662*cdf0e10cSrcweir pRuler_Imp->SetPercSize(pColumnItem->Count()); 2663*cdf0e10cSrcweir 2664*cdf0e10cSrcweir long lPos; 2665*cdf0e10cSrcweir long lWidth=0; 2666*cdf0e10cSrcweir sal_uInt16 nStart; 2667*cdf0e10cSrcweir sal_uInt16 nIdx=GetDragAryPos(); 2668*cdf0e10cSrcweir lWidth=0; 2669*cdf0e10cSrcweir long lActWidth=0; 2670*cdf0e10cSrcweir long lActBorderSum; 2671*cdf0e10cSrcweir long lOrigLPos; 2672*cdf0e10cSrcweir 2673*cdf0e10cSrcweir if(eType != RULER_TYPE_BORDER) 2674*cdf0e10cSrcweir { 2675*cdf0e10cSrcweir lOrigLPos = GetMargin1(); 2676*cdf0e10cSrcweir nStart = 0; 2677*cdf0e10cSrcweir lActBorderSum = 0; 2678*cdf0e10cSrcweir } 2679*cdf0e10cSrcweir else 2680*cdf0e10cSrcweir { 2681*cdf0e10cSrcweir if(pRuler_Imp->bIsTableRows &&!bHorz) 2682*cdf0e10cSrcweir { 2683*cdf0e10cSrcweir lOrigLPos = GetMargin1(); 2684*cdf0e10cSrcweir nStart = 0; 2685*cdf0e10cSrcweir } 2686*cdf0e10cSrcweir else 2687*cdf0e10cSrcweir { 2688*cdf0e10cSrcweir lOrigLPos = pBorders[nIdx].nPos + pBorders[nIdx].nWidth; 2689*cdf0e10cSrcweir nStart = 1; 2690*cdf0e10cSrcweir } 2691*cdf0e10cSrcweir lActBorderSum = pBorders[nIdx].nWidth; 2692*cdf0e10cSrcweir } 2693*cdf0e10cSrcweir 2694*cdf0e10cSrcweir //in horizontal mode the percentage value has to be 2695*cdf0e10cSrcweir //calculated on a "current change" position base 2696*cdf0e10cSrcweir //because the height of the table changes while dragging 2697*cdf0e10cSrcweir if(pRuler_Imp->bIsTableRows && RULER_TYPE_BORDER == eType) 2698*cdf0e10cSrcweir { 2699*cdf0e10cSrcweir sal_uInt16 nStartBorder; 2700*cdf0e10cSrcweir sal_uInt16 nEndBorder; 2701*cdf0e10cSrcweir if(bHorz) 2702*cdf0e10cSrcweir { 2703*cdf0e10cSrcweir nStartBorder = nIdx + 1; 2704*cdf0e10cSrcweir nEndBorder = pColumnItem->Count() - 1; 2705*cdf0e10cSrcweir } 2706*cdf0e10cSrcweir else 2707*cdf0e10cSrcweir { 2708*cdf0e10cSrcweir nStartBorder = 0; 2709*cdf0e10cSrcweir nEndBorder = nIdx; 2710*cdf0e10cSrcweir } 2711*cdf0e10cSrcweir 2712*cdf0e10cSrcweir lWidth = pBorders[nIdx].nPos; 2713*cdf0e10cSrcweir if(bHorz) 2714*cdf0e10cSrcweir lWidth = GetMargin2() - lWidth; 2715*cdf0e10cSrcweir pRuler_Imp->nTotalDist = lWidth; 2716*cdf0e10cSrcweir lPos = lOrigLPos = pBorders[nIdx].nPos; 2717*cdf0e10cSrcweir 2718*cdf0e10cSrcweir for(sal_uInt16 i = nStartBorder; i < nEndBorder; ++i) 2719*cdf0e10cSrcweir { 2720*cdf0e10cSrcweir if(bHorz) 2721*cdf0e10cSrcweir { 2722*cdf0e10cSrcweir lActWidth += pBorders[i].nPos - lPos; 2723*cdf0e10cSrcweir lPos = pBorders[i].nPos + pBorders[i].nWidth; 2724*cdf0e10cSrcweir } 2725*cdf0e10cSrcweir else 2726*cdf0e10cSrcweir lActWidth = pBorders[i].nPos; 2727*cdf0e10cSrcweir pRuler_Imp->pPercBuf[i] = (sal_uInt16)((lActWidth * 1000) 2728*cdf0e10cSrcweir / pRuler_Imp->nTotalDist); 2729*cdf0e10cSrcweir pRuler_Imp->pBlockBuf[i] = (sal_uInt16)lActBorderSum; 2730*cdf0e10cSrcweir lActBorderSum += pBorders[i].nWidth; 2731*cdf0e10cSrcweir } 2732*cdf0e10cSrcweir } 2733*cdf0e10cSrcweir else 2734*cdf0e10cSrcweir { 2735*cdf0e10cSrcweir lPos = lOrigLPos; 2736*cdf0e10cSrcweir for(sal_uInt16 ii = nStart; ii < pColumnItem->Count() - 1; ++ii) 2737*cdf0e10cSrcweir { 2738*cdf0e10cSrcweir lWidth += pBorders[ii].nPos - lPos; 2739*cdf0e10cSrcweir lPos = pBorders[ii].nPos + pBorders[ii].nWidth; 2740*cdf0e10cSrcweir } 2741*cdf0e10cSrcweir 2742*cdf0e10cSrcweir lWidth += GetMargin2() - lPos; 2743*cdf0e10cSrcweir pRuler_Imp->nTotalDist = lWidth; 2744*cdf0e10cSrcweir lPos = lOrigLPos; 2745*cdf0e10cSrcweir 2746*cdf0e10cSrcweir for(sal_uInt16 i = nStart; i < pColumnItem->Count() - 1; ++i) 2747*cdf0e10cSrcweir { 2748*cdf0e10cSrcweir lActWidth += pBorders[i].nPos - lPos; 2749*cdf0e10cSrcweir lPos = pBorders[i].nPos + pBorders[i].nWidth; 2750*cdf0e10cSrcweir pRuler_Imp->pPercBuf[i] = (sal_uInt16)((lActWidth * 1000) 2751*cdf0e10cSrcweir / pRuler_Imp->nTotalDist); 2752*cdf0e10cSrcweir pRuler_Imp->pBlockBuf[i] = (sal_uInt16)lActBorderSum; 2753*cdf0e10cSrcweir lActBorderSum += pBorders[i].nWidth; 2754*cdf0e10cSrcweir } 2755*cdf0e10cSrcweir } 2756*cdf0e10cSrcweir } 2757*cdf0e10cSrcweir break; 2758*cdf0e10cSrcweir case RULER_TYPE_TAB: 2759*cdf0e10cSrcweir { 2760*cdf0e10cSrcweir const sal_uInt16 nIdx = GetDragAryPos()+TAB_GAP; 2761*cdf0e10cSrcweir pRuler_Imp->nTotalDist -= pTabs[nIdx].nPos; 2762*cdf0e10cSrcweir pRuler_Imp->SetPercSize(nTabCount); 2763*cdf0e10cSrcweir for(sal_uInt16 n=0;n<=nIdx;pRuler_Imp->pPercBuf[n++]=0) ; 2764*cdf0e10cSrcweir for(sal_uInt16 i = nIdx+1; i < nTabCount; ++i) 2765*cdf0e10cSrcweir { 2766*cdf0e10cSrcweir const long nDelta = pTabs[i].nPos - pTabs[nIdx].nPos; 2767*cdf0e10cSrcweir pRuler_Imp->pPercBuf[i] = (sal_uInt16)((nDelta * 1000) / pRuler_Imp->nTotalDist); 2768*cdf0e10cSrcweir } 2769*cdf0e10cSrcweir break; 2770*cdf0e10cSrcweir } 2771*cdf0e10cSrcweir } 2772*cdf0e10cSrcweir } 2773*cdf0e10cSrcweir 2774*cdf0e10cSrcweir 2775*cdf0e10cSrcweir void SvxRuler::EvalModifier() 2776*cdf0e10cSrcweir 2777*cdf0e10cSrcweir /* 2778*cdf0e10cSrcweir [Beschreibung] 2779*cdf0e10cSrcweir 2780*cdf0e10cSrcweir Modifier Draggen auswerten 2781*cdf0e10cSrcweir 2782*cdf0e10cSrcweir Shift: Linear verschieben 2783*cdf0e10cSrcweir Control: Proportional verschieben 2784*cdf0e10cSrcweir Shift+Control: Tabelle: nur aktuelle Zeile 2785*cdf0e10cSrcweir alt: Bemassungspfeile (n.i.) //!! 2786*cdf0e10cSrcweir 2787*cdf0e10cSrcweir */ 2788*cdf0e10cSrcweir 2789*cdf0e10cSrcweir { 2790*cdf0e10cSrcweir sal_uInt16 nModifier = GetDragModifier(); 2791*cdf0e10cSrcweir if(pRuler_Imp->bIsTableRows) 2792*cdf0e10cSrcweir { 2793*cdf0e10cSrcweir //rows can only be moved in one way, additionally current column is possible 2794*cdf0e10cSrcweir if(nModifier == KEY_SHIFT) 2795*cdf0e10cSrcweir nModifier = 0; 2796*cdf0e10cSrcweir } 2797*cdf0e10cSrcweir switch(nModifier) 2798*cdf0e10cSrcweir { 2799*cdf0e10cSrcweir case KEY_SHIFT: 2800*cdf0e10cSrcweir nDragType = DRAG_OBJECT_SIZE_LINEAR; 2801*cdf0e10cSrcweir break; 2802*cdf0e10cSrcweir case KEY_MOD1: { 2803*cdf0e10cSrcweir const RulerType eType = GetDragType(); 2804*cdf0e10cSrcweir nDragType = DRAG_OBJECT_SIZE_PROPORTIONAL; 2805*cdf0e10cSrcweir if( RULER_TYPE_TAB == eType || 2806*cdf0e10cSrcweir ( ( RULER_TYPE_BORDER == eType || RULER_TYPE_MARGIN1 == eType || RULER_TYPE_MARGIN2 == eType) && 2807*cdf0e10cSrcweir pColumnItem ) ) 2808*cdf0e10cSrcweir PrepareProportional_Impl(eType); 2809*cdf0e10cSrcweir break; 2810*cdf0e10cSrcweir } 2811*cdf0e10cSrcweir case KEY_MOD1 | KEY_SHIFT: 2812*cdf0e10cSrcweir if(GetDragType()!=RULER_TYPE_MARGIN1&& 2813*cdf0e10cSrcweir GetDragType()!=RULER_TYPE_MARGIN2) 2814*cdf0e10cSrcweir nDragType = DRAG_OBJECT_ACTLINE_ONLY; 2815*cdf0e10cSrcweir break; 2816*cdf0e10cSrcweir // alt: Bemassungspfeile 2817*cdf0e10cSrcweir } 2818*cdf0e10cSrcweir } 2819*cdf0e10cSrcweir 2820*cdf0e10cSrcweir 2821*cdf0e10cSrcweir void __EXPORT SvxRuler::Click() 2822*cdf0e10cSrcweir 2823*cdf0e10cSrcweir /* 2824*cdf0e10cSrcweir [Beschreibung] 2825*cdf0e10cSrcweir 2826*cdf0e10cSrcweir Ueberladener Handler SV; setzt Tab per Dispatcheraufruf 2827*cdf0e10cSrcweir 2828*cdf0e10cSrcweir */ 2829*cdf0e10cSrcweir 2830*cdf0e10cSrcweir { 2831*cdf0e10cSrcweir lcl_logRulerUse(::rtl::OUString::createFromAscii(".special://SfxRuler/Click")); 2832*cdf0e10cSrcweir Ruler::Click(); 2833*cdf0e10cSrcweir if( bActive ) 2834*cdf0e10cSrcweir { 2835*cdf0e10cSrcweir pBindings->Update( SID_RULER_LR_MIN_MAX ); 2836*cdf0e10cSrcweir pBindings->Update( SID_ATTR_LONG_ULSPACE ); 2837*cdf0e10cSrcweir pBindings->Update( SID_ATTR_LONG_LRSPACE ); 2838*cdf0e10cSrcweir pBindings->Update( SID_RULER_PAGE_POS ); 2839*cdf0e10cSrcweir pBindings->Update( bHorz ? SID_ATTR_TABSTOP : SID_ATTR_TABSTOP_VERTICAL); 2840*cdf0e10cSrcweir pBindings->Update( bHorz ? SID_ATTR_PARA_LRSPACE : SID_ATTR_PARA_LRSPACE_VERTICAL); 2841*cdf0e10cSrcweir pBindings->Update( bHorz ? SID_RULER_BORDERS : SID_RULER_BORDERS_VERTICAL); 2842*cdf0e10cSrcweir pBindings->Update( bHorz ? SID_RULER_ROWS : SID_RULER_ROWS_VERTICAL); 2843*cdf0e10cSrcweir pBindings->Update( SID_RULER_OBJECT ); 2844*cdf0e10cSrcweir pBindings->Update( SID_RULER_PROTECT ); 2845*cdf0e10cSrcweir pBindings->Update( SID_ATTR_PARA_LRSPACE_VERTICAL ); 2846*cdf0e10cSrcweir } 2847*cdf0e10cSrcweir sal_Bool bRTL = pRuler_Imp->pTextRTLItem && pRuler_Imp->pTextRTLItem->GetValue(); 2848*cdf0e10cSrcweir if(pTabStopItem && 2849*cdf0e10cSrcweir (nFlags & SVXRULER_SUPPORT_TABS) == SVXRULER_SUPPORT_TABS) 2850*cdf0e10cSrcweir { 2851*cdf0e10cSrcweir sal_Bool bContentProtected = pRuler_Imp->aProtectItem.IsCntntProtected(); 2852*cdf0e10cSrcweir if( bContentProtected ) return; 2853*cdf0e10cSrcweir const long lPos = GetClickPos(); 2854*cdf0e10cSrcweir if((bRTL && lPos < Min(GetFirstLineIndent(), GetLeftIndent()) && lPos > GetRightIndent()) || 2855*cdf0e10cSrcweir (!bRTL && lPos > Min(GetFirstLineIndent(), GetLeftIndent()) && lPos < GetRightIndent())) 2856*cdf0e10cSrcweir { 2857*cdf0e10cSrcweir //convert position in left-to-right text 2858*cdf0e10cSrcweir long nTabPos; 2859*cdf0e10cSrcweir //#i24363# tab stops relative to indent 2860*cdf0e10cSrcweir if(bRTL) 2861*cdf0e10cSrcweir nTabPos = ( pRuler_Imp->bIsTabsRelativeToIndent ? 2862*cdf0e10cSrcweir GetLeftIndent() : 2863*cdf0e10cSrcweir ConvertHPosPixel( GetRightFrameMargin() + lAppNullOffset ) ) - 2864*cdf0e10cSrcweir lPos; 2865*cdf0e10cSrcweir else 2866*cdf0e10cSrcweir nTabPos = lPos - 2867*cdf0e10cSrcweir ( pRuler_Imp->bIsTabsRelativeToIndent ? 2868*cdf0e10cSrcweir GetLeftIndent() : 2869*cdf0e10cSrcweir 0 ); 2870*cdf0e10cSrcweir 2871*cdf0e10cSrcweir SvxTabStop aTabStop(ConvertHPosLogic(nTabPos), 2872*cdf0e10cSrcweir ToAttrTab_Impl(nDefTabType)); 2873*cdf0e10cSrcweir pTabStopItem->Insert(aTabStop); 2874*cdf0e10cSrcweir UpdateTabs(); 2875*cdf0e10cSrcweir } 2876*cdf0e10cSrcweir } 2877*cdf0e10cSrcweir } 2878*cdf0e10cSrcweir 2879*cdf0e10cSrcweir 2880*cdf0e10cSrcweir sal_Bool SvxRuler::CalcLimits 2881*cdf0e10cSrcweir ( 2882*cdf0e10cSrcweir long &nMax1, // zu setzenden Minimalwert 2883*cdf0e10cSrcweir long &nMax2, // zu setzenden Maximalwert 2884*cdf0e10cSrcweir sal_Bool 2885*cdf0e10cSrcweir ) const 2886*cdf0e10cSrcweir /* 2887*cdf0e10cSrcweir [Beschreibung] 2888*cdf0e10cSrcweir 2889*cdf0e10cSrcweir Defaultimplementierung der virtuellen Funktion; kann die Applikation 2890*cdf0e10cSrcweir ueberladen, um eine eigene Grenzwertbehandlung zu implementieren. 2891*cdf0e10cSrcweir Die Werte sind auf die Seite bezogen. 2892*cdf0e10cSrcweir */ 2893*cdf0e10cSrcweir { 2894*cdf0e10cSrcweir nMax1 = LONG_MIN; 2895*cdf0e10cSrcweir nMax2 = LONG_MAX; 2896*cdf0e10cSrcweir return sal_False; 2897*cdf0e10cSrcweir } 2898*cdf0e10cSrcweir 2899*cdf0e10cSrcweir 2900*cdf0e10cSrcweir void SvxRuler::CalcMinMax() 2901*cdf0e10cSrcweir 2902*cdf0e10cSrcweir /* 2903*cdf0e10cSrcweir [Beschreibung] 2904*cdf0e10cSrcweir 2905*cdf0e10cSrcweir Berechnet die Grenzwerte fuers Draggen; diese sind in Pixeln 2906*cdf0e10cSrcweir relativ zum Seitenrand 2907*cdf0e10cSrcweir 2908*cdf0e10cSrcweir */ 2909*cdf0e10cSrcweir 2910*cdf0e10cSrcweir { 2911*cdf0e10cSrcweir sal_Bool bRTL = pRuler_Imp->pTextRTLItem && pRuler_Imp->pTextRTLItem->GetValue(); 2912*cdf0e10cSrcweir const long lNullPix = ConvertPosPixel(lLogicNullOffset); 2913*cdf0e10cSrcweir pRuler_Imp->lMaxLeftLogic=pRuler_Imp->lMaxRightLogic=-1; 2914*cdf0e10cSrcweir switch(GetDragType()) 2915*cdf0e10cSrcweir { 2916*cdf0e10cSrcweir case RULER_TYPE_MARGIN1: 2917*cdf0e10cSrcweir { // linker Rand umgebender Frame 2918*cdf0e10cSrcweir // DragPos - NOf zwischen links - rechts 2919*cdf0e10cSrcweir pRuler_Imp->lMaxLeftLogic = GetLeftMin(); 2920*cdf0e10cSrcweir nMaxLeft=ConvertSizePixel(pRuler_Imp->lMaxLeftLogic); 2921*cdf0e10cSrcweir 2922*cdf0e10cSrcweir if(!pColumnItem || pColumnItem->Count() == 1 ) 2923*cdf0e10cSrcweir { 2924*cdf0e10cSrcweir if(bRTL) 2925*cdf0e10cSrcweir { 2926*cdf0e10cSrcweir nMaxRight = lNullPix - GetRightIndent() + 2927*cdf0e10cSrcweir Max(GetFirstLineIndent(), GetLeftIndent()) - 2928*cdf0e10cSrcweir lMinFrame; 2929*cdf0e10cSrcweir } 2930*cdf0e10cSrcweir else 2931*cdf0e10cSrcweir { 2932*cdf0e10cSrcweir nMaxRight = lNullPix + GetRightIndent() - 2933*cdf0e10cSrcweir Max(GetFirstLineIndent(), GetLeftIndent()) - 2934*cdf0e10cSrcweir lMinFrame; 2935*cdf0e10cSrcweir } 2936*cdf0e10cSrcweir } 2937*cdf0e10cSrcweir else if(pRuler_Imp->bIsTableRows) 2938*cdf0e10cSrcweir { 2939*cdf0e10cSrcweir //top border is not moveable when table rows are displayed 2940*cdf0e10cSrcweir // protection of content means the margin is not moveable - it's just a page break inside of a cell 2941*cdf0e10cSrcweir if(bHorz && !pRuler_Imp->aProtectItem.IsCntntProtected()) 2942*cdf0e10cSrcweir { 2943*cdf0e10cSrcweir nMaxLeft = pBorders[0].nMinPos + lNullPix; 2944*cdf0e10cSrcweir if(nDragType & DRAG_OBJECT_SIZE_PROPORTIONAL) 2945*cdf0e10cSrcweir nMaxRight = GetRightIndent() + lNullPix - 2946*cdf0e10cSrcweir (pColumnItem->Count() - 1 ) * lMinFrame; 2947*cdf0e10cSrcweir else 2948*cdf0e10cSrcweir nMaxRight = pBorders[0].nPos - lMinFrame + lNullPix; 2949*cdf0e10cSrcweir } 2950*cdf0e10cSrcweir else 2951*cdf0e10cSrcweir nMaxLeft = nMaxRight = lNullPix; 2952*cdf0e10cSrcweir } 2953*cdf0e10cSrcweir else 2954*cdf0e10cSrcweir { 2955*cdf0e10cSrcweir if(nDragType & DRAG_OBJECT_SIZE_PROPORTIONAL) 2956*cdf0e10cSrcweir //nDragType & DRAG_OBJECT_SIZE_LINEAR) 2957*cdf0e10cSrcweir { 2958*cdf0e10cSrcweir nMaxRight=lNullPix+CalcPropMaxRight(); 2959*cdf0e10cSrcweir } 2960*cdf0e10cSrcweir else if(nDragType & DRAG_OBJECT_SIZE_LINEAR) 2961*cdf0e10cSrcweir { 2962*cdf0e10cSrcweir nMaxRight = ConvertPosPixel( 2963*cdf0e10cSrcweir GetPageWidth() - ( 2964*cdf0e10cSrcweir (pColumnItem->IsTable() && pLRSpaceItem) 2965*cdf0e10cSrcweir ? pLRSpaceItem->GetRight() : 0)) 2966*cdf0e10cSrcweir - GetMargin2() + GetMargin1(); 2967*cdf0e10cSrcweir } 2968*cdf0e10cSrcweir else 2969*cdf0e10cSrcweir { 2970*cdf0e10cSrcweir nMaxRight = lNullPix - lMinFrame; 2971*cdf0e10cSrcweir if(pColumnItem->IsFirstAct()) 2972*cdf0e10cSrcweir { 2973*cdf0e10cSrcweir if(bRTL) 2974*cdf0e10cSrcweir { 2975*cdf0e10cSrcweir nMaxRight += Min( 2976*cdf0e10cSrcweir pBorders[0].nPos, 2977*cdf0e10cSrcweir Max(GetFirstLineIndent(), GetLeftIndent()) - GetRightIndent()); 2978*cdf0e10cSrcweir } 2979*cdf0e10cSrcweir else 2980*cdf0e10cSrcweir { 2981*cdf0e10cSrcweir nMaxRight += Min( 2982*cdf0e10cSrcweir pBorders[0].nPos, GetRightIndent() - 2983*cdf0e10cSrcweir Max(GetFirstLineIndent(), GetLeftIndent())); 2984*cdf0e10cSrcweir } 2985*cdf0e10cSrcweir } 2986*cdf0e10cSrcweir else if( pColumnItem->Count() > 1 ) 2987*cdf0e10cSrcweir nMaxRight += pBorders[0].nPos; 2988*cdf0e10cSrcweir else 2989*cdf0e10cSrcweir nMaxRight +=GetRightIndent() - 2990*cdf0e10cSrcweir Max(GetFirstLineIndent(), GetLeftIndent()); 2991*cdf0e10cSrcweir // den linken Tabellen-Rand nicht ueber den Seitenrand ziehen 2992*cdf0e10cSrcweir if(pLRSpaceItem&&pColumnItem->IsTable()) 2993*cdf0e10cSrcweir { 2994*cdf0e10cSrcweir long nTmp=ConvertSizePixel(pLRSpaceItem->GetLeft()); 2995*cdf0e10cSrcweir if(nTmp>nMaxLeft) 2996*cdf0e10cSrcweir nMaxLeft=nTmp; 2997*cdf0e10cSrcweir } 2998*cdf0e10cSrcweir } 2999*cdf0e10cSrcweir } 3000*cdf0e10cSrcweir break; 3001*cdf0e10cSrcweir } 3002*cdf0e10cSrcweir case RULER_TYPE_MARGIN2: 3003*cdf0e10cSrcweir { // rechter Rand umgebender Frame 3004*cdf0e10cSrcweir pRuler_Imp->lMaxRightLogic = 3005*cdf0e10cSrcweir pMinMaxItem ? 3006*cdf0e10cSrcweir GetPageWidth() - GetRightMax() : GetPageWidth(); 3007*cdf0e10cSrcweir nMaxRight = ConvertSizePixel(pRuler_Imp->lMaxRightLogic); 3008*cdf0e10cSrcweir 3009*cdf0e10cSrcweir 3010*cdf0e10cSrcweir if(!pColumnItem) 3011*cdf0e10cSrcweir { 3012*cdf0e10cSrcweir if(bRTL) 3013*cdf0e10cSrcweir { 3014*cdf0e10cSrcweir nMaxLeft = GetMargin2() + GetRightIndent() - 3015*cdf0e10cSrcweir Max(GetFirstLineIndent(),GetLeftIndent()) - GetMargin1()+ 3016*cdf0e10cSrcweir lMinFrame + lNullPix; 3017*cdf0e10cSrcweir } 3018*cdf0e10cSrcweir else 3019*cdf0e10cSrcweir { 3020*cdf0e10cSrcweir nMaxLeft = GetMargin2() - GetRightIndent() + 3021*cdf0e10cSrcweir Max(GetFirstLineIndent(),GetLeftIndent()) - GetMargin1()+ 3022*cdf0e10cSrcweir lMinFrame + lNullPix; 3023*cdf0e10cSrcweir } 3024*cdf0e10cSrcweir } 3025*cdf0e10cSrcweir else if(pRuler_Imp->bIsTableRows) 3026*cdf0e10cSrcweir { 3027*cdf0e10cSrcweir // get the bottom move range from the last border position - only available for rows! 3028*cdf0e10cSrcweir // protection of content means the margin is not moveable - it's just a page break inside of a cell 3029*cdf0e10cSrcweir if(bHorz || pRuler_Imp->aProtectItem.IsCntntProtected()) 3030*cdf0e10cSrcweir { 3031*cdf0e10cSrcweir nMaxLeft = nMaxRight = pBorders[pColumnItem->Count() - 1].nMaxPos + lNullPix; 3032*cdf0e10cSrcweir } 3033*cdf0e10cSrcweir else 3034*cdf0e10cSrcweir { 3035*cdf0e10cSrcweir if(nDragType & DRAG_OBJECT_SIZE_PROPORTIONAL) 3036*cdf0e10cSrcweir { 3037*cdf0e10cSrcweir nMaxLeft = (pColumnItem->Count()) * lMinFrame + lNullPix; 3038*cdf0e10cSrcweir } 3039*cdf0e10cSrcweir else 3040*cdf0e10cSrcweir { 3041*cdf0e10cSrcweir if(pColumnItem->Count() > 1) 3042*cdf0e10cSrcweir nMaxLeft = pBorders[pColumnItem->Count() - 2].nPos + lMinFrame + lNullPix; 3043*cdf0e10cSrcweir else 3044*cdf0e10cSrcweir nMaxLeft = lMinFrame + lNullPix; 3045*cdf0e10cSrcweir } 3046*cdf0e10cSrcweir if(pColumnItem->Count() > 1) 3047*cdf0e10cSrcweir nMaxRight = pBorders[pColumnItem->Count() - 2].nMaxPos + lNullPix; 3048*cdf0e10cSrcweir else 3049*cdf0e10cSrcweir nMaxRight -= GetRightIndent() - lNullPix; 3050*cdf0e10cSrcweir } 3051*cdf0e10cSrcweir } 3052*cdf0e10cSrcweir else 3053*cdf0e10cSrcweir { 3054*cdf0e10cSrcweir nMaxLeft = lMinFrame + lNullPix; 3055*cdf0e10cSrcweir if(IsActLastColumn() || pColumnItem->Count() < 2 ) //Falls letzte Spalte aktiv 3056*cdf0e10cSrcweir { 3057*cdf0e10cSrcweir if(bRTL) 3058*cdf0e10cSrcweir { 3059*cdf0e10cSrcweir nMaxLeft = lMinFrame + lNullPix + GetMargin2() + 3060*cdf0e10cSrcweir GetRightIndent() - Max(GetFirstLineIndent(), 3061*cdf0e10cSrcweir GetLeftIndent()); 3062*cdf0e10cSrcweir } 3063*cdf0e10cSrcweir else 3064*cdf0e10cSrcweir { 3065*cdf0e10cSrcweir nMaxLeft = lMinFrame + lNullPix + GetMargin2() - 3066*cdf0e10cSrcweir GetRightIndent() + Max(GetFirstLineIndent(), 3067*cdf0e10cSrcweir GetLeftIndent()); 3068*cdf0e10cSrcweir } 3069*cdf0e10cSrcweir } 3070*cdf0e10cSrcweir if( pColumnItem->Count() >= 2 ) 3071*cdf0e10cSrcweir { 3072*cdf0e10cSrcweir long nNewMaxLeft = 3073*cdf0e10cSrcweir lMinFrame + lNullPix + 3074*cdf0e10cSrcweir pBorders[pColumnItem->Count()-2].nPos + 3075*cdf0e10cSrcweir pBorders[pColumnItem->Count()-2].nWidth; 3076*cdf0e10cSrcweir nMaxLeft=Max(nMaxLeft,nNewMaxLeft); 3077*cdf0e10cSrcweir } 3078*cdf0e10cSrcweir 3079*cdf0e10cSrcweir } 3080*cdf0e10cSrcweir break; 3081*cdf0e10cSrcweir } 3082*cdf0e10cSrcweir case RULER_TYPE_BORDER: 3083*cdf0e10cSrcweir { // Tabelle, Spalten (Modifier) 3084*cdf0e10cSrcweir const sal_uInt16 nIdx = GetDragAryPos(); 3085*cdf0e10cSrcweir switch(GetDragSize()) 3086*cdf0e10cSrcweir { 3087*cdf0e10cSrcweir case RULER_DRAGSIZE_1 : 3088*cdf0e10cSrcweir { 3089*cdf0e10cSrcweir nMaxRight = pBorders[nIdx].nPos + 3090*cdf0e10cSrcweir pBorders[nIdx].nWidth + lNullPix; 3091*cdf0e10cSrcweir 3092*cdf0e10cSrcweir if(0 == nIdx) 3093*cdf0e10cSrcweir nMaxLeft = lNullPix; 3094*cdf0e10cSrcweir else 3095*cdf0e10cSrcweir nMaxLeft = pBorders[nIdx-1].nPos + 3096*cdf0e10cSrcweir pBorders[nIdx-1].nWidth + lNullPix; 3097*cdf0e10cSrcweir if(nIdx == pColumnItem->GetActColumn()) 3098*cdf0e10cSrcweir { 3099*cdf0e10cSrcweir if(bRTL) 3100*cdf0e10cSrcweir { 3101*cdf0e10cSrcweir nMaxLeft += pBorders[nIdx].nPos + 3102*cdf0e10cSrcweir GetRightIndent() - Max(GetFirstLineIndent(), 3103*cdf0e10cSrcweir GetLeftIndent()); 3104*cdf0e10cSrcweir } 3105*cdf0e10cSrcweir else 3106*cdf0e10cSrcweir { 3107*cdf0e10cSrcweir nMaxLeft += pBorders[nIdx].nPos - 3108*cdf0e10cSrcweir GetRightIndent() + Max(GetFirstLineIndent(), 3109*cdf0e10cSrcweir GetLeftIndent()); 3110*cdf0e10cSrcweir } 3111*cdf0e10cSrcweir if(0 != nIdx) 3112*cdf0e10cSrcweir nMaxLeft -= pBorders[nIdx-1].nPos + 3113*cdf0e10cSrcweir pBorders[nIdx-1].nWidth; 3114*cdf0e10cSrcweir } 3115*cdf0e10cSrcweir nMaxLeft += lMinFrame; 3116*cdf0e10cSrcweir nMaxLeft += nDragOffset; 3117*cdf0e10cSrcweir break; 3118*cdf0e10cSrcweir } 3119*cdf0e10cSrcweir case RULER_DRAGSIZE_MOVE: 3120*cdf0e10cSrcweir { 3121*cdf0e10cSrcweir if(pColumnItem) 3122*cdf0e10cSrcweir { 3123*cdf0e10cSrcweir //nIdx contains the position of the currently moved item 3124*cdf0e10cSrcweir //next visible separator on the left 3125*cdf0e10cSrcweir sal_uInt16 nLeftCol=GetActLeftColumn(sal_False, nIdx); 3126*cdf0e10cSrcweir //next visible separator on the right 3127*cdf0e10cSrcweir sal_uInt16 nRightCol=GetActRightColumn(sal_False, nIdx); 3128*cdf0e10cSrcweir //next separator on the left - regardless if visible or not 3129*cdf0e10cSrcweir sal_uInt16 nActLeftCol=GetActLeftColumn(); 3130*cdf0e10cSrcweir //next separator on the right - regardless if visible or not 3131*cdf0e10cSrcweir sal_uInt16 nActRightCol=GetActRightColumn(); 3132*cdf0e10cSrcweir if(pColumnItem->IsTable()) 3133*cdf0e10cSrcweir { 3134*cdf0e10cSrcweir if(nDragType & DRAG_OBJECT_ACTLINE_ONLY) 3135*cdf0e10cSrcweir { 3136*cdf0e10cSrcweir //the current row/column should be modified only 3137*cdf0e10cSrcweir //then the next/previous visible border position 3138*cdf0e10cSrcweir //marks the min/max positions 3139*cdf0e10cSrcweir nMaxLeft = nLeftCol == USHRT_MAX ? 3140*cdf0e10cSrcweir 0 : 3141*cdf0e10cSrcweir pBorders[nLeftCol].nPos; 3142*cdf0e10cSrcweir //rows can always be increased without a limit 3143*cdf0e10cSrcweir if(pRuler_Imp->bIsTableRows) 3144*cdf0e10cSrcweir nMaxRight = pBorders[nIdx].nMaxPos; 3145*cdf0e10cSrcweir else 3146*cdf0e10cSrcweir nMaxRight = nRightCol == USHRT_MAX ? 3147*cdf0e10cSrcweir GetMargin2(): 3148*cdf0e10cSrcweir pBorders[nRightCol].nPos; 3149*cdf0e10cSrcweir nMaxLeft += lNullPix; 3150*cdf0e10cSrcweir nMaxRight += lNullPix; 3151*cdf0e10cSrcweir } 3152*cdf0e10cSrcweir else 3153*cdf0e10cSrcweir { 3154*cdf0e10cSrcweir if(DRAG_OBJECT_SIZE_PROPORTIONAL & nDragType && !bHorz && pRuler_Imp->bIsTableRows) 3155*cdf0e10cSrcweir nMaxLeft = (nIdx + 1) * lMinFrame + lNullPix; 3156*cdf0e10cSrcweir else 3157*cdf0e10cSrcweir nMaxLeft = pBorders[nIdx].nMinPos + lNullPix; 3158*cdf0e10cSrcweir if(DRAG_OBJECT_SIZE_PROPORTIONAL & nDragType|| 3159*cdf0e10cSrcweir (DRAG_OBJECT_SIZE_LINEAR & nDragType) ) 3160*cdf0e10cSrcweir { 3161*cdf0e10cSrcweir if(pRuler_Imp->bIsTableRows) 3162*cdf0e10cSrcweir { 3163*cdf0e10cSrcweir if(bHorz) 3164*cdf0e10cSrcweir nMaxRight = GetRightIndent() + lNullPix - 3165*cdf0e10cSrcweir (pColumnItem->Count() - nIdx - 1) * lMinFrame; 3166*cdf0e10cSrcweir else 3167*cdf0e10cSrcweir nMaxRight = pBorders[nIdx].nMaxPos + lNullPix; 3168*cdf0e10cSrcweir } 3169*cdf0e10cSrcweir else 3170*cdf0e10cSrcweir nMaxRight=lNullPix+CalcPropMaxRight(nIdx); 3171*cdf0e10cSrcweir } 3172*cdf0e10cSrcweir else 3173*cdf0e10cSrcweir nMaxRight = pBorders[nIdx].nMaxPos + lNullPix; 3174*cdf0e10cSrcweir } 3175*cdf0e10cSrcweir nMaxLeft += lMinFrame; 3176*cdf0e10cSrcweir nMaxRight -= lMinFrame; 3177*cdf0e10cSrcweir 3178*cdf0e10cSrcweir } 3179*cdf0e10cSrcweir else 3180*cdf0e10cSrcweir { 3181*cdf0e10cSrcweir if(nLeftCol==USHRT_MAX) 3182*cdf0e10cSrcweir nMaxLeft=lNullPix; 3183*cdf0e10cSrcweir else 3184*cdf0e10cSrcweir nMaxLeft = pBorders[nLeftCol].nPos + 3185*cdf0e10cSrcweir pBorders[nLeftCol].nWidth + lNullPix; 3186*cdf0e10cSrcweir 3187*cdf0e10cSrcweir if(nActRightCol == nIdx) 3188*cdf0e10cSrcweir { 3189*cdf0e10cSrcweir if(bRTL) 3190*cdf0e10cSrcweir { 3191*cdf0e10cSrcweir nMaxLeft += pBorders[nIdx].nPos + 3192*cdf0e10cSrcweir GetRightIndent() - Max(GetFirstLineIndent(), 3193*cdf0e10cSrcweir GetLeftIndent()); 3194*cdf0e10cSrcweir if(nActLeftCol!=USHRT_MAX) 3195*cdf0e10cSrcweir nMaxLeft -= pBorders[nActLeftCol].nPos + 3196*cdf0e10cSrcweir pBorders[nActLeftCol].nWidth; 3197*cdf0e10cSrcweir } 3198*cdf0e10cSrcweir else 3199*cdf0e10cSrcweir { 3200*cdf0e10cSrcweir nMaxLeft += pBorders[nIdx].nPos - 3201*cdf0e10cSrcweir GetRightIndent() + Max(GetFirstLineIndent(), 3202*cdf0e10cSrcweir GetLeftIndent()); 3203*cdf0e10cSrcweir if(nActLeftCol!=USHRT_MAX) 3204*cdf0e10cSrcweir nMaxLeft -= pBorders[nActLeftCol].nPos + 3205*cdf0e10cSrcweir pBorders[nActLeftCol].nWidth; 3206*cdf0e10cSrcweir } 3207*cdf0e10cSrcweir } 3208*cdf0e10cSrcweir nMaxLeft += lMinFrame; 3209*cdf0e10cSrcweir nMaxLeft += nDragOffset; 3210*cdf0e10cSrcweir 3211*cdf0e10cSrcweir // nMaxRight 3212*cdf0e10cSrcweir // linear / proprotional verschieben 3213*cdf0e10cSrcweir if(DRAG_OBJECT_SIZE_PROPORTIONAL & nDragType|| 3214*cdf0e10cSrcweir (DRAG_OBJECT_SIZE_LINEAR & nDragType) ) 3215*cdf0e10cSrcweir { 3216*cdf0e10cSrcweir nMaxRight=lNullPix+CalcPropMaxRight(nIdx); 3217*cdf0e10cSrcweir } 3218*cdf0e10cSrcweir else if(DRAG_OBJECT_SIZE_LINEAR & nDragType) 3219*cdf0e10cSrcweir { 3220*cdf0e10cSrcweir nMaxRight=lNullPix+GetMargin2()-GetMargin1()+ 3221*cdf0e10cSrcweir (nBorderCount-nIdx-1)*lMinFrame; 3222*cdf0e10cSrcweir } 3223*cdf0e10cSrcweir else 3224*cdf0e10cSrcweir { 3225*cdf0e10cSrcweir if(nRightCol==USHRT_MAX) 3226*cdf0e10cSrcweir { // letzte Spalte 3227*cdf0e10cSrcweir nMaxRight = GetMargin2() + lNullPix; 3228*cdf0e10cSrcweir if(IsActLastColumn()) 3229*cdf0e10cSrcweir { 3230*cdf0e10cSrcweir if(bRTL) 3231*cdf0e10cSrcweir { 3232*cdf0e10cSrcweir nMaxRight -= 3233*cdf0e10cSrcweir GetMargin2() + GetRightIndent() - 3234*cdf0e10cSrcweir Max(GetFirstLineIndent(), 3235*cdf0e10cSrcweir GetLeftIndent()); 3236*cdf0e10cSrcweir } 3237*cdf0e10cSrcweir else 3238*cdf0e10cSrcweir { 3239*cdf0e10cSrcweir nMaxRight -= 3240*cdf0e10cSrcweir GetMargin2() - GetRightIndent() + 3241*cdf0e10cSrcweir Max(GetFirstLineIndent(), 3242*cdf0e10cSrcweir GetLeftIndent()); 3243*cdf0e10cSrcweir } 3244*cdf0e10cSrcweir nMaxRight += pBorders[nIdx].nPos + 3245*cdf0e10cSrcweir pBorders[nIdx].nWidth; 3246*cdf0e10cSrcweir } 3247*cdf0e10cSrcweir } 3248*cdf0e10cSrcweir else 3249*cdf0e10cSrcweir { 3250*cdf0e10cSrcweir nMaxRight = lNullPix + pBorders[nRightCol].nPos; 3251*cdf0e10cSrcweir sal_uInt16 nNotHiddenRightCol = 3252*cdf0e10cSrcweir GetActRightColumn(sal_True, nIdx); 3253*cdf0e10cSrcweir 3254*cdf0e10cSrcweir if( nActLeftCol == nIdx ) 3255*cdf0e10cSrcweir { 3256*cdf0e10cSrcweir long nBorder = nNotHiddenRightCol == 3257*cdf0e10cSrcweir USHRT_MAX ? 3258*cdf0e10cSrcweir GetMargin2() : 3259*cdf0e10cSrcweir pBorders[nNotHiddenRightCol].nPos; 3260*cdf0e10cSrcweir if(bRTL) 3261*cdf0e10cSrcweir { 3262*cdf0e10cSrcweir nMaxRight -= nBorder + GetRightIndent() - 3263*cdf0e10cSrcweir Max(GetFirstLineIndent(), 3264*cdf0e10cSrcweir GetLeftIndent()); 3265*cdf0e10cSrcweir } 3266*cdf0e10cSrcweir else 3267*cdf0e10cSrcweir { 3268*cdf0e10cSrcweir nMaxRight -= nBorder - GetRightIndent() + 3269*cdf0e10cSrcweir Max(GetFirstLineIndent(), 3270*cdf0e10cSrcweir GetLeftIndent()); 3271*cdf0e10cSrcweir } 3272*cdf0e10cSrcweir nMaxRight += pBorders[nIdx].nPos + 3273*cdf0e10cSrcweir pBorders[nIdx].nWidth; 3274*cdf0e10cSrcweir } 3275*cdf0e10cSrcweir } 3276*cdf0e10cSrcweir nMaxRight -= lMinFrame; 3277*cdf0e10cSrcweir nMaxRight -= pBorders[nIdx].nWidth; 3278*cdf0e10cSrcweir } 3279*cdf0e10cSrcweir } 3280*cdf0e10cSrcweir } 3281*cdf0e10cSrcweir // ObjectItem 3282*cdf0e10cSrcweir else 3283*cdf0e10cSrcweir { 3284*cdf0e10cSrcweir if(pObjectItem->HasLimits()) 3285*cdf0e10cSrcweir { 3286*cdf0e10cSrcweir if(CalcLimits(nMaxLeft, nMaxRight, nIdx & 1? sal_False : sal_True)) 3287*cdf0e10cSrcweir { 3288*cdf0e10cSrcweir nMaxLeft = ConvertPosPixel(nMaxLeft); 3289*cdf0e10cSrcweir nMaxRight = ConvertPosPixel(nMaxRight); 3290*cdf0e10cSrcweir } 3291*cdf0e10cSrcweir } 3292*cdf0e10cSrcweir else 3293*cdf0e10cSrcweir { 3294*cdf0e10cSrcweir nMaxLeft = LONG_MIN; 3295*cdf0e10cSrcweir nMaxRight = LONG_MAX; 3296*cdf0e10cSrcweir } 3297*cdf0e10cSrcweir } 3298*cdf0e10cSrcweir break; 3299*cdf0e10cSrcweir } 3300*cdf0e10cSrcweir case RULER_DRAGSIZE_2: 3301*cdf0e10cSrcweir { 3302*cdf0e10cSrcweir nMaxLeft = lNullPix + pBorders[nIdx].nPos; 3303*cdf0e10cSrcweir if(nIdx == pColumnItem->Count()-2) { // letzte Spalte 3304*cdf0e10cSrcweir nMaxRight = GetMargin2() + lNullPix; 3305*cdf0e10cSrcweir if(pColumnItem->IsLastAct()) { 3306*cdf0e10cSrcweir nMaxRight -= 3307*cdf0e10cSrcweir GetMargin2() - GetRightIndent() + 3308*cdf0e10cSrcweir Max(GetFirstLineIndent(), 3309*cdf0e10cSrcweir GetLeftIndent()); 3310*cdf0e10cSrcweir nMaxRight += pBorders[nIdx].nPos + 3311*cdf0e10cSrcweir pBorders[nIdx].nWidth; 3312*cdf0e10cSrcweir } 3313*cdf0e10cSrcweir } 3314*cdf0e10cSrcweir else { 3315*cdf0e10cSrcweir nMaxRight = lNullPix + pBorders[nIdx+1].nPos; 3316*cdf0e10cSrcweir if(pColumnItem->GetActColumn()-1 == nIdx) { 3317*cdf0e10cSrcweir nMaxRight -= pBorders[nIdx+1].nPos - GetRightIndent() + 3318*cdf0e10cSrcweir Max(GetFirstLineIndent(), 3319*cdf0e10cSrcweir GetLeftIndent()); 3320*cdf0e10cSrcweir nMaxRight += pBorders[nIdx].nPos + 3321*cdf0e10cSrcweir pBorders[nIdx].nWidth; 3322*cdf0e10cSrcweir } 3323*cdf0e10cSrcweir } 3324*cdf0e10cSrcweir nMaxRight -= lMinFrame; 3325*cdf0e10cSrcweir nMaxRight -= pBorders[nIdx].nWidth; 3326*cdf0e10cSrcweir break; 3327*cdf0e10cSrcweir } 3328*cdf0e10cSrcweir } 3329*cdf0e10cSrcweir nMaxRight += nDragOffset; 3330*cdf0e10cSrcweir break; 3331*cdf0e10cSrcweir } 3332*cdf0e10cSrcweir case RULER_TYPE_INDENT: 3333*cdf0e10cSrcweir { 3334*cdf0e10cSrcweir const sal_uInt16 nIdx = GetDragAryPos(); 3335*cdf0e10cSrcweir switch(nIdx) { 3336*cdf0e10cSrcweir case INDENT_FIRST_LINE - INDENT_GAP: 3337*cdf0e10cSrcweir case INDENT_LEFT_MARGIN - INDENT_GAP: 3338*cdf0e10cSrcweir { 3339*cdf0e10cSrcweir if(bRTL) 3340*cdf0e10cSrcweir { 3341*cdf0e10cSrcweir nMaxLeft = lNullPix + GetRightIndent(); 3342*cdf0e10cSrcweir 3343*cdf0e10cSrcweir if(pColumnItem && !pColumnItem->IsFirstAct()) 3344*cdf0e10cSrcweir nMaxLeft += pBorders[pColumnItem->GetActColumn()-1].nPos + 3345*cdf0e10cSrcweir pBorders[pColumnItem->GetActColumn()-1].nWidth; 3346*cdf0e10cSrcweir nMaxRight = lNullPix + GetMargin2(); 3347*cdf0e10cSrcweir 3348*cdf0e10cSrcweir // zusammem draggen 3349*cdf0e10cSrcweir if((INDENT_FIRST_LINE - INDENT_GAP) != nIdx && 3350*cdf0e10cSrcweir (nDragType & DRAG_OBJECT_LEFT_INDENT_ONLY) != 3351*cdf0e10cSrcweir DRAG_OBJECT_LEFT_INDENT_ONLY) 3352*cdf0e10cSrcweir { 3353*cdf0e10cSrcweir if(GetLeftIndent() > GetFirstLineIndent()) 3354*cdf0e10cSrcweir nMaxLeft += GetLeftIndent() - GetFirstLineIndent(); 3355*cdf0e10cSrcweir else 3356*cdf0e10cSrcweir nMaxRight -= GetFirstLineIndent() - GetLeftIndent(); 3357*cdf0e10cSrcweir } 3358*cdf0e10cSrcweir } 3359*cdf0e10cSrcweir else 3360*cdf0e10cSrcweir { 3361*cdf0e10cSrcweir nMaxLeft = lNullPix; 3362*cdf0e10cSrcweir 3363*cdf0e10cSrcweir if(pColumnItem && !pColumnItem->IsFirstAct()) 3364*cdf0e10cSrcweir nMaxLeft += pBorders[pColumnItem->GetActColumn()-1].nPos + 3365*cdf0e10cSrcweir pBorders[pColumnItem->GetActColumn()-1].nWidth; 3366*cdf0e10cSrcweir nMaxRight = lNullPix + GetRightIndent() - lMinFrame; 3367*cdf0e10cSrcweir 3368*cdf0e10cSrcweir // zusammem draggen 3369*cdf0e10cSrcweir if((INDENT_FIRST_LINE - INDENT_GAP) != nIdx && 3370*cdf0e10cSrcweir (nDragType & DRAG_OBJECT_LEFT_INDENT_ONLY) != 3371*cdf0e10cSrcweir DRAG_OBJECT_LEFT_INDENT_ONLY) 3372*cdf0e10cSrcweir { 3373*cdf0e10cSrcweir if(GetLeftIndent() > GetFirstLineIndent()) 3374*cdf0e10cSrcweir nMaxLeft += GetLeftIndent() - GetFirstLineIndent(); 3375*cdf0e10cSrcweir else 3376*cdf0e10cSrcweir nMaxRight -= GetFirstLineIndent() - GetLeftIndent(); 3377*cdf0e10cSrcweir } 3378*cdf0e10cSrcweir } 3379*cdf0e10cSrcweir } 3380*cdf0e10cSrcweir break; 3381*cdf0e10cSrcweir case INDENT_RIGHT_MARGIN - INDENT_GAP: 3382*cdf0e10cSrcweir { 3383*cdf0e10cSrcweir if(bRTL) 3384*cdf0e10cSrcweir { 3385*cdf0e10cSrcweir nMaxLeft = lNullPix; 3386*cdf0e10cSrcweir nMaxRight = lNullPix + Min(GetFirstLineIndent(), GetLeftIndent()) - lMinFrame; 3387*cdf0e10cSrcweir if(pColumnItem) 3388*cdf0e10cSrcweir { 3389*cdf0e10cSrcweir sal_uInt16 nRightCol=GetActRightColumn( sal_True ); 3390*cdf0e10cSrcweir if(!IsActLastColumn( sal_True )) 3391*cdf0e10cSrcweir nMaxRight += pBorders[nRightCol].nPos; 3392*cdf0e10cSrcweir else 3393*cdf0e10cSrcweir nMaxRight += GetMargin2(); 3394*cdf0e10cSrcweir } 3395*cdf0e10cSrcweir else 3396*cdf0e10cSrcweir nMaxLeft += GetMargin1(); 3397*cdf0e10cSrcweir nMaxLeft += lMinFrame; 3398*cdf0e10cSrcweir } 3399*cdf0e10cSrcweir else 3400*cdf0e10cSrcweir { 3401*cdf0e10cSrcweir nMaxLeft = lNullPix + 3402*cdf0e10cSrcweir Max(GetFirstLineIndent(), GetLeftIndent()); 3403*cdf0e10cSrcweir nMaxRight = lNullPix; 3404*cdf0e10cSrcweir if(pColumnItem) 3405*cdf0e10cSrcweir { 3406*cdf0e10cSrcweir sal_uInt16 nRightCol=GetActRightColumn( sal_True ); 3407*cdf0e10cSrcweir if(!IsActLastColumn( sal_True )) 3408*cdf0e10cSrcweir nMaxRight += pBorders[nRightCol].nPos; 3409*cdf0e10cSrcweir else 3410*cdf0e10cSrcweir nMaxRight += GetMargin2(); 3411*cdf0e10cSrcweir } 3412*cdf0e10cSrcweir else 3413*cdf0e10cSrcweir nMaxRight += GetMargin2(); 3414*cdf0e10cSrcweir nMaxLeft += lMinFrame; 3415*cdf0e10cSrcweir } 3416*cdf0e10cSrcweir } 3417*cdf0e10cSrcweir break; 3418*cdf0e10cSrcweir } 3419*cdf0e10cSrcweir break; 3420*cdf0e10cSrcweir } 3421*cdf0e10cSrcweir case RULER_TYPE_TAB: // Tabs (Modifier) 3422*cdf0e10cSrcweir /* 3423*cdf0e10cSrcweir links = NOf + Max(LAR, EZ) 3424*cdf0e10cSrcweir rechts = NOf + RAR 3425*cdf0e10cSrcweir */ 3426*cdf0e10cSrcweir nMaxLeft = bRTL ? lNullPix + GetRightIndent() 3427*cdf0e10cSrcweir : lNullPix + Min(GetFirstLineIndent(), GetLeftIndent()); 3428*cdf0e10cSrcweir pRuler_Imp->lMaxRightLogic=GetLogicRightIndent()+lLogicNullOffset; 3429*cdf0e10cSrcweir nMaxRight = ConvertSizePixel(pRuler_Imp->lMaxRightLogic); 3430*cdf0e10cSrcweir break; 3431*cdf0e10cSrcweir default: ; //prevent warning 3432*cdf0e10cSrcweir } 3433*cdf0e10cSrcweir #ifdef DEBUGLIN 3434*cdf0e10cSrcweir { 3435*cdf0e10cSrcweir String aStr("MinLeft: "); 3436*cdf0e10cSrcweir Size aSize(nMaxLeft + lNullPix, 0); 3437*cdf0e10cSrcweir Size aSize2(nMaxRight + lNullPix, 0); 3438*cdf0e10cSrcweir aSize = pEditWin->PixelToLogic(aSize, MapMode(MAP_MM)); 3439*cdf0e10cSrcweir aSize2 = pEditWin->PixelToLogic(aSize2, MapMode(MAP_MM)); 3440*cdf0e10cSrcweir aStr += String(aSize.Width()); 3441*cdf0e10cSrcweir aStr += " MaxRight: "; 3442*cdf0e10cSrcweir aStr += String(aSize2.Width()); 3443*cdf0e10cSrcweir InfoBox(0, aStr).Execute(); 3444*cdf0e10cSrcweir } 3445*cdf0e10cSrcweir #endif 3446*cdf0e10cSrcweir } 3447*cdf0e10cSrcweir 3448*cdf0e10cSrcweir 3449*cdf0e10cSrcweir long __EXPORT SvxRuler::StartDrag() 3450*cdf0e10cSrcweir 3451*cdf0e10cSrcweir /* 3452*cdf0e10cSrcweir [Beschreibung] 3453*cdf0e10cSrcweir 3454*cdf0e10cSrcweir Beginn eines Drag-Vorgangs (SV-Handler); wertet Modifier aus 3455*cdf0e10cSrcweir und berechnet Grenzwerte 3456*cdf0e10cSrcweir 3457*cdf0e10cSrcweir [Querverweise] 3458*cdf0e10cSrcweir 3459*cdf0e10cSrcweir <SvxRuler::EvalModifier()> 3460*cdf0e10cSrcweir <SvxRuler::CalcMinMax()> 3461*cdf0e10cSrcweir <SvxRuler::EndDrag()> 3462*cdf0e10cSrcweir 3463*cdf0e10cSrcweir */ 3464*cdf0e10cSrcweir 3465*cdf0e10cSrcweir { 3466*cdf0e10cSrcweir lcl_logRulerUse(::rtl::OUString::createFromAscii(".special://SfxRuler/StartDrag")); 3467*cdf0e10cSrcweir sal_Bool bContentProtected = pRuler_Imp->aProtectItem.IsCntntProtected(); 3468*cdf0e10cSrcweir if(!bValid) 3469*cdf0e10cSrcweir return sal_False; 3470*cdf0e10cSrcweir 3471*cdf0e10cSrcweir pRuler_Imp->lLastLMargin=GetMargin1(); 3472*cdf0e10cSrcweir pRuler_Imp->lLastRMargin=GetMargin2(); 3473*cdf0e10cSrcweir long bOk = 1; 3474*cdf0e10cSrcweir if(GetStartDragHdl().IsSet()) 3475*cdf0e10cSrcweir bOk = Ruler::StartDrag(); 3476*cdf0e10cSrcweir if(bOk) { 3477*cdf0e10cSrcweir lInitialDragPos = GetDragPos(); 3478*cdf0e10cSrcweir switch(GetDragType()) { 3479*cdf0e10cSrcweir case RULER_TYPE_MARGIN1: // linker Rand umgebender Frame 3480*cdf0e10cSrcweir case RULER_TYPE_MARGIN2: // rechter Rand umgebender Frame 3481*cdf0e10cSrcweir if((bHorz && pLRSpaceItem) || (!bHorz && pULSpaceItem)) 3482*cdf0e10cSrcweir { 3483*cdf0e10cSrcweir if(pColumnItem) 3484*cdf0e10cSrcweir EvalModifier(); 3485*cdf0e10cSrcweir else 3486*cdf0e10cSrcweir nDragType = DRAG_OBJECT; 3487*cdf0e10cSrcweir } 3488*cdf0e10cSrcweir else 3489*cdf0e10cSrcweir bOk = sal_False; 3490*cdf0e10cSrcweir break; 3491*cdf0e10cSrcweir case RULER_TYPE_BORDER: // Tabelle, Spalten (Modifier) 3492*cdf0e10cSrcweir if(pColumnItem) 3493*cdf0e10cSrcweir { 3494*cdf0e10cSrcweir nDragOffset = pColumnItem->IsTable()? 0 : 3495*cdf0e10cSrcweir GetDragPos() - pBorders[GetDragAryPos()].nPos; 3496*cdf0e10cSrcweir EvalModifier(); 3497*cdf0e10cSrcweir 3498*cdf0e10cSrcweir } 3499*cdf0e10cSrcweir else 3500*cdf0e10cSrcweir nDragOffset = 0; 3501*cdf0e10cSrcweir break; 3502*cdf0e10cSrcweir case RULER_TYPE_INDENT: { // Absatzeinzuege (Modifier) 3503*cdf0e10cSrcweir if( bContentProtected ) 3504*cdf0e10cSrcweir return sal_False; 3505*cdf0e10cSrcweir sal_uInt16 nIndent = INDENT_LEFT_MARGIN; 3506*cdf0e10cSrcweir if((nIndent) == GetDragAryPos() + INDENT_GAP) { // Linker Absatzeinzug 3507*cdf0e10cSrcweir pIndents[0] = pIndents[INDENT_FIRST_LINE]; 3508*cdf0e10cSrcweir pIndents[0].nStyle |= RULER_STYLE_DONTKNOW; 3509*cdf0e10cSrcweir EvalModifier(); 3510*cdf0e10cSrcweir } 3511*cdf0e10cSrcweir else 3512*cdf0e10cSrcweir nDragType = DRAG_OBJECT; 3513*cdf0e10cSrcweir pIndents[1] = pIndents[GetDragAryPos()+INDENT_GAP]; 3514*cdf0e10cSrcweir pIndents[1].nStyle |= RULER_STYLE_DONTKNOW; 3515*cdf0e10cSrcweir break; 3516*cdf0e10cSrcweir } 3517*cdf0e10cSrcweir case RULER_TYPE_TAB: // Tabs (Modifier) 3518*cdf0e10cSrcweir if( bContentProtected ) return sal_False; 3519*cdf0e10cSrcweir EvalModifier(); 3520*cdf0e10cSrcweir pTabs[0] = pTabs[GetDragAryPos()+1]; 3521*cdf0e10cSrcweir pTabs[0].nStyle |= RULER_STYLE_DONTKNOW; 3522*cdf0e10cSrcweir break; 3523*cdf0e10cSrcweir default: 3524*cdf0e10cSrcweir nDragType = NONE; 3525*cdf0e10cSrcweir } 3526*cdf0e10cSrcweir } 3527*cdf0e10cSrcweir else 3528*cdf0e10cSrcweir nDragType = NONE; 3529*cdf0e10cSrcweir if(bOk) 3530*cdf0e10cSrcweir CalcMinMax(); 3531*cdf0e10cSrcweir return bOk; 3532*cdf0e10cSrcweir } 3533*cdf0e10cSrcweir 3534*cdf0e10cSrcweir 3535*cdf0e10cSrcweir void __EXPORT SvxRuler::Drag() 3536*cdf0e10cSrcweir /* 3537*cdf0e10cSrcweir [Beschreibung] 3538*cdf0e10cSrcweir 3539*cdf0e10cSrcweir SV-Draghandler 3540*cdf0e10cSrcweir 3541*cdf0e10cSrcweir */ 3542*cdf0e10cSrcweir { 3543*cdf0e10cSrcweir if(IsDragCanceled()) 3544*cdf0e10cSrcweir { 3545*cdf0e10cSrcweir Ruler::Drag(); 3546*cdf0e10cSrcweir return; 3547*cdf0e10cSrcweir } 3548*cdf0e10cSrcweir switch(GetDragType()) { 3549*cdf0e10cSrcweir case RULER_TYPE_MARGIN1: // linker Rand umgebender Frame 3550*cdf0e10cSrcweir DragMargin1(); 3551*cdf0e10cSrcweir pRuler_Imp->lLastLMargin=GetMargin1(); 3552*cdf0e10cSrcweir break; 3553*cdf0e10cSrcweir case RULER_TYPE_MARGIN2: // rechter Rand umgebender Frame 3554*cdf0e10cSrcweir DragMargin2(); 3555*cdf0e10cSrcweir pRuler_Imp->lLastRMargin = GetMargin2(); 3556*cdf0e10cSrcweir break; 3557*cdf0e10cSrcweir case RULER_TYPE_INDENT: // Absatzeinzuege 3558*cdf0e10cSrcweir DragIndents(); 3559*cdf0e10cSrcweir break; 3560*cdf0e10cSrcweir case RULER_TYPE_BORDER: // Tabelle, Spalten 3561*cdf0e10cSrcweir if(pColumnItem) 3562*cdf0e10cSrcweir DragBorders(); 3563*cdf0e10cSrcweir else if(pObjectItem) 3564*cdf0e10cSrcweir DragObjectBorder(); 3565*cdf0e10cSrcweir break; 3566*cdf0e10cSrcweir case RULER_TYPE_TAB: // Tabs 3567*cdf0e10cSrcweir DragTabs(); 3568*cdf0e10cSrcweir break; 3569*cdf0e10cSrcweir default: ;//prevent warning 3570*cdf0e10cSrcweir } 3571*cdf0e10cSrcweir Ruler::Drag(); 3572*cdf0e10cSrcweir } 3573*cdf0e10cSrcweir 3574*cdf0e10cSrcweir 3575*cdf0e10cSrcweir void __EXPORT SvxRuler::EndDrag() 3576*cdf0e10cSrcweir /* 3577*cdf0e10cSrcweir [Beschreibung] 3578*cdf0e10cSrcweir 3579*cdf0e10cSrcweir SV-Handler; wird beim Beenden des Draggens gerufen. 3580*cdf0e10cSrcweir Stoesst die Aktualisierung der Daten der Applikation an, indem 3581*cdf0e10cSrcweir durch Aufruf der jeweiligen Apply...()- Methoden die Daten an die 3582*cdf0e10cSrcweir Applikation geschickt werden. 3583*cdf0e10cSrcweir 3584*cdf0e10cSrcweir */ 3585*cdf0e10cSrcweir { 3586*cdf0e10cSrcweir lcl_logRulerUse(::rtl::OUString::createFromAscii(".special://SfxRuler/EndDrag")); 3587*cdf0e10cSrcweir const sal_Bool bUndo = IsDragCanceled(); 3588*cdf0e10cSrcweir const long lPos = GetDragPos(); 3589*cdf0e10cSrcweir DrawLine_Impl(lTabPos, 6, bHorz); 3590*cdf0e10cSrcweir lTabPos=-1; 3591*cdf0e10cSrcweir if(!bUndo) 3592*cdf0e10cSrcweir switch(GetDragType()) 3593*cdf0e10cSrcweir { 3594*cdf0e10cSrcweir case RULER_TYPE_MARGIN1: // linker, oberer Rand umgebender Frame 3595*cdf0e10cSrcweir case RULER_TYPE_MARGIN2: // rechter, unterer Rand umgebender Frame 3596*cdf0e10cSrcweir { 3597*cdf0e10cSrcweir if(!pColumnItem || !pColumnItem->IsTable()) 3598*cdf0e10cSrcweir ApplyMargins(); 3599*cdf0e10cSrcweir 3600*cdf0e10cSrcweir if(pColumnItem && 3601*cdf0e10cSrcweir (pColumnItem->IsTable() || 3602*cdf0e10cSrcweir (nDragType & DRAG_OBJECT_SIZE_PROPORTIONAL))) 3603*cdf0e10cSrcweir ApplyBorders(); 3604*cdf0e10cSrcweir 3605*cdf0e10cSrcweir } 3606*cdf0e10cSrcweir break; 3607*cdf0e10cSrcweir case RULER_TYPE_BORDER: // Tabelle, Spalten 3608*cdf0e10cSrcweir if(lInitialDragPos != lPos || 3609*cdf0e10cSrcweir (pRuler_Imp->bIsTableRows && bHorz)) //special case - the null offset is changed here 3610*cdf0e10cSrcweir { 3611*cdf0e10cSrcweir if(pColumnItem) 3612*cdf0e10cSrcweir { 3613*cdf0e10cSrcweir ApplyBorders(); 3614*cdf0e10cSrcweir if(bHorz) 3615*cdf0e10cSrcweir UpdateTabs(); 3616*cdf0e10cSrcweir } 3617*cdf0e10cSrcweir else if(pObjectItem) 3618*cdf0e10cSrcweir ApplyObject(); 3619*cdf0e10cSrcweir } 3620*cdf0e10cSrcweir break; 3621*cdf0e10cSrcweir case RULER_TYPE_INDENT: // Absatzeinzuege 3622*cdf0e10cSrcweir if(lInitialDragPos != lPos) 3623*cdf0e10cSrcweir ApplyIndents(); 3624*cdf0e10cSrcweir SetIndents(INDENT_COUNT, pIndents+INDENT_GAP); 3625*cdf0e10cSrcweir break; 3626*cdf0e10cSrcweir case RULER_TYPE_TAB: // Tabs 3627*cdf0e10cSrcweir { 3628*cdf0e10cSrcweir ApplyTabs(); 3629*cdf0e10cSrcweir pTabs[GetDragAryPos()].nStyle &= ~RULER_STYLE_INVISIBLE; 3630*cdf0e10cSrcweir SetTabs(nTabCount, pTabs+TAB_GAP); 3631*cdf0e10cSrcweir } 3632*cdf0e10cSrcweir break; 3633*cdf0e10cSrcweir default: ; //prevent warning 3634*cdf0e10cSrcweir } 3635*cdf0e10cSrcweir nDragType = NONE; 3636*cdf0e10cSrcweir Ruler::EndDrag(); 3637*cdf0e10cSrcweir if(bUndo) 3638*cdf0e10cSrcweir for(sal_uInt16 i=0;i<pRuler_Imp->nControlerItems;i++) 3639*cdf0e10cSrcweir { 3640*cdf0e10cSrcweir pCtrlItem[i]->ClearCache(); 3641*cdf0e10cSrcweir pCtrlItem[i]->GetBindings().Invalidate(pCtrlItem[i]->GetId()); 3642*cdf0e10cSrcweir // pCtrlItem[i]->UnBind(); 3643*cdf0e10cSrcweir // pCtrlItem[i]->ReBind(); 3644*cdf0e10cSrcweir } 3645*cdf0e10cSrcweir } 3646*cdf0e10cSrcweir 3647*cdf0e10cSrcweir 3648*cdf0e10cSrcweir void __EXPORT SvxRuler::ExtraDown() 3649*cdf0e10cSrcweir 3650*cdf0e10cSrcweir /* 3651*cdf0e10cSrcweir [Beschreibung] 3652*cdf0e10cSrcweir 3653*cdf0e10cSrcweir Ueberladene SV-Methode; setzt den neuen Typ fuer den Defaulttabulator. 3654*cdf0e10cSrcweir */ 3655*cdf0e10cSrcweir 3656*cdf0e10cSrcweir { 3657*cdf0e10cSrcweir // Tabulator Typ umschalten 3658*cdf0e10cSrcweir if(pTabStopItem && 3659*cdf0e10cSrcweir (nFlags & SVXRULER_SUPPORT_TABS) == SVXRULER_SUPPORT_TABS) { 3660*cdf0e10cSrcweir ++nDefTabType; 3661*cdf0e10cSrcweir if(RULER_TAB_DEFAULT == nDefTabType) 3662*cdf0e10cSrcweir nDefTabType = RULER_TAB_LEFT; 3663*cdf0e10cSrcweir SetExtraType(RULER_EXTRA_TAB, nDefTabType); 3664*cdf0e10cSrcweir } 3665*cdf0e10cSrcweir Ruler::ExtraDown(); 3666*cdf0e10cSrcweir } 3667*cdf0e10cSrcweir 3668*cdf0e10cSrcweir 3669*cdf0e10cSrcweir void __EXPORT SvxRuler::Notify(SfxBroadcaster&, const SfxHint& rHint) 3670*cdf0e10cSrcweir /* 3671*cdf0e10cSrcweir 3672*cdf0e10cSrcweir [Beschreibung] 3673*cdf0e10cSrcweir 3674*cdf0e10cSrcweir Benachrichtigung durch die Bindings, dass die Statusaktualisierung 3675*cdf0e10cSrcweir beendet ist. 3676*cdf0e10cSrcweir Das Lineal aktualisiert seine Darstellung und meldet sich bei den 3677*cdf0e10cSrcweir Bindings wieder ab. 3678*cdf0e10cSrcweir 3679*cdf0e10cSrcweir */ 3680*cdf0e10cSrcweir 3681*cdf0e10cSrcweir { 3682*cdf0e10cSrcweir // Aktualisierung anstossen 3683*cdf0e10cSrcweir if(bActive && 3684*cdf0e10cSrcweir rHint.Type() == TYPE(SfxSimpleHint) && 3685*cdf0e10cSrcweir ((SfxSimpleHint&) rHint ).GetId() == SFX_HINT_UPDATEDONE ) { 3686*cdf0e10cSrcweir Update(); 3687*cdf0e10cSrcweir EndListening(*pBindings); 3688*cdf0e10cSrcweir bValid = sal_True; 3689*cdf0e10cSrcweir bListening = sal_False; 3690*cdf0e10cSrcweir } 3691*cdf0e10cSrcweir } 3692*cdf0e10cSrcweir 3693*cdf0e10cSrcweir 3694*cdf0e10cSrcweir IMPL_LINK_INLINE_START( SvxRuler, MenuSelect, Menu *, pMenu ) 3695*cdf0e10cSrcweir 3696*cdf0e10cSrcweir /* 3697*cdf0e10cSrcweir [Beschreibung] 3698*cdf0e10cSrcweir 3699*cdf0e10cSrcweir Handler des Kontextmenues fuer das Umschalten der Masseinheit 3700*cdf0e10cSrcweir 3701*cdf0e10cSrcweir */ 3702*cdf0e10cSrcweir 3703*cdf0e10cSrcweir { 3704*cdf0e10cSrcweir SetUnit(FieldUnit(pMenu->GetCurItemId())); 3705*cdf0e10cSrcweir return 0; 3706*cdf0e10cSrcweir } 3707*cdf0e10cSrcweir IMPL_LINK_INLINE_END( SvxRuler, MenuSelect, Menu *, pMenu ) 3708*cdf0e10cSrcweir 3709*cdf0e10cSrcweir 3710*cdf0e10cSrcweir IMPL_LINK( SvxRuler, TabMenuSelect, Menu *, pMenu ) 3711*cdf0e10cSrcweir 3712*cdf0e10cSrcweir /* 3713*cdf0e10cSrcweir [Beschreibung] 3714*cdf0e10cSrcweir 3715*cdf0e10cSrcweir Handler des Tabulatormenues fuer das Setzen des Typs 3716*cdf0e10cSrcweir 3717*cdf0e10cSrcweir */ 3718*cdf0e10cSrcweir 3719*cdf0e10cSrcweir { 3720*cdf0e10cSrcweir if(pTabStopItem && pTabStopItem->Count() > pRuler_Imp->nIdx) 3721*cdf0e10cSrcweir { 3722*cdf0e10cSrcweir SvxTabStop aTabStop = (*pTabStopItem)[pRuler_Imp->nIdx]; 3723*cdf0e10cSrcweir aTabStop.GetAdjustment() = ToAttrTab_Impl(pMenu->GetCurItemId()-1); 3724*cdf0e10cSrcweir pTabStopItem->Remove(pRuler_Imp->nIdx); 3725*cdf0e10cSrcweir pTabStopItem->Insert(aTabStop); 3726*cdf0e10cSrcweir sal_uInt16 nTabStopId = bHorz ? SID_ATTR_TABSTOP : SID_ATTR_TABSTOP_VERTICAL; 3727*cdf0e10cSrcweir pBindings->GetDispatcher()->Execute( nTabStopId, SFX_CALLMODE_RECORD, pTabStopItem, 0L ); 3728*cdf0e10cSrcweir UpdateTabs(); 3729*cdf0e10cSrcweir pRuler_Imp->nIdx = 0; 3730*cdf0e10cSrcweir } 3731*cdf0e10cSrcweir return 0; 3732*cdf0e10cSrcweir } 3733*cdf0e10cSrcweir 3734*cdf0e10cSrcweir 3735*cdf0e10cSrcweir void SvxRuler::Command( const CommandEvent& rCEvt ) 3736*cdf0e10cSrcweir 3737*cdf0e10cSrcweir /* 3738*cdf0e10cSrcweir [Beschreibung] 3739*cdf0e10cSrcweir 3740*cdf0e10cSrcweir Mauskontextmenue fuer das Umschalten der Masseinheit 3741*cdf0e10cSrcweir 3742*cdf0e10cSrcweir */ 3743*cdf0e10cSrcweir 3744*cdf0e10cSrcweir { 3745*cdf0e10cSrcweir if ( COMMAND_CONTEXTMENU == rCEvt.GetCommand() ) 3746*cdf0e10cSrcweir { 3747*cdf0e10cSrcweir CancelDrag(); 3748*cdf0e10cSrcweir sal_Bool bRTL = pRuler_Imp->pTextRTLItem && pRuler_Imp->pTextRTLItem->GetValue(); 3749*cdf0e10cSrcweir if ( pTabs && 3750*cdf0e10cSrcweir RULER_TYPE_TAB == 3751*cdf0e10cSrcweir GetType( rCEvt.GetMousePosPixel(), &pRuler_Imp->nIdx ) && 3752*cdf0e10cSrcweir pTabs[pRuler_Imp->nIdx+TAB_GAP].nStyle < RULER_TAB_DEFAULT ) 3753*cdf0e10cSrcweir { 3754*cdf0e10cSrcweir PopupMenu aMenu; 3755*cdf0e10cSrcweir aMenu.SetSelectHdl(LINK(this, SvxRuler, TabMenuSelect)); 3756*cdf0e10cSrcweir VirtualDevice aDev; 3757*cdf0e10cSrcweir const Size aSz(RULER_TAB_WIDTH+2, RULER_TAB_HEIGHT+2); 3758*cdf0e10cSrcweir aDev.SetOutputSize(aSz); 3759*cdf0e10cSrcweir aDev.SetBackground(Wallpaper(Color(COL_WHITE))); 3760*cdf0e10cSrcweir const Point aPt(aSz.Width() / 2, aSz.Height() / 2); 3761*cdf0e10cSrcweir 3762*cdf0e10cSrcweir for ( sal_uInt16 i = RULER_TAB_LEFT; i < RULER_TAB_DEFAULT; ++i ) 3763*cdf0e10cSrcweir { 3764*cdf0e10cSrcweir sal_uInt16 nStyle = bRTL ? i|RULER_TAB_RTL : i; 3765*cdf0e10cSrcweir nStyle |= (sal_uInt16)(bHorz ? WB_HORZ : WB_VERT); 3766*cdf0e10cSrcweir DrawTab(&aDev, aPt, nStyle); 3767*cdf0e10cSrcweir aMenu.InsertItem(i+1, 3768*cdf0e10cSrcweir String(ResId(RID_SVXSTR_RULER_START+i, DIALOG_MGR())), 3769*cdf0e10cSrcweir Image(aDev.GetBitmap(Point(), aSz), Color(COL_WHITE))); 3770*cdf0e10cSrcweir aMenu.CheckItem(i+1, i == pTabs[pRuler_Imp->nIdx+TAB_GAP].nStyle); 3771*cdf0e10cSrcweir aDev.SetOutputSize(aSz); // device loeschen 3772*cdf0e10cSrcweir } 3773*cdf0e10cSrcweir aMenu.Execute( this, rCEvt.GetMousePosPixel() ); 3774*cdf0e10cSrcweir } 3775*cdf0e10cSrcweir else 3776*cdf0e10cSrcweir { 3777*cdf0e10cSrcweir PopupMenu aMenu(ResId(RID_SVXMN_RULER, DIALOG_MGR())); 3778*cdf0e10cSrcweir aMenu.SetSelectHdl(LINK(this, SvxRuler, MenuSelect)); 3779*cdf0e10cSrcweir FieldUnit eUnit = GetUnit(); 3780*cdf0e10cSrcweir const sal_uInt16 nCount = aMenu.GetItemCount(); 3781*cdf0e10cSrcweir 3782*cdf0e10cSrcweir sal_Bool bReduceMetric = 0 != (nFlags &SVXRULER_SUPPORT_REDUCED_METRIC); 3783*cdf0e10cSrcweir for ( sal_uInt16 i = nCount; i; --i ) 3784*cdf0e10cSrcweir { 3785*cdf0e10cSrcweir const sal_uInt16 nId = aMenu.GetItemId(i - 1); 3786*cdf0e10cSrcweir aMenu.CheckItem(nId, nId == (sal_uInt16)eUnit); 3787*cdf0e10cSrcweir if(bReduceMetric && 3788*cdf0e10cSrcweir (nId == FUNIT_M || 3789*cdf0e10cSrcweir nId == FUNIT_KM || 3790*cdf0e10cSrcweir nId == FUNIT_FOOT || 3791*cdf0e10cSrcweir nId == FUNIT_MILE )) 3792*cdf0e10cSrcweir aMenu.RemoveItem(i - 1); 3793*cdf0e10cSrcweir } 3794*cdf0e10cSrcweir aMenu.Execute( this, rCEvt.GetMousePosPixel() ); 3795*cdf0e10cSrcweir } 3796*cdf0e10cSrcweir } 3797*cdf0e10cSrcweir else 3798*cdf0e10cSrcweir Ruler::Command( rCEvt ); 3799*cdf0e10cSrcweir } 3800*cdf0e10cSrcweir 3801*cdf0e10cSrcweir 3802*cdf0e10cSrcweir sal_uInt16 SvxRuler::GetActRightColumn( 3803*cdf0e10cSrcweir sal_Bool bForceDontConsiderHidden, sal_uInt16 nAct ) const 3804*cdf0e10cSrcweir { 3805*cdf0e10cSrcweir if( nAct == USHRT_MAX ) 3806*cdf0e10cSrcweir nAct = pColumnItem->GetActColumn(); 3807*cdf0e10cSrcweir else nAct++; //Damit man die ActDrag uebergeben kann 3808*cdf0e10cSrcweir 3809*cdf0e10cSrcweir sal_Bool bConsiderHidden = !bForceDontConsiderHidden && 3810*cdf0e10cSrcweir !( nDragType & DRAG_OBJECT_ACTLINE_ONLY ); 3811*cdf0e10cSrcweir 3812*cdf0e10cSrcweir while( nAct < pColumnItem->Count() - 1 ) 3813*cdf0e10cSrcweir { 3814*cdf0e10cSrcweir if( (*pColumnItem)[nAct].bVisible || bConsiderHidden ) 3815*cdf0e10cSrcweir return nAct; 3816*cdf0e10cSrcweir else 3817*cdf0e10cSrcweir nAct++; 3818*cdf0e10cSrcweir } 3819*cdf0e10cSrcweir return USHRT_MAX; 3820*cdf0e10cSrcweir } 3821*cdf0e10cSrcweir 3822*cdf0e10cSrcweir 3823*cdf0e10cSrcweir 3824*cdf0e10cSrcweir sal_uInt16 SvxRuler::GetActLeftColumn( 3825*cdf0e10cSrcweir sal_Bool bForceDontConsiderHidden, sal_uInt16 nAct ) const 3826*cdf0e10cSrcweir { 3827*cdf0e10cSrcweir if(nAct==USHRT_MAX) 3828*cdf0e10cSrcweir nAct=pColumnItem->GetActColumn(); 3829*cdf0e10cSrcweir 3830*cdf0e10cSrcweir sal_uInt16 nLOffs=1; 3831*cdf0e10cSrcweir 3832*cdf0e10cSrcweir sal_Bool bConsiderHidden = !bForceDontConsiderHidden && 3833*cdf0e10cSrcweir !( nDragType & DRAG_OBJECT_ACTLINE_ONLY ); 3834*cdf0e10cSrcweir 3835*cdf0e10cSrcweir while(nAct>=nLOffs) 3836*cdf0e10cSrcweir { 3837*cdf0e10cSrcweir if( (*pColumnItem)[ nAct - nLOffs ].bVisible || bConsiderHidden ) 3838*cdf0e10cSrcweir return nAct-nLOffs; 3839*cdf0e10cSrcweir else 3840*cdf0e10cSrcweir nLOffs++; 3841*cdf0e10cSrcweir } 3842*cdf0e10cSrcweir return USHRT_MAX; 3843*cdf0e10cSrcweir } 3844*cdf0e10cSrcweir 3845*cdf0e10cSrcweir 3846*cdf0e10cSrcweir sal_Bool SvxRuler::IsActLastColumn( 3847*cdf0e10cSrcweir sal_Bool bForceDontConsiderHidden, sal_uInt16 nAct) const 3848*cdf0e10cSrcweir { 3849*cdf0e10cSrcweir return GetActRightColumn(bForceDontConsiderHidden, nAct)==USHRT_MAX; 3850*cdf0e10cSrcweir } 3851*cdf0e10cSrcweir 3852*cdf0e10cSrcweir sal_Bool SvxRuler::IsActFirstColumn( 3853*cdf0e10cSrcweir sal_Bool bForceDontConsiderHidden, sal_uInt16 nAct) const 3854*cdf0e10cSrcweir { 3855*cdf0e10cSrcweir return GetActLeftColumn(bForceDontConsiderHidden, nAct)==USHRT_MAX; 3856*cdf0e10cSrcweir } 3857*cdf0e10cSrcweir 3858*cdf0e10cSrcweir long SvxRuler::CalcPropMaxRight(sal_uInt16 nCol) const 3859*cdf0e10cSrcweir { 3860*cdf0e10cSrcweir 3861*cdf0e10cSrcweir if(!(nDragType & DRAG_OBJECT_SIZE_LINEAR)) 3862*cdf0e10cSrcweir { 3863*cdf0e10cSrcweir 3864*cdf0e10cSrcweir // ausgehend vom rechten Rand die Mindestbreiten 3865*cdf0e10cSrcweir // aller betroffenen Spalten abziehen 3866*cdf0e10cSrcweir long _nMaxRight = GetMargin2()-GetMargin1(); 3867*cdf0e10cSrcweir 3868*cdf0e10cSrcweir long lFences=0; 3869*cdf0e10cSrcweir long lMinSpace=USHRT_MAX; 3870*cdf0e10cSrcweir long lOldPos; 3871*cdf0e10cSrcweir long lColumns=0; 3872*cdf0e10cSrcweir sal_uInt16 nStart; 3873*cdf0e10cSrcweir if(!pColumnItem->IsTable()) 3874*cdf0e10cSrcweir { 3875*cdf0e10cSrcweir if(nCol==USHRT_MAX) 3876*cdf0e10cSrcweir { 3877*cdf0e10cSrcweir lOldPos=GetMargin1(); 3878*cdf0e10cSrcweir nStart=0; 3879*cdf0e10cSrcweir } 3880*cdf0e10cSrcweir else 3881*cdf0e10cSrcweir { 3882*cdf0e10cSrcweir lOldPos=pBorders[nCol].nPos+pBorders[nCol].nWidth; 3883*cdf0e10cSrcweir nStart=nCol+1; 3884*cdf0e10cSrcweir lFences=pBorders[nCol].nWidth; 3885*cdf0e10cSrcweir } 3886*cdf0e10cSrcweir 3887*cdf0e10cSrcweir for(sal_uInt16 i = nStart; i < nBorderCount-1; ++i) 3888*cdf0e10cSrcweir { 3889*cdf0e10cSrcweir long lWidth=pBorders[i].nPos-lOldPos; 3890*cdf0e10cSrcweir lColumns+=lWidth; 3891*cdf0e10cSrcweir if(lWidth<lMinSpace) 3892*cdf0e10cSrcweir lMinSpace=lWidth; 3893*cdf0e10cSrcweir lOldPos=pBorders[i].nPos+pBorders[i].nWidth; 3894*cdf0e10cSrcweir lFences+=pBorders[i].nWidth; 3895*cdf0e10cSrcweir } 3896*cdf0e10cSrcweir long lWidth=GetMargin2()-lOldPos; 3897*cdf0e10cSrcweir lColumns+=lWidth; 3898*cdf0e10cSrcweir if(lWidth<lMinSpace) 3899*cdf0e10cSrcweir lMinSpace=lWidth; 3900*cdf0e10cSrcweir } 3901*cdf0e10cSrcweir else 3902*cdf0e10cSrcweir { 3903*cdf0e10cSrcweir sal_uInt16 nActCol; 3904*cdf0e10cSrcweir if(nCol==USHRT_MAX) //CalcMinMax fuer LeftMargin 3905*cdf0e10cSrcweir { 3906*cdf0e10cSrcweir lOldPos=GetMargin1(); 3907*cdf0e10cSrcweir } 3908*cdf0e10cSrcweir else 3909*cdf0e10cSrcweir { 3910*cdf0e10cSrcweir lOldPos=pBorders[nCol].nPos; 3911*cdf0e10cSrcweir } 3912*cdf0e10cSrcweir lColumns=GetMargin2()-lOldPos; 3913*cdf0e10cSrcweir nActCol=nCol; 3914*cdf0e10cSrcweir lFences=0; 3915*cdf0e10cSrcweir while(nActCol<nBorderCount||nActCol==USHRT_MAX) 3916*cdf0e10cSrcweir { 3917*cdf0e10cSrcweir sal_uInt16 nRight; 3918*cdf0e10cSrcweir if(nActCol==USHRT_MAX) 3919*cdf0e10cSrcweir { 3920*cdf0e10cSrcweir nRight=0; 3921*cdf0e10cSrcweir while(!(*pColumnItem)[nRight].bVisible) 3922*cdf0e10cSrcweir nRight++; 3923*cdf0e10cSrcweir } 3924*cdf0e10cSrcweir else 3925*cdf0e10cSrcweir nRight=GetActRightColumn(sal_False, nActCol); 3926*cdf0e10cSrcweir long lWidth; 3927*cdf0e10cSrcweir if(nRight!=USHRT_MAX) 3928*cdf0e10cSrcweir { 3929*cdf0e10cSrcweir lWidth=pBorders[nRight].nPos-lOldPos; 3930*cdf0e10cSrcweir lOldPos=pBorders[nRight].nPos; 3931*cdf0e10cSrcweir } 3932*cdf0e10cSrcweir else 3933*cdf0e10cSrcweir lWidth=GetMargin2()-lOldPos; 3934*cdf0e10cSrcweir nActCol=nRight; 3935*cdf0e10cSrcweir if(lWidth<lMinSpace) 3936*cdf0e10cSrcweir lMinSpace=lWidth; 3937*cdf0e10cSrcweir if(nActCol==USHRT_MAX) 3938*cdf0e10cSrcweir break; 3939*cdf0e10cSrcweir } 3940*cdf0e10cSrcweir } 3941*cdf0e10cSrcweir 3942*cdf0e10cSrcweir _nMaxRight-=(long)(lFences+lMinFrame/(float)lMinSpace*lColumns); 3943*cdf0e10cSrcweir return _nMaxRight; 3944*cdf0e10cSrcweir } 3945*cdf0e10cSrcweir else 3946*cdf0e10cSrcweir { 3947*cdf0e10cSrcweir if(pColumnItem->IsTable()) 3948*cdf0e10cSrcweir { 3949*cdf0e10cSrcweir sal_uInt16 nVisCols=0; 3950*cdf0e10cSrcweir for(sal_uInt16 i=GetActRightColumn(sal_False, nCol);i<nBorderCount;) 3951*cdf0e10cSrcweir { 3952*cdf0e10cSrcweir if((*pColumnItem)[i].bVisible) 3953*cdf0e10cSrcweir nVisCols++; 3954*cdf0e10cSrcweir i=GetActRightColumn(sal_False, i); 3955*cdf0e10cSrcweir } 3956*cdf0e10cSrcweir return GetMargin2()-GetMargin1()-(nVisCols+1)*lMinFrame; 3957*cdf0e10cSrcweir } 3958*cdf0e10cSrcweir else 3959*cdf0e10cSrcweir { 3960*cdf0e10cSrcweir long lWidth=0; 3961*cdf0e10cSrcweir for(sal_uInt16 i=nCol;i<nBorderCount-1;i++) 3962*cdf0e10cSrcweir { 3963*cdf0e10cSrcweir lWidth+=lMinFrame+pBorders[i].nWidth; 3964*cdf0e10cSrcweir } 3965*cdf0e10cSrcweir return GetMargin2()-GetMargin1()-lWidth; 3966*cdf0e10cSrcweir } 3967*cdf0e10cSrcweir } 3968*cdf0e10cSrcweir } 3969*cdf0e10cSrcweir /*-- 29.11.2007 08:24:23--------------------------------------------------- 3970*cdf0e10cSrcweir //#i24363# tab stops relative to indent 3971*cdf0e10cSrcweir -----------------------------------------------------------------------*/ 3972*cdf0e10cSrcweir void SvxRuler::SetTabsRelativeToIndent( sal_Bool bRel ) 3973*cdf0e10cSrcweir { 3974*cdf0e10cSrcweir pRuler_Imp->bIsTabsRelativeToIndent = bRel; 3975*cdf0e10cSrcweir } 3976*cdf0e10cSrcweir 3977