diff options
Diffstat (limited to 'include/svx/ruler.hxx')
-rw-r--r-- | include/svx/ruler.hxx | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/include/svx/ruler.hxx b/include/svx/ruler.hxx new file mode 100644 index 000000000000..aa18893ec3cc --- /dev/null +++ b/include/svx/ruler.hxx @@ -0,0 +1,259 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +#ifndef _SVX_RULER_HXX +#define _SVX_RULER_HXX + +#include <vcl/menu.hxx> +#include <svtools/ruler.hxx> +#include <svl/lstner.hxx> +#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; // left and right edge + SfxRectangleItem *pMinMaxItem; // maxima for dragging + SvxLongULSpaceItem *pULSpaceItem; // upper and lower edge + SvxTabStopItem *pTabStopItem; // tab stops + SvxLRSpaceItem *pParaItem; // paragraphs + SvxLRSpaceItem *pParaBorderItem; // border distance + SvxPagePosSizeItem *pPagePosItem; // page distance to the rule + SvxColumnItem *pColumnItem; // columns + SvxObjectItem *pObjectItem; // object + Window *pEditWin; + SvxRuler_Impl *pRuler_Imp; + sal_Bool bAppSetNullOffset :1; + sal_Bool bHorz :1; + long lLogicNullOffset; // in logic coordinates + long lAppNullOffset; // in logic coordinates + long lMinFrame; // minimal frame width in pixels + long lInitialDragPos; + sal_uInt16 nFlags; + enum { + NONE = 0x0000, + DRAG_OBJECT = 0x0001, + // reduce size of the last column, shift + DRAG_OBJECT_SIZE_LINEAR = 0x0002, + DRAG_OBJECT_SIZE_PROPORTIONAL = 0x0004, // proportional, Ctrl + // only current line (table; Shift-Ctrl) + DRAG_OBJECT_ACTLINE_ONLY = 0x0008, + // currently same key assignment + 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; // tab positions in pixel + RulerIndent *pIndents; // paragraph margins 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; + 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; + + // page borders or surrounding frame + void UpdateFrame(const SvxLongLRSpaceItem *); + void UpdateFrame(const SvxLongULSpaceItem *); + void UpdateFrameMinMax(const SfxRectangleItem *); + // paragraph indentations + void UpdatePara(const SvxLRSpaceItem *); + // Border distance + void UpdateParaBorder(const SvxLRSpaceItem *); + // Tabs + void Update(const SvxTabStopItem *); + // page position and width + void Update(const SvxPagePosSizeItem *); + // columns + void Update(const SvxColumnItem *, sal_uInt16 nSID); + // object selection + void Update(const SvxObjectItem *); + // protect + void Update( const SvxProtectItem* ); + // left-to-right text + void UpdateTextRTL( const SfxBoolItem* ); + // paragraph indentations + 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 GetLeftIndent() const; + long GetRightIndent() const; + long GetLogicRightIndent() 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); + +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 ); + + virtual void Update(); + + // calculation of boundary values for object borders + // values refer to the page + 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; + long GetPageWidth() 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); + + // set/get NullOffset in logic units + 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 + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |