/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /************************************************************************* * * The Contents of this file are made available subject to the terms of * either of the following licenses * * - GNU Lesser General Public License Version 2.1 * - Sun Industry Standards Source License Version 1.1 * * Sun Microsystems Inc., October, 2000 * * GNU Lesser General Public License Version 2.1 * ============================================= * Copyright 2000 by Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, CA 94303, USA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software Foundation. * * This library 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 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * * * Sun Industry Standards Source License Version 1.1 * ================================================= * The contents of this file are subject to the Sun Industry Standards * Source License Version 1.1 (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.openoffice.org/license.html. * * Software provided under this License is provided on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. * See the License for the specific provisions governing your rights and * obligations concerning the Software. * * The Initial Developer of the Original Code is: IBM Corporation * * Copyright: 2008 by IBM Corporation * * All Rights Reserved. * * Contributor(s): _______________________________________ * * ************************************************************************/ /************************************************************************* * @file * For LWP filter architecture prototype ************************************************************************/ #ifndef INCLUDED_LOTUSWORDPRO_INC_LWPOVERRIDE_HXX #define INCLUDED_LOTUSWORDPRO_INC_LWPOVERRIDE_HXX #include "lwpobjid.hxx" #include "lwptools.hxx" #include #include class LwpObjectStream; enum STATE { STATE_OFF = 0, STATE_ON = 1, STATE_STYLE = 2 }; class LwpOverride { public: LwpOverride() : m_nValues(0), m_nOverride(0), m_nApply(0) {} virtual ~LwpOverride(){} virtual LwpOverride* clone() const = 0; virtual void Read(LwpObjectStream* pStrm) = 0; void ReadCommon(LwpObjectStream* pStrm); void Clear(); void Override(sal_uInt16 nBits, STATE eState); protected: explicit LwpOverride(LwpOverride const& rOther); private: LwpOverride& operator=(LwpOverride const& rOther) = delete; protected: sal_uInt16 m_nValues; sal_uInt16 m_nOverride; sal_uInt16 m_nApply; }; class LwpTextLanguageOverride final : public LwpOverride { public: LwpTextLanguageOverride() : m_nLanguage(0) {} virtual LwpTextLanguageOverride* clone() const override; void Read(LwpObjectStream* pStrm) override; private: LwpTextLanguageOverride(LwpTextLanguageOverride const& rOther); LwpTextLanguageOverride& operator=(LwpTextLanguageOverride const& rOther) = delete; sal_uInt16 m_nLanguage; }; class LwpTextAttributeOverride final : public LwpOverride { public: LwpTextAttributeOverride() : m_nHideLevels(0), m_nBaseLineOffset(0) {} virtual LwpTextAttributeOverride* clone() const override; void Read(LwpObjectStream* pStrm) override; inline sal_uInt16 GetHideLevels() const; bool IsHighlight() const; private: LwpTextAttributeOverride(LwpTextAttributeOverride const& rOther); LwpTextAttributeOverride& operator=(LwpTextAttributeOverride const& rOther) = delete; enum{ TAO_HIGHLIGHT = 0x08, }; sal_uInt16 m_nHideLevels; sal_uInt32 m_nBaseLineOffset; }; inline sal_uInt16 LwpTextAttributeOverride::GetHideLevels() const { return m_nHideLevels; } class LwpKinsokuOptsOverride final : public LwpOverride { public: LwpKinsokuOptsOverride() : m_nLevels(0) {} virtual LwpKinsokuOptsOverride* clone() const override; void Read(LwpObjectStream* pStrm) override; private: LwpKinsokuOptsOverride(LwpKinsokuOptsOverride const& rOther); LwpKinsokuOptsOverride& operator=(LwpKinsokuOptsOverride const& rOther) = delete; sal_uInt16 m_nLevels; }; class LwpBulletOverride final : public LwpOverride { public: LwpBulletOverride() {m_bIsNull = true;} virtual LwpBulletOverride* clone() const override; void Read(LwpObjectStream* pStrm) override; inline const LwpObjectID& GetSilverBullet() const; void Override(LwpBulletOverride* pOther); inline bool IsSilverBulletOverridden() const; inline bool IsSkipOverridden() const; inline bool IsRightAlignedOverridden() const; inline bool IsSkip() const; inline bool IsRightAligned() const; inline bool IsEditable() const; void OverrideSilverBullet(LwpObjectID aID); void OverrideSkip(bool bOver); void OverrideRightAligned(bool bOver); inline void RevertSilverBullet(); inline void RevertSkip(); inline void RevertRightAligned(); bool IsInValid() const {return m_bIsNull;} private: LwpBulletOverride(LwpBulletOverride const& rOther); LwpBulletOverride& operator=(LwpBulletOverride const& rOther) = delete; enum { BO_SILVERBULLET = 0x01, // 0x02 is free BO_RIGHTALIGN = 0x04, BO_EDITABLE = 0x08, BO_SKIP = 0x10 }; LwpObjectID m_SilverBullet; bool m_bIsNull; }; inline const LwpObjectID& LwpBulletOverride::GetSilverBullet() const { return m_SilverBullet; } inline bool LwpBulletOverride::IsSilverBulletOverridden() const { return ((m_nOverride & BO_SILVERBULLET) != 0); } inline bool LwpBulletOverride::IsSkipOverridden() const { return ((m_nOverride & BO_SKIP) != 0); } inline bool LwpBulletOverride::IsRightAlignedOverridden() const { return ((m_nOverride & BO_RIGHTALIGN) != 0); } inline bool LwpBulletOverride::IsSkip() const { return ((m_nValues & BO_SKIP) != 0); } inline bool LwpBulletOverride::IsEditable() const { return ((m_nValues & BO_EDITABLE) != 0); } inline bool LwpBulletOverride::IsRightAligned() const { return ((m_nValues & BO_RIGHTALIGN) != 0); } inline void LwpBulletOverride::RevertSilverBullet() { LwpOverride::Override(BO_SILVERBULLET, STATE_STYLE); } inline void LwpBulletOverride::RevertSkip() { LwpOverride::Override(BO_SKIP, STATE_STYLE); } inline void LwpBulletOverride::RevertRightAligned() { LwpOverride::Override(BO_RIGHTALIGN, STATE_STYLE); } class LwpAlignmentOverride final : public LwpOverride { public: LwpAlignmentOverride() : m_nAlignType(ALIGN_LEFT), m_nPosition(0), m_nAlignChar(0){} virtual LwpAlignmentOverride* clone() const override; void Read(LwpObjectStream* pStrm) override; enum AlignType { ALIGN_LEFT = 0, ALIGN_RIGHT = 1, ALIGN_CENTER = 2, ALIGN_JUSTIFY = 3, ALIGN_JUSTIFYALL = 4, ALIGN_NUMERICLEFT = 5, ALIGN_NUMERICRIGHT = 6, ALIGN_SQUEEZE = 7 }; AlignType GetAlignType() const { return m_nAlignType; } void Override(LwpAlignmentOverride* other); void OverrideAlignment(AlignType val); private: LwpAlignmentOverride(LwpAlignmentOverride const& rOther); LwpAlignmentOverride& operator=(LwpAlignmentOverride const& rOther) = delete; enum { AO_TYPE = 0x01, AO_POSITION = 0x02, AO_CHAR = 0x04 }; AlignType m_nAlignType; sal_uInt32 m_nPosition; sal_uInt16 m_nAlignChar; }; class LwpSpacingCommonOverride final : public LwpOverride { public: LwpSpacingCommonOverride() : m_nSpacingType(SPACING_NONE), m_nAmount(0), m_nMultiple(65536){} virtual LwpSpacingCommonOverride* clone() const override; void Read(LwpObjectStream* pStrm) override; enum SpacingType { SPACING_DYNAMIC = 0, SPACING_LEADING = 1, SPACING_CUSTOM = 2, SPACING_NONE = 3 }; SpacingType GetType() const {return m_nSpacingType;} sal_Int32 GetAmount() const {return m_nAmount;} sal_Int32 GetMultiple() const {return m_nMultiple;} void Override(LwpSpacingCommonOverride* other); void OverrideType(SpacingType val); void OverrideAmount(sal_Int32 val); void OverrideMultiple(sal_Int32 val); private: LwpSpacingCommonOverride(LwpSpacingCommonOverride const& rOther); LwpSpacingCommonOverride& operator=(LwpSpacingCommonOverride const& rOther) = delete; enum { SPO_TYPE = 0x01, SPO_AMOUNT = 0x02, SPO_MULTIPLE= 0x04 }; SpacingType m_nSpacingType;//sal_uInt16 sal_Int32 m_nAmount; sal_Int32 m_nMultiple; }; class LwpSpacingOverride final : public LwpOverride { public: LwpSpacingOverride(); virtual ~LwpSpacingOverride() override; virtual LwpSpacingOverride* clone() const override; void Read(LwpObjectStream* pStrm) override; void Override(LwpSpacingOverride* other); LwpSpacingCommonOverride* GetSpacing(){return m_pSpacing.get();} LwpSpacingCommonOverride* GetAboveLineSpacing(){return m_pAboveLineSpacing.get();} LwpSpacingCommonOverride* GetAboveSpacing(){return m_pParaSpacingAbove.get();} LwpSpacingCommonOverride* GetBelowSpacing(){return m_pParaSpacingBelow.get();} private: LwpSpacingOverride(LwpSpacingOverride const& rOther); LwpSpacingOverride& operator=(LwpSpacingOverride const& rOther) = delete; std::unique_ptr m_pSpacing; std::unique_ptr m_pAboveLineSpacing; std::unique_ptr m_pParaSpacingAbove; std::unique_ptr m_pParaSpacingBelow; }; class LwpIndentOverride final : public LwpOverride { public: LwpIndentOverride() : m_nAll(0), m_nFirst(0), m_nRest(0), m_nRight(0) {} virtual LwpIndentOverride* clone() const override; void Read(LwpObjectStream* pStrm) override; enum { RELATIVE_FIRST, RELATIVE_REST, RELATIVE_ALL }; inline double GetFirst() const; inline double GetLeft() const; inline double GetRight() const; sal_uInt16 GetRelative() const; bool IsUseRelative() const; void Override(LwpIndentOverride* other); void OverrideIndentAll(sal_Int32 val); void OverrideIndentFirst(sal_Int32 val); void OverrideIndentRight(sal_Int32 val); void OverrideIndentRest(sal_Int32 val); void OverrideUseRelative(bool use); void OverrideRelative(sal_uInt16 relative); sal_Int32 GetMAll() const {return m_nAll;} sal_Int32 GetMFirst() const {return m_nFirst;} sal_Int32 GetMRest() const {return m_nRest;} sal_Int32 GetMRight() const {return m_nRight;} void SetMAll(sal_Int32 val){m_nAll=val;} void SetMFirst(sal_Int32 val){m_nFirst=val;} void SetMRest(sal_Int32 val){m_nRest=val;} void SetMRight(sal_Int32 val){m_nRight=val;} private: LwpIndentOverride(LwpIndentOverride const& rOther); LwpIndentOverride& operator=(LwpIndentOverride const& rOther) = delete; enum { IO_ALL = 0x0001, IO_FIRST = 0x0002, IO_REST = 0x0004, IO_RIGHT = 0x0008, IO_HANGING = 0x0010, IO_EQUAL = 0x0020, IO_BODY = 0x0040, IO_REL_ALL = 0x0080, IO_REL_FIRST = 0x0100, IO_REL_REST = 0x0200, IO_REL_FLAGS = (IO_REL_ALL | IO_REL_FIRST | IO_REL_REST), IO_USE_RELATIVE = 0x0400 }; sal_Int32 m_nAll; sal_Int32 m_nFirst; sal_Int32 m_nRest; sal_Int32 m_nRight; }; inline double LwpIndentOverride::GetFirst() const { sal_Int32 nRes; if (o3tl::checked_sub(m_nFirst, m_nRest, nRes)) throw std::range_error("bad len"); return LwpTools::ConvertFromUnits(nRes); } inline double LwpIndentOverride::GetLeft() const { sal_Int32 nRes; if (o3tl::checked_add(m_nAll, m_nRest, nRes)) throw std::range_error("bad len"); return LwpTools::ConvertFromUnits(nRes); } inline double LwpIndentOverride::GetRight() const { return LwpTools::ConvertFromUnits(m_nRight); } class LwpBackgroundStuff; class LwpAmikakeOverride final : public LwpOverride { public: LwpAmikakeOverride(); virtual ~LwpAmikakeOverride() override; virtual LwpAmikakeOverride* clone() const override; void Read(LwpObjectStream* pStrm) override; enum { AMIKAKE_NONE = 0, AMIKAKE_BACKGROUND = 1, AMIKAKE_CHARACTER = 2 }; private: LwpAmikakeOverride(LwpAmikakeOverride const& rOther); LwpAmikakeOverride& operator=(LwpAmikakeOverride const& rOther) = delete; std::unique_ptr m_pBackgroundStuff; sal_uInt16 m_nType; }; #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */