/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef _SVX_RULER_HXX #define _SVX_RULER_HXX #include #include #include #include "svx/svxdllapi.h" class SvxProtectItem; class SvxRulerItem; class SfxBindings; class SvxLongLRSpaceItem; class SvxLongULSpaceItem; class SvxTabStopItem; class SvxLRSpaceItem; class SvxPagePosSizeItem; class SvxColumnItem; class SfxRectangleItem; class SvxObjectItem; class SfxBoolItem; struct SvxRuler_Impl; class SVX_DLLPUBLIC SvxRuler: public Ruler, public SfxListener { friend class SvxRulerItem; using Window::Notify; SvxRulerItem **pCtrlItem; SvxLongLRSpaceItem *pLRSpaceItem; //Linker und Rechter Rand SfxRectangleItem *pMinMaxItem; //Maxima fuers Draggen SvxLongULSpaceItem *pULSpaceItem; //Oberer und Unterer Rand SvxTabStopItem *pTabStopItem; //Tabstops SvxLRSpaceItem *pParaItem; //Absaetze SvxLRSpaceItem *pParaBorderItem; //Border distance SvxPagePosSizeItem *pPagePosItem; //Seitenabstaende zum Lineal SvxColumnItem *pColumnItem; //Spalten SvxObjectItem *pObjectItem; //Objekt Window *pEditWin; SvxRuler_Impl *pRuler_Imp; sal_Bool bAppSetNullOffset :1; sal_Bool bHorz :1; long lLogicNullOffset; // in logischen Koordinaten long lAppNullOffset; // in logischen Koordinaten long lMinFrame; // minimale Framebreite in Pixel long lInitialDragPos; sal_uInt16 nFlags; enum { NONE = 0x0000, DRAG_OBJECT = 0x0001, // letzte Spalte verkleinern, Shift DRAG_OBJECT_SIZE_LINEAR = 0x0002, DRAG_OBJECT_SIZE_PROPORTIONAL = 0x0004, // proportional, Ctrl // nur aktuelle Zeile (Tabelle; Shift-Ctrl) DRAG_OBJECT_ACTLINE_ONLY = 0x0008, // aktuell gleiche Tastenbelegung DRAG_OBJECT_LEFT_INDENT_ONLY = DRAG_OBJECT_SIZE_PROPORTIONAL } nDragType; sal_uInt16 nDefTabType; sal_uInt16 nTabCount; sal_uInt16 nTabBufSize; long lDefTabDist; long lTabPos; RulerTab *pTabs; // Tabpositionen in Pixel RulerIndent *pIndents; // Absatzraender in Pixel RulerBorder *pBorders; sal_uInt16 nBorderCount; RulerBorder *pObjectBorders; SfxBindings *pBindings; long nDragOffset; long nMaxLeft; long nMaxRight; sal_Bool bValid; sal_Bool bListening; sal_Bool bActive; //#if 0 // _SOLAR__PRIVATE void StartListening_Impl(); long GetCorrectedDragPos( sal_Bool bLeft = sal_True, sal_Bool bRight = sal_True ); void DrawLine_Impl(long &lTabPos, int, sal_Bool Hori=sal_True); sal_uInt16 GetObjectBordersOff(sal_uInt16 nIdx) const; // Seitenr"ander oder umgebender Rahmen void UpdateFrame(const SvxLongLRSpaceItem *); void UpdateFrame(const SvxLongULSpaceItem *); void UpdateFrameMinMax(const SfxRectangleItem *); // Absatzeinzuege void UpdatePara(const SvxLRSpaceItem *); // Border distance void UpdateParaBorder(const SvxLRSpaceItem *); // Tabs void Update(const SvxTabStopItem *); // Seitenposition und -breite void Update(const SvxPagePosSizeItem *); // Spalten void Update(const SvxColumnItem *, sal_uInt16 nSID); // Object Selektion void Update(const SvxObjectItem *); // Protect void Update( const SvxProtectItem* ); // left-to-right text void UpdateTextRTL( const SfxBoolItem* ); // Absatzeinzuege void UpdatePara(); void UpdateTabs(); void UpdatePage(); void UpdateFrame(); void UpdateColumns(); void UpdateObject(); long PixelHAdjust(long lPos, long lPos2) const; long PixelVAdjust(long lPos, long lPos2) const; long PixelAdjust(long lPos, long lPos2) const; long ConvertHPosPixel(long lPos) const; long ConvertVPosPixel(long lPos) const; long ConvertHSizePixel(long lSize) const; long ConvertVSizePixel(long lSize) const; long ConvertPosPixel(long lPos) const; long ConvertSizePixel(long lSize) const; long ConvertHPosLogic(long lPos) const; long ConvertVPosLogic(long lPos) const; long ConvertHSizeLogic(long lSize) const; long ConvertVSizeLogic(long lSize) const; long ConvertPosLogic(long lPos) const; long ConvertSizeLogic(long lSize) const; long GetFirstLineIndent() const; // long GetLogicFirstLineIndent() const; long GetLeftIndent() const; // long GetLogicLeftIndent() const; long GetRightIndent() const; long GetLogicRightIndent() const; long GetPageWidth() const; inline long GetLeftFrameMargin() const; long GetRightFrameMargin() const; void CalcMinMax(); void EvalModifier(); void DragMargin1(); //adjust the left margin either after DragMargin1() or after DragBorders() void AdjustMargin1(long lDiff); void DragMargin2(); void DragIndents(); void DragTabs(); void DragBorders(); void DragObjectBorder(); void ApplyMargins(); void ApplyIndents(); void ApplyTabs(); void ApplyBorders(); void ApplyObject(); long GetFrameLeft() const; void SetFrameLeft(long); long GetLeftMin() const; long GetRightMax() const; DECL_LINK( TabMenuSelect, Menu * ); DECL_LINK( MenuSelect, Menu * ); void PrepareProportional_Impl(RulerType); sal_uInt16 GetNextVisible(sal_uInt16 nColumn); sal_uInt16 GetPrevVisible(sal_uInt16 nColumn); //#endif void Update(); enum UpdateType { MOVE_ALL, MOVE_LEFT, MOVE_RIGHT }; void UpdateParaContents_Impl(long lDiff, UpdateType = MOVE_ALL); protected: virtual void Command( const CommandEvent& rCEvt ); virtual void Click(); virtual long StartDrag(); virtual void Drag(); virtual void EndDrag(); virtual void ExtraDown(); virtual void MouseMove( const MouseEvent& rMEvt ); virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); // Berechnung der Grenzwerte fuer Objectgrenzen // Werte sind bezogen auf die Seite virtual sal_Bool CalcLimits(long &nMax1, long &nMax2, sal_Bool bFirst) const; sal_Bool IsActLastColumn( sal_Bool bForceDontConsiderHidden = sal_False, sal_uInt16 nAct=USHRT_MAX) const ; sal_Bool IsActFirstColumn( sal_Bool bForceDontConsiderHidden = sal_False, sal_uInt16 nAct=USHRT_MAX) const; sal_uInt16 GetActLeftColumn( sal_Bool bForceDontConsiderHidden = sal_False, sal_uInt16 nAct=USHRT_MAX ) const; sal_uInt16 GetActRightColumn ( sal_Bool bForceDontConsiderHidden = sal_False, sal_uInt16 nAct=USHRT_MAX ) const; long CalcPropMaxRight(sal_uInt16 nCol=USHRT_MAX) const; public: #define SVXRULER_SUPPORT_TABS 0x0001 #define SVXRULER_SUPPORT_PARAGRAPH_MARGINS 0x0002 #define SVXRULER_SUPPORT_BORDERS 0x0004 #define SVXRULER_SUPPORT_OBJECT 0x0008 #define SVXRULER_SUPPORT_SET_NULLOFFSET 0x0010 #define SVXRULER_SUPPORT_NEGATIVE_MARGINS 0x0020 #define SVXRULER_SUPPORT_PARAGRAPH_MARGINS_VERTICAL 0x0040 #define SVXRULER_SUPPORT_REDUCED_METRIC 0x0080 //shorten the context menu to select metric SvxRuler(Window* pParent, Window *pEditWin, sal_uInt16 nRulerFlags, SfxBindings &rBindings, WinBits nWinStyle = WB_STDRULER); ~SvxRuler(); void SetMinFrameSize(long lSize); long GetMinFrameSize() const ; sal_uInt16 GetRulerFlags() const { return nFlags; } void SetDefTabDist(long); long GetDefTabDist() const; // Setzen / Erfragen NullOffset in logischen Einheiten void SetNullOffsetLogic(long lOff = 0); long GetNullOffsetLogic() const { return lAppNullOffset; } void SetActive(sal_Bool bOn = sal_True); sal_Bool IsActive() const { return bActive; } void ForceUpdate() { Update(); } //#i24363# tab stops relative to indent void SetTabsRelativeToIndent( sal_Bool bRel = sal_True ); }; #endif