1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
19 #ifndef _SVX_LRSPITEM_HXX
20 #define _SVX_LRSPITEM_HXX
22 #include <svl/poolitem.hxx>
23 #include <editeng/editengdllapi.h>
26 // class SvxLRSpaceItem --------------------------------------------------
30 Left/Right margin and first line indent
32 SvxLRSpaceItem offers two interfaces for views from the left margin and
33 first line indent. The get methods return the member, with the layout also
34 as expected: the left edge shifts to the negative first line indent to the
35 left. The SetTxt/Gettxt methods assume that the left side represents the
36 0 coordinate for the first line indent:
38 UI UI LAYOUT UI/TEXT UI/TEXT (Where?)
39 SetTxtLeft SetTxtFirst GetLeft GetTxtLeft GetTxtFirst (What?)
40 500 -500 0 500 -500 (How much?)
46 #define LRSPACE_16_VERSION ((sal_uInt16)0x0001)
47 #define LRSPACE_TXTLEFT_VERSION ((sal_uInt16)0x0002)
48 #define LRSPACE_AUTOFIRST_VERSION ((sal_uInt16)0x0003)
49 #define LRSPACE_NEGATIVE_VERSION ((sal_uInt16)0x0004)
51 class EDITENG_DLLPUBLIC SvxLRSpaceItem
: public SfxPoolItem
53 short nFirstLineOfst
; // First-line indent _always_ relative to nTxtLeft
54 long nTxtLeft
; // We spend a sal_uInt16
55 long nLeftMargin
; // nLeft or the negative first-line indent
56 long nRightMargin
; // The unproblematic right edge
58 sal_uInt16 nPropFirstLineOfst
, nPropLeftMargin
, nPropRightMargin
;
59 sal_Bool bAutoFirst
: 1; // Automatic calculation of the first line indent
61 void AdjustLeft(); // nLeftMargin and nTxtLeft are being adjusted.
66 explicit SvxLRSpaceItem( const sal_uInt16 nId
);
67 SvxLRSpaceItem( const long nLeft
, const long nRight
,
68 const long nTLeft
/*= 0*/, const short nOfset
/*= 0*/,
69 const sal_uInt16 nId
);
70 inline SvxLRSpaceItem
& operator=( const SvxLRSpaceItem
&rCpy
);
72 // "pure virtual Methods" from SfxPoolItem
73 virtual int operator==( const SfxPoolItem
& ) const;
75 virtual bool QueryValue( com::sun::star::uno::Any
& rVal
, sal_uInt8 nMemberId
= 0 ) const;
76 virtual bool PutValue( const com::sun::star::uno::Any
& rVal
, sal_uInt8 nMemberId
= 0 );
78 virtual SfxItemPresentation
GetPresentation( SfxItemPresentation ePres
,
79 SfxMapUnit eCoreMetric
,
80 SfxMapUnit ePresMetric
,
81 OUString
&rText
, const IntlWrapper
* = 0 ) const;
83 virtual SfxPoolItem
* Clone( SfxItemPool
*pPool
= 0 ) const;
84 virtual SfxPoolItem
* Create(SvStream
&, sal_uInt16
) const;
85 virtual SvStream
& Store(SvStream
&, sal_uInt16 nItemVersion
) const;
86 virtual sal_uInt16
GetVersion( sal_uInt16 nFileVersion
) const;
87 virtual bool ScaleMetrics( long nMult
, long nDiv
);
88 virtual bool HasMetrics() const;
90 // Die "Layout-Schnittstelle":
91 inline void SetLeft ( const long nL
, const sal_uInt16 nProp
= 100 );
92 inline void SetRight( const long nR
, const sal_uInt16 nProp
= 100 );
94 // Query/direct setting of the absolute values
95 inline long GetLeft() const { return nLeftMargin
; }
96 inline long GetRight() const { return nRightMargin
;}
97 inline void SetLeftValue( const long nL
) { nTxtLeft
= nLeftMargin
= nL
; }
98 inline void SetRightValue( const long nR
) { nRightMargin
= nR
; }
99 inline sal_Bool
IsAutoFirst() const { return bAutoFirst
; }
100 inline void SetAutoFirst( const sal_Bool bNew
) { bAutoFirst
= bNew
; }
102 // Query/Setting the percentage values
103 inline void SetPropLeft( const sal_uInt16 nProp
= 100 )
104 { nPropLeftMargin
= nProp
; }
105 inline void SetPropRight( const sal_uInt16 nProp
= 100 )
106 { nPropRightMargin
= nProp
;}
107 inline sal_uInt16
GetPropLeft() const { return nPropLeftMargin
; }
108 inline sal_uInt16
GetPropRight() const { return nPropRightMargin
;}
110 // The UI/text interface:
111 inline void SetTxtLeft( const long nL
, const sal_uInt16 nProp
= 100 );
112 inline long GetTxtLeft() const { return nTxtLeft
; }
114 inline void SetTxtFirstLineOfst( const short nF
, const sal_uInt16 nProp
= 100 );
115 inline short GetTxtFirstLineOfst() const { return nFirstLineOfst
; }
116 inline void SetPropTxtFirstLineOfst( const sal_uInt16 nProp
= 100 )
117 { nPropFirstLineOfst
= nProp
; }
118 inline sal_uInt16
GetPropTxtFirstLineOfst() const
119 { return nPropFirstLineOfst
; }
120 inline void SetTxtFirstLineOfstValue( const short nValue
)
121 { nFirstLineOfst
= nValue
; }
124 inline SvxLRSpaceItem
&SvxLRSpaceItem::operator=( const SvxLRSpaceItem
&rCpy
)
126 nFirstLineOfst
= rCpy
.nFirstLineOfst
;
127 nTxtLeft
= rCpy
.nTxtLeft
;
128 nLeftMargin
= rCpy
.nLeftMargin
;
129 nRightMargin
= rCpy
.nRightMargin
;
130 nPropFirstLineOfst
= rCpy
.nPropFirstLineOfst
;
131 nPropLeftMargin
= rCpy
.nPropLeftMargin
;
132 nPropRightMargin
= rCpy
.nPropRightMargin
;
133 bAutoFirst
= rCpy
.bAutoFirst
;
137 inline void SvxLRSpaceItem::SetLeft( const long nL
, const sal_uInt16 nProp
)
139 nLeftMargin
= (nL
* nProp
) / 100;
140 nTxtLeft
= nLeftMargin
;
141 nPropLeftMargin
= nProp
;
143 inline void SvxLRSpaceItem::SetRight( const long nR
, const sal_uInt16 nProp
)
145 nRightMargin
= (nR
* nProp
) / 100;
146 nPropRightMargin
= nProp
;
148 inline void SvxLRSpaceItem::SetTxtFirstLineOfst( const short nF
,
149 const sal_uInt16 nProp
)
151 nFirstLineOfst
= short((long(nF
) * nProp
) / 100);
152 nPropFirstLineOfst
= nProp
;
156 inline void SvxLRSpaceItem::SetTxtLeft( const long nL
, const sal_uInt16 nProp
)
158 nTxtLeft
= (nL
* nProp
) / 100;
159 nPropLeftMargin
= nProp
;
165 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */