summaryrefslogtreecommitdiff
path: root/svx/inc/svx/ruler.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/inc/svx/ruler.hxx')
-rw-r--r--svx/inc/svx/ruler.hxx270
1 files changed, 270 insertions, 0 deletions
diff --git a/svx/inc/svx/ruler.hxx b/svx/inc/svx/ruler.hxx
new file mode 100644
index 000000000000..d27f3a079495
--- /dev/null
+++ b/svx/inc/svx/ruler.hxx
@@ -0,0 +1,270 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#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; //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;
+ BOOL bAppSetNullOffset :1;
+ BOOL bHorz :1;
+ long lLogicNullOffset; // in logischen Koordinaten
+ long lAppNullOffset; // in logischen Koordinaten
+ long lMinFrame; // minimale Framebreite in Pixel
+ long lInitialDragPos;
+ USHORT 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;
+ USHORT nDefTabType;
+ USHORT nTabCount;
+ USHORT nTabBufSize;
+ long lDefTabDist;
+ long lTabPos;
+ RulerTab *pTabs; // Tabpositionen in Pixel
+ RulerIndent *pIndents; // Absatzraender in Pixel
+ RulerBorder *pBorders;
+ USHORT nBorderCount;
+ RulerBorder *pObjectBorders;
+ SfxBindings *pBindings;
+ long nDragOffset;
+ long nMaxLeft;
+ long nMaxRight;
+ BOOL bValid;
+ BOOL bListening;
+ BOOL bActive;
+//#if 0 // _SOLAR__PRIVATE
+ void StartListening_Impl();
+ long GetCorrectedDragPos( BOOL bLeft = TRUE, BOOL bRight = TRUE );
+ void DrawLine_Impl(long &lTabPos, int, BOOL Hori=TRUE);
+ USHORT GetObjectBordersOff(USHORT 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 *, USHORT 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);
+
+ USHORT GetNextVisible(USHORT nColumn);
+ USHORT GetPrevVisible(USHORT 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 BOOL CalcLimits(long &nMax1, long &nMax2, BOOL bFirst) const;
+ BOOL IsActLastColumn(
+ BOOL bForceDontConsiderHidden = FALSE, USHORT nAct=USHRT_MAX) const ;
+ BOOL IsActFirstColumn(
+ BOOL bForceDontConsiderHidden = FALSE, USHORT nAct=USHRT_MAX) const;
+ USHORT GetActLeftColumn(
+ BOOL bForceDontConsiderHidden = FALSE, USHORT nAct=USHRT_MAX ) const;
+ USHORT GetActRightColumn (
+ BOOL bForceDontConsiderHidden = FALSE, USHORT nAct=USHRT_MAX ) const;
+ long CalcPropMaxRight(USHORT 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,
+ USHORT nRulerFlags,
+ SfxBindings &rBindings,
+ WinBits nWinStyle = WB_STDRULER);
+ ~SvxRuler();
+
+ void SetMinFrameSize(long lSize);
+ long GetMinFrameSize() const ;
+
+ USHORT 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(BOOL bOn = TRUE);
+ BOOL IsActive() const { return bActive; }
+
+ void ForceUpdate() { Update(); }
+
+ //#i24363# tab stops relative to indent
+ void SetTabsRelativeToIndent( BOOL bRel = TRUE );
+};
+
+#endif
+