1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski #ifndef _SVX_RULER_HXX 24*b1cdbd2cSJim Jagielski #define _SVX_RULER_HXX 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #include <vcl/menu.hxx> 27*b1cdbd2cSJim Jagielski #include <svtools/ruler.hxx> 28*b1cdbd2cSJim Jagielski #include <svl/lstner.hxx> 29*b1cdbd2cSJim Jagielski #include "svx/svxdllapi.h" 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski class SvxProtectItem; 32*b1cdbd2cSJim Jagielski class SvxRulerItem; 33*b1cdbd2cSJim Jagielski class SfxBindings; 34*b1cdbd2cSJim Jagielski class SvxLongLRSpaceItem; 35*b1cdbd2cSJim Jagielski class SvxLongULSpaceItem; 36*b1cdbd2cSJim Jagielski class SvxTabStopItem; 37*b1cdbd2cSJim Jagielski class SvxLRSpaceItem; 38*b1cdbd2cSJim Jagielski class SvxPagePosSizeItem; 39*b1cdbd2cSJim Jagielski class SvxColumnItem; 40*b1cdbd2cSJim Jagielski class SfxRectangleItem; 41*b1cdbd2cSJim Jagielski class SvxObjectItem; 42*b1cdbd2cSJim Jagielski class SfxBoolItem; 43*b1cdbd2cSJim Jagielski struct SvxRuler_Impl; 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski class SVX_DLLPUBLIC SvxRuler: public Ruler, public SfxListener 46*b1cdbd2cSJim Jagielski { 47*b1cdbd2cSJim Jagielski friend class SvxRulerItem; 48*b1cdbd2cSJim Jagielski using Window::Notify; 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski SvxRulerItem **pCtrlItem; 51*b1cdbd2cSJim Jagielski SvxLongLRSpaceItem *pLRSpaceItem; //Linker und Rechter Rand 52*b1cdbd2cSJim Jagielski SfxRectangleItem *pMinMaxItem; //Maxima fuers Draggen 53*b1cdbd2cSJim Jagielski SvxLongULSpaceItem *pULSpaceItem; //Oberer und Unterer Rand 54*b1cdbd2cSJim Jagielski SvxTabStopItem *pTabStopItem; //Tabstops 55*b1cdbd2cSJim Jagielski SvxLRSpaceItem *pParaItem; //Absaetze 56*b1cdbd2cSJim Jagielski SvxLRSpaceItem *pParaBorderItem; //Border distance 57*b1cdbd2cSJim Jagielski SvxPagePosSizeItem *pPagePosItem; //Seitenabstaende zum Lineal 58*b1cdbd2cSJim Jagielski SvxColumnItem *pColumnItem; //Spalten 59*b1cdbd2cSJim Jagielski SvxObjectItem *pObjectItem; //Objekt 60*b1cdbd2cSJim Jagielski Window *pEditWin; 61*b1cdbd2cSJim Jagielski SvxRuler_Impl *pRuler_Imp; 62*b1cdbd2cSJim Jagielski sal_Bool bAppSetNullOffset :1; 63*b1cdbd2cSJim Jagielski sal_Bool bHorz :1; 64*b1cdbd2cSJim Jagielski long lLogicNullOffset; // in logischen Koordinaten 65*b1cdbd2cSJim Jagielski long lAppNullOffset; // in logischen Koordinaten 66*b1cdbd2cSJim Jagielski long lMinFrame; // minimale Framebreite in Pixel 67*b1cdbd2cSJim Jagielski long lInitialDragPos; 68*b1cdbd2cSJim Jagielski sal_uInt16 nFlags; 69*b1cdbd2cSJim Jagielski enum { 70*b1cdbd2cSJim Jagielski NONE = 0x0000, 71*b1cdbd2cSJim Jagielski DRAG_OBJECT = 0x0001, 72*b1cdbd2cSJim Jagielski // letzte Spalte verkleinern, Shift 73*b1cdbd2cSJim Jagielski DRAG_OBJECT_SIZE_LINEAR = 0x0002, 74*b1cdbd2cSJim Jagielski DRAG_OBJECT_SIZE_PROPORTIONAL = 0x0004, // proportional, Ctrl 75*b1cdbd2cSJim Jagielski // nur aktuelle Zeile (Tabelle; Shift-Ctrl) 76*b1cdbd2cSJim Jagielski DRAG_OBJECT_ACTLINE_ONLY = 0x0008, 77*b1cdbd2cSJim Jagielski // aktuell gleiche Tastenbelegung 78*b1cdbd2cSJim Jagielski DRAG_OBJECT_LEFT_INDENT_ONLY = DRAG_OBJECT_SIZE_PROPORTIONAL 79*b1cdbd2cSJim Jagielski } 80*b1cdbd2cSJim Jagielski nDragType; 81*b1cdbd2cSJim Jagielski sal_uInt16 nDefTabType; 82*b1cdbd2cSJim Jagielski sal_uInt16 nTabCount; 83*b1cdbd2cSJim Jagielski sal_uInt16 nTabBufSize; 84*b1cdbd2cSJim Jagielski long lDefTabDist; 85*b1cdbd2cSJim Jagielski long lTabPos; 86*b1cdbd2cSJim Jagielski RulerTab *pTabs; // Tabpositionen in Pixel 87*b1cdbd2cSJim Jagielski RulerIndent *pIndents; // Absatzraender in Pixel 88*b1cdbd2cSJim Jagielski RulerBorder *pBorders; 89*b1cdbd2cSJim Jagielski sal_uInt16 nBorderCount; 90*b1cdbd2cSJim Jagielski RulerBorder *pObjectBorders; 91*b1cdbd2cSJim Jagielski SfxBindings *pBindings; 92*b1cdbd2cSJim Jagielski long nDragOffset; 93*b1cdbd2cSJim Jagielski long nMaxLeft; 94*b1cdbd2cSJim Jagielski long nMaxRight; 95*b1cdbd2cSJim Jagielski sal_Bool bValid; 96*b1cdbd2cSJim Jagielski sal_Bool bListening; 97*b1cdbd2cSJim Jagielski sal_Bool bActive; 98*b1cdbd2cSJim Jagielski //#if 0 // _SOLAR__PRIVATE 99*b1cdbd2cSJim Jagielski void StartListening_Impl(); 100*b1cdbd2cSJim Jagielski long GetCorrectedDragPos( sal_Bool bLeft = sal_True, sal_Bool bRight = sal_True ); 101*b1cdbd2cSJim Jagielski void DrawLine_Impl(long &lTabPos, int, sal_Bool Hori=sal_True); 102*b1cdbd2cSJim Jagielski sal_uInt16 GetObjectBordersOff(sal_uInt16 nIdx) const; 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski // Seitenr"ander oder umgebender Rahmen 105*b1cdbd2cSJim Jagielski void UpdateFrame(const SvxLongLRSpaceItem *); 106*b1cdbd2cSJim Jagielski void UpdateFrame(const SvxLongULSpaceItem *); 107*b1cdbd2cSJim Jagielski void UpdateFrameMinMax(const SfxRectangleItem *); 108*b1cdbd2cSJim Jagielski // Absatzeinzuege 109*b1cdbd2cSJim Jagielski void UpdatePara(const SvxLRSpaceItem *); 110*b1cdbd2cSJim Jagielski // Border distance 111*b1cdbd2cSJim Jagielski void UpdateParaBorder(const SvxLRSpaceItem *); 112*b1cdbd2cSJim Jagielski // Tabs 113*b1cdbd2cSJim Jagielski void Update(const SvxTabStopItem *); 114*b1cdbd2cSJim Jagielski // Seitenposition und -breite 115*b1cdbd2cSJim Jagielski void Update(const SvxPagePosSizeItem *); 116*b1cdbd2cSJim Jagielski // Spalten 117*b1cdbd2cSJim Jagielski void Update(const SvxColumnItem *, sal_uInt16 nSID); 118*b1cdbd2cSJim Jagielski // Object Selektion 119*b1cdbd2cSJim Jagielski void Update(const SvxObjectItem *); 120*b1cdbd2cSJim Jagielski // Protect 121*b1cdbd2cSJim Jagielski void Update( const SvxProtectItem* ); 122*b1cdbd2cSJim Jagielski // left-to-right text 123*b1cdbd2cSJim Jagielski void UpdateTextRTL( const SfxBoolItem* ); 124*b1cdbd2cSJim Jagielski // Absatzeinzuege 125*b1cdbd2cSJim Jagielski void UpdatePara(); 126*b1cdbd2cSJim Jagielski void UpdateTabs(); 127*b1cdbd2cSJim Jagielski void UpdatePage(); 128*b1cdbd2cSJim Jagielski void UpdateFrame(); 129*b1cdbd2cSJim Jagielski void UpdateColumns(); 130*b1cdbd2cSJim Jagielski void UpdateObject(); 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski long PixelHAdjust(long lPos, long lPos2) const; 133*b1cdbd2cSJim Jagielski long PixelVAdjust(long lPos, long lPos2) const; 134*b1cdbd2cSJim Jagielski long PixelAdjust(long lPos, long lPos2) const; 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski long ConvertHPosPixel(long lPos) const; 137*b1cdbd2cSJim Jagielski long ConvertVPosPixel(long lPos) const; 138*b1cdbd2cSJim Jagielski long ConvertHSizePixel(long lSize) const; 139*b1cdbd2cSJim Jagielski long ConvertVSizePixel(long lSize) const; 140*b1cdbd2cSJim Jagielski 141*b1cdbd2cSJim Jagielski long ConvertPosPixel(long lPos) const; 142*b1cdbd2cSJim Jagielski long ConvertSizePixel(long lSize) const; 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski long ConvertHPosLogic(long lPos) const; 145*b1cdbd2cSJim Jagielski long ConvertVPosLogic(long lPos) const; 146*b1cdbd2cSJim Jagielski long ConvertHSizeLogic(long lSize) const; 147*b1cdbd2cSJim Jagielski long ConvertVSizeLogic(long lSize) const; 148*b1cdbd2cSJim Jagielski 149*b1cdbd2cSJim Jagielski long ConvertPosLogic(long lPos) const; 150*b1cdbd2cSJim Jagielski long ConvertSizeLogic(long lSize) const; 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski long GetFirstLineIndent() const; 153*b1cdbd2cSJim Jagielski // long GetLogicFirstLineIndent() const; 154*b1cdbd2cSJim Jagielski long GetLeftIndent() const; 155*b1cdbd2cSJim Jagielski // long GetLogicLeftIndent() const; 156*b1cdbd2cSJim Jagielski long GetRightIndent() const; 157*b1cdbd2cSJim Jagielski long GetLogicRightIndent() const; 158*b1cdbd2cSJim Jagielski long GetPageWidth() const; 159*b1cdbd2cSJim Jagielski 160*b1cdbd2cSJim Jagielski inline long GetLeftFrameMargin() const; 161*b1cdbd2cSJim Jagielski long GetRightFrameMargin() const; 162*b1cdbd2cSJim Jagielski 163*b1cdbd2cSJim Jagielski void CalcMinMax(); 164*b1cdbd2cSJim Jagielski 165*b1cdbd2cSJim Jagielski void EvalModifier(); 166*b1cdbd2cSJim Jagielski void DragMargin1(); 167*b1cdbd2cSJim Jagielski //adjust the left margin either after DragMargin1() or after DragBorders() 168*b1cdbd2cSJim Jagielski void AdjustMargin1(long lDiff); 169*b1cdbd2cSJim Jagielski void DragMargin2(); 170*b1cdbd2cSJim Jagielski void DragIndents(); 171*b1cdbd2cSJim Jagielski void DragTabs(); 172*b1cdbd2cSJim Jagielski void DragBorders(); 173*b1cdbd2cSJim Jagielski void DragObjectBorder(); 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski void ApplyMargins(); 176*b1cdbd2cSJim Jagielski void ApplyIndents(); 177*b1cdbd2cSJim Jagielski void ApplyTabs(); 178*b1cdbd2cSJim Jagielski void ApplyBorders(); 179*b1cdbd2cSJim Jagielski void ApplyObject(); 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski long GetFrameLeft() const; 182*b1cdbd2cSJim Jagielski void SetFrameLeft(long); 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski long GetLeftMin() const; 185*b1cdbd2cSJim Jagielski long GetRightMax() const; 186*b1cdbd2cSJim Jagielski 187*b1cdbd2cSJim Jagielski DECL_LINK( TabMenuSelect, Menu * ); 188*b1cdbd2cSJim Jagielski DECL_LINK( MenuSelect, Menu * ); 189*b1cdbd2cSJim Jagielski void PrepareProportional_Impl(RulerType); 190*b1cdbd2cSJim Jagielski 191*b1cdbd2cSJim Jagielski sal_uInt16 GetNextVisible(sal_uInt16 nColumn); 192*b1cdbd2cSJim Jagielski sal_uInt16 GetPrevVisible(sal_uInt16 nColumn); 193*b1cdbd2cSJim Jagielski //#endif 194*b1cdbd2cSJim Jagielski 195*b1cdbd2cSJim Jagielski void Update(); 196*b1cdbd2cSJim Jagielski 197*b1cdbd2cSJim Jagielski enum UpdateType { 198*b1cdbd2cSJim Jagielski MOVE_ALL, 199*b1cdbd2cSJim Jagielski MOVE_LEFT, 200*b1cdbd2cSJim Jagielski MOVE_RIGHT 201*b1cdbd2cSJim Jagielski }; 202*b1cdbd2cSJim Jagielski void UpdateParaContents_Impl(long lDiff, UpdateType = MOVE_ALL); 203*b1cdbd2cSJim Jagielski protected: 204*b1cdbd2cSJim Jagielski virtual void Command( const CommandEvent& rCEvt ); 205*b1cdbd2cSJim Jagielski virtual void Click(); 206*b1cdbd2cSJim Jagielski virtual long StartDrag(); 207*b1cdbd2cSJim Jagielski virtual void Drag(); 208*b1cdbd2cSJim Jagielski virtual void EndDrag(); 209*b1cdbd2cSJim Jagielski virtual void ExtraDown(); 210*b1cdbd2cSJim Jagielski virtual void MouseMove( const MouseEvent& rMEvt ); 211*b1cdbd2cSJim Jagielski 212*b1cdbd2cSJim Jagielski virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); 213*b1cdbd2cSJim Jagielski 214*b1cdbd2cSJim Jagielski // Berechnung der Grenzwerte fuer Objectgrenzen 215*b1cdbd2cSJim Jagielski // Werte sind bezogen auf die Seite 216*b1cdbd2cSJim Jagielski virtual sal_Bool CalcLimits(long &nMax1, long &nMax2, sal_Bool bFirst) const; 217*b1cdbd2cSJim Jagielski sal_Bool IsActLastColumn( 218*b1cdbd2cSJim Jagielski sal_Bool bForceDontConsiderHidden = sal_False, sal_uInt16 nAct=USHRT_MAX) const ; 219*b1cdbd2cSJim Jagielski sal_Bool IsActFirstColumn( 220*b1cdbd2cSJim Jagielski sal_Bool bForceDontConsiderHidden = sal_False, sal_uInt16 nAct=USHRT_MAX) const; 221*b1cdbd2cSJim Jagielski sal_uInt16 GetActLeftColumn( 222*b1cdbd2cSJim Jagielski sal_Bool bForceDontConsiderHidden = sal_False, sal_uInt16 nAct=USHRT_MAX ) const; 223*b1cdbd2cSJim Jagielski sal_uInt16 GetActRightColumn ( 224*b1cdbd2cSJim Jagielski sal_Bool bForceDontConsiderHidden = sal_False, sal_uInt16 nAct=USHRT_MAX ) const; 225*b1cdbd2cSJim Jagielski long CalcPropMaxRight(sal_uInt16 nCol=USHRT_MAX) const; 226*b1cdbd2cSJim Jagielski 227*b1cdbd2cSJim Jagielski public: 228*b1cdbd2cSJim Jagielski #define SVXRULER_SUPPORT_TABS 0x0001 229*b1cdbd2cSJim Jagielski #define SVXRULER_SUPPORT_PARAGRAPH_MARGINS 0x0002 230*b1cdbd2cSJim Jagielski #define SVXRULER_SUPPORT_BORDERS 0x0004 231*b1cdbd2cSJim Jagielski #define SVXRULER_SUPPORT_OBJECT 0x0008 232*b1cdbd2cSJim Jagielski #define SVXRULER_SUPPORT_SET_NULLOFFSET 0x0010 233*b1cdbd2cSJim Jagielski #define SVXRULER_SUPPORT_NEGATIVE_MARGINS 0x0020 234*b1cdbd2cSJim Jagielski #define SVXRULER_SUPPORT_PARAGRAPH_MARGINS_VERTICAL 0x0040 235*b1cdbd2cSJim Jagielski #define SVXRULER_SUPPORT_REDUCED_METRIC 0x0080 //shorten the context menu to select metric 236*b1cdbd2cSJim Jagielski 237*b1cdbd2cSJim Jagielski SvxRuler(Window* pParent, 238*b1cdbd2cSJim Jagielski Window *pEditWin, 239*b1cdbd2cSJim Jagielski sal_uInt16 nRulerFlags, 240*b1cdbd2cSJim Jagielski SfxBindings &rBindings, 241*b1cdbd2cSJim Jagielski WinBits nWinStyle = WB_STDRULER); 242*b1cdbd2cSJim Jagielski ~SvxRuler(); 243*b1cdbd2cSJim Jagielski 244*b1cdbd2cSJim Jagielski void SetMinFrameSize(long lSize); 245*b1cdbd2cSJim Jagielski long GetMinFrameSize() const ; 246*b1cdbd2cSJim Jagielski GetRulerFlags() const247*b1cdbd2cSJim Jagielski sal_uInt16 GetRulerFlags() const { return nFlags; } 248*b1cdbd2cSJim Jagielski 249*b1cdbd2cSJim Jagielski void SetDefTabDist(long); 250*b1cdbd2cSJim Jagielski long GetDefTabDist() const; 251*b1cdbd2cSJim Jagielski 252*b1cdbd2cSJim Jagielski // Setzen / Erfragen NullOffset in logischen Einheiten 253*b1cdbd2cSJim Jagielski void SetNullOffsetLogic(long lOff = 0); GetNullOffsetLogic() const254*b1cdbd2cSJim Jagielski long GetNullOffsetLogic() const { return lAppNullOffset; } 255*b1cdbd2cSJim Jagielski 256*b1cdbd2cSJim Jagielski void SetActive(sal_Bool bOn = sal_True); IsActive() const257*b1cdbd2cSJim Jagielski sal_Bool IsActive() const { return bActive; } 258*b1cdbd2cSJim Jagielski ForceUpdate()259*b1cdbd2cSJim Jagielski void ForceUpdate() { Update(); } 260*b1cdbd2cSJim Jagielski 261*b1cdbd2cSJim Jagielski //#i24363# tab stops relative to indent 262*b1cdbd2cSJim Jagielski void SetTabsRelativeToIndent( sal_Bool bRel = sal_True ); 263*b1cdbd2cSJim Jagielski }; 264*b1cdbd2cSJim Jagielski 265*b1cdbd2cSJim Jagielski #endif 266*b1cdbd2cSJim Jagielski 267