blob: 53a8005dd30aa01129fe1c5b90e6c1864adf8493 [file] [log] [blame]
/**************************************************************
*
* 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_LRSPITEM_HXX
#define _SVX_LRSPITEM_HXX
// include ---------------------------------------------------------------
#include <svl/poolitem.hxx>
#include <editeng/editengdllapi.h>
namespace rtl
{
class OUString;
}
// class SvxLRSpaceItem --------------------------------------------------
/*
[Beschreibung]
Linker/Rechter Rand sowie Erstzeileneinzug
SvxLRSpaceItem bietet zwei Schnittstellen zur Befragung des linken
Randes und des Erstzeileneinzuges an. Die Get-Methoden liefern
die Member zurueck, wie sie das Layout bisher auch erwartete:
Der linke Rand verschiebt sich beim negativem Erstzeileneinzug
nach links. Die SetTxt/GetTxt-Methoden setzen voraus, dass der
linke Rand der 0-Punkt des Erstzeileneinzugs darstellt:
UI UI LAYOUT UI/TEXT UI/TEXT (Wo?)
SetTxtLeft SetTxtFirst GetLeft GetTxtLeft GetTxtFirst (Was?)
500 -500 0 500 -500 (Wieviel?)
500 0 500 500 0
500 +500 500 500 +500
700 -500 200 700 -500
*/
#define LRSPACE_16_VERSION ((sal_uInt16)0x0001)
#define LRSPACE_TXTLEFT_VERSION ((sal_uInt16)0x0002)
#define LRSPACE_AUTOFIRST_VERSION ((sal_uInt16)0x0003)
#define LRSPACE_NEGATIVE_VERSION ((sal_uInt16)0x0004)
class EDITENG_DLLPUBLIC SvxLRSpaceItem : public SfxPoolItem
{
short nFirstLineOfst; // Erstzeileneinzug _immer_ relativ zu nTxtLeft
long nTxtLeft; // wir spendieren einen sal_uInt16
long nLeftMargin; // nLeft oder der neg. Erstzeileneinzug
long nRightMargin; // der unproblematische rechte Rand
sal_uInt16 nPropFirstLineOfst, nPropLeftMargin, nPropRightMargin;
sal_Bool bAutoFirst : 1; // Automatische Berechnung der Erstzeileneinzugs
void AdjustLeft(); // nLeftMargin und nTxtLeft werden angepasst.
public:
TYPEINFO();
SvxLRSpaceItem( const sal_uInt16 nId );
SvxLRSpaceItem( const long nLeft, const long nRight,
const long nTLeft /*= 0*/, const short nOfset /*= 0*/,
const sal_uInt16 nId );
inline SvxLRSpaceItem& operator=( const SvxLRSpaceItem &rCpy );
// "pure virtual Methoden" vom SfxPoolItem
virtual int operator==( const SfxPoolItem& ) const;
virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const;
virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 );
virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres,
SfxMapUnit eCoreMetric,
SfxMapUnit ePresMetric,
String &rText, const IntlWrapper * = 0 ) const;
virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const;
virtual SfxPoolItem* Create(SvStream &, sal_uInt16) const;
virtual SvStream& Store(SvStream &, sal_uInt16 nItemVersion ) const;
virtual sal_uInt16 GetVersion( sal_uInt16 nFileVersion ) const;
virtual int ScaleMetrics( long nMult, long nDiv );
virtual int HasMetrics() const;
// Die "Layout-Schnittstelle":
inline void SetLeft ( const long nL, const sal_uInt16 nProp = 100 );
inline void SetRight( const long nR, const sal_uInt16 nProp = 100 );
// abfragen / direktes setzen der absoluten Werte
inline long GetLeft() const { return nLeftMargin; }
inline long GetRight() const { return nRightMargin;}
inline void SetLeftValue( const long nL ) { nTxtLeft = nLeftMargin = nL; }
inline void SetRightValue( const long nR ) { nRightMargin = nR; }
inline sal_Bool IsAutoFirst() const { return bAutoFirst; }
inline void SetAutoFirst( const sal_Bool bNew ) { bAutoFirst = bNew; }
// abfragen / setzen der Prozent-Werte
inline void SetPropLeft( const sal_uInt16 nProp = 100 )
{ nPropLeftMargin = nProp; }
inline void SetPropRight( const sal_uInt16 nProp = 100 )
{ nPropRightMargin = nProp;}
inline sal_uInt16 GetPropLeft() const { return nPropLeftMargin; }
inline sal_uInt16 GetPropRight() const { return nPropRightMargin;}
// Die "UI/Text-Schnittstelle":
inline void SetTxtLeft( const long nL, const sal_uInt16 nProp = 100 );
inline long GetTxtLeft() const { return nTxtLeft; }
inline void SetTxtFirstLineOfst( const short nF, const sal_uInt16 nProp = 100 );
inline short GetTxtFirstLineOfst() const { return nFirstLineOfst; }
inline void SetPropTxtFirstLineOfst( const sal_uInt16 nProp = 100 )
{ nPropFirstLineOfst = nProp; }
inline sal_uInt16 GetPropTxtFirstLineOfst() const
{ return nPropFirstLineOfst; }
inline void SetTxtFirstLineOfstValue( const short nValue )
{ nFirstLineOfst = nValue; }
};
inline SvxLRSpaceItem &SvxLRSpaceItem::operator=( const SvxLRSpaceItem &rCpy )
{
nFirstLineOfst = rCpy.nFirstLineOfst;
nTxtLeft = rCpy.nTxtLeft;
nLeftMargin = rCpy.nLeftMargin;
nRightMargin = rCpy.nRightMargin;
nPropFirstLineOfst = rCpy.nPropFirstLineOfst;
nPropLeftMargin = rCpy.nPropLeftMargin;
nPropRightMargin = rCpy.nPropRightMargin;
bAutoFirst = rCpy.bAutoFirst;
return *this;
}
inline void SvxLRSpaceItem::SetLeft( const long nL, const sal_uInt16 nProp )
{
nLeftMargin = (nL * nProp) / 100;
nTxtLeft = nLeftMargin;
nPropLeftMargin = nProp;
}
inline void SvxLRSpaceItem::SetRight( const long nR, const sal_uInt16 nProp )
{
nRightMargin = (nR * nProp) / 100;
nPropRightMargin = nProp;
}
inline void SvxLRSpaceItem::SetTxtFirstLineOfst( const short nF,
const sal_uInt16 nProp )
{
nFirstLineOfst = short((long(nF) * nProp ) / 100);
nPropFirstLineOfst = nProp;
AdjustLeft();
}
inline void SvxLRSpaceItem::SetTxtLeft( const long nL, const sal_uInt16 nProp )
{
nTxtLeft = (nL * nProp) / 100;
nPropLeftMargin = nProp;
AdjustLeft();
}
#endif