/* -*- 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 INCLUDED_SVX_AUTOFORMATHELPER_HXX
#define INCLUDED_SVX_AUTOFORMATHELPER_HXX
#include <svx/svxdllapi.h>
#include <memory>
class SvStream;
class SvxFontItem;
class SvxFontHeightItem;
class SvxWeightItem;
class SvxPostureItem;
class SvxUnderlineItem;
class SvxOverlineItem;
class SvxCrossedOutItem;
class SvxContourItem;
class SvxShadowedItem;
class SvxColorItem;
class SvxBoxItem;
class SvxLineItem;
class SvxBrushItem;
class SvxAdjustItem;
class SvxHorJustifyItem;
class SvxVerJustifyItem;
class SfxBoolItem;
class SvxMarginItem;
class SfxInt32Item;
class SvxRotateModeItem;
//////////////////////////////////////////////////////////////////////////////
/// Struct with version numbers of the Items
struct SVX_DLLPUBLIC AutoFormatVersions
{
public:
// BlockA
sal_uInt16 nFontVersion;
sal_uInt16 nFontHeightVersion;
sal_uInt16 nWeightVersion;
sal_uInt16 nPostureVersion;
sal_uInt16 nUnderlineVersion;
sal_uInt16 nOverlineVersion;
sal_uInt16 nCrossedOutVersion;
sal_uInt16 nContourVersion;
sal_uInt16 nShadowedVersion;
sal_uInt16 nColorVersion;
sal_uInt16 nBoxVersion;
sal_uInt16 nLineVersion;
sal_uInt16 nBrushVersion;
sal_uInt16 nAdjustVersion;
// BlockB
sal_uInt16 nHorJustifyVersion;
sal_uInt16 nVerJustifyVersion;
sal_uInt16 nOrientationVersion;
sal_uInt16 nMarginVersion;
sal_uInt16 nBoolVersion;
sal_uInt16 nInt32Version;
sal_uInt16 nRotateModeVersion;
sal_uInt16 nNumFormatVersion;
AutoFormatVersions();
void LoadBlockA( SvStream& rStream, sal_uInt16 nVer );
void LoadBlockB( SvStream& rStream, sal_uInt16 nVer );
static void WriteBlockA(SvStream& rStream, sal_uInt16 fileVersion);
static void WriteBlockB(SvStream& rStream, sal_uInt16 fileVersion);
};
//////////////////////////////////////////////////////////////////////////////
class SVX_DLLPUBLIC AutoFormatBase
{
protected:
// common attributes of Calc and Writer
// --- from 641 on: CJK and CTL font settings
std::unique_ptr<SvxFontItem> m_aFont;
std::unique_ptr<SvxFontHeightItem> m_aHeight;
std::unique_ptr<SvxWeightItem> m_aWeight;
std::unique_ptr<SvxPostureItem> m_aPosture;
std::unique_ptr<SvxFontItem> m_aCJKFont;
std::unique_ptr<SvxFontHeightItem> m_aCJKHeight;
std::unique_ptr<SvxWeightItem> m_aCJKWeight;
std::unique_ptr<SvxPostureItem> m_aCJKPosture;
std::unique_ptr<SvxFontItem> m_aCTLFont;
std::unique_ptr<SvxFontHeightItem> m_aCTLHeight;
std::unique_ptr<SvxWeightItem> m_aCTLWeight;
std::unique_ptr<SvxPostureItem> m_aCTLPosture;
std::unique_ptr<SvxUnderlineItem> m_aUnderline;
std::unique_ptr<SvxOverlineItem> m_aOverline;
std::unique_ptr<SvxCrossedOutItem> m_aCrossedOut;
std::unique_ptr<SvxContourItem> m_aContour;
std::unique_ptr<SvxShadowedItem> m_aShadowed;
std::unique_ptr<SvxColorItem> m_aColor;
std::unique_ptr<SvxBoxItem> m_aBox;
std::unique_ptr<SvxLineItem> m_aTLBR;
std::unique_ptr<SvxLineItem> m_aBLTR;
std::unique_ptr<SvxBrushItem> m_aBackground;
// Writer specific
std::unique_ptr<SvxAdjustItem> m_aAdjust;
// Calc specific
std::unique_ptr<SvxHorJustifyItem> m_aHorJustify;
std::unique_ptr<SvxVerJustifyItem> m_aVerJustify;
std::unique_ptr<SfxBoolItem> m_aStacked;
std::unique_ptr<SvxMarginItem> m_aMargin;
std::unique_ptr<SfxBoolItem> m_aLinebreak;
// from SO5, 504k on, rotated text
std::unique_ptr<SfxInt32Item> m_aRotateAngle;
std::unique_ptr<SvxRotateModeItem> m_aRotateMode;
// assignment-op is protected due to this being a tooling
// class, so callers need to be aware of what they do
AutoFormatBase&
operator=(
const AutoFormatBase&);
AutoFormatBase();
AutoFormatBase(
const AutoFormatBase& rNew );
~AutoFormatBase();
/// Comparing based of boxes backgrounds.
bool operator==(
const AutoFormatBase& rRight)
const;
public:
// The get-methods.
const SvxFontItem &GetFont()
const {
return *m_aFont; }
const SvxFontHeightItem &GetHeight()
const {
return *m_aHeight; }
const SvxWeightItem &GetWeight()
const {
return *m_aWeight; }
const SvxPostureItem &GetPosture()
const {
return *m_aPosture; }
const SvxFontItem &GetCJKFont()
const {
return *m_aCJKFont; }
const SvxFontHeightItem &GetCJKHeight()
const {
return *m_aCJKHeight; }
const SvxWeightItem &GetCJKWeight()
const {
return *m_aCJKWeight; }
const SvxPostureItem &GetCJKPosture()
const {
return *m_aCJKPosture; }
const SvxFontItem &GetCTLFont()
const {
return *m_aCTLFont; }
const SvxFontHeightItem &GetCTLHeight()
const {
return *m_aCTLHeight; }
const SvxWeightItem &GetCTLWeight()
const {
return *m_aCTLWeight; }
const SvxPostureItem &GetCTLPosture()
const {
return *m_aCTLPosture; }
const SvxUnderlineItem &GetUnderline()
const {
return *m_aUnderline; }
const SvxOverlineItem &GetOverline()
const {
return *m_aOverline; }
const SvxCrossedOutItem &GetCrossedOut()
const {
return *m_aCrossedOut; }
const SvxContourItem &GetContour()
const {
return *m_aContour; }
const SvxShadowedItem &GetShadowed()
const {
return *m_aShadowed; }
const SvxColorItem &GetColor()
const {
return *m_aColor; }
const SvxBoxItem &GetBox()
const {
return *m_aBox; }
const SvxLineItem& GetTLBR()
const {
return *m_aTLBR; }
const SvxLineItem& GetBLTR()
const {
return *m_aBLTR; }
const SvxBrushItem &GetBackground()
const {
return *m_aBackground; }
const SvxAdjustItem &GetAdjust()
const {
return *m_aAdjust; }
const SvxHorJustifyItem& GetHorJustify()
const {
return *m_aHorJustify; }
const SvxVerJustifyItem& GetVerJustify()
const {
return *m_aVerJustify; }
const SfxBoolItem& GetStacked()
const {
return *m_aStacked; }
const SvxMarginItem& GetMargin()
const {
return *m_aMargin; }
const SfxBoolItem& GetLinebreak()
const {
return *m_aLinebreak; }
const SfxInt32Item& GetRotateAngle()
const {
return *m_aRotateAngle; }
const SvxRotateModeItem& GetRotateMode()
const {
return *m_aRotateMode; }
// The set-methods.
void SetFont(
const SvxFontItem& rNew );
void SetHeight(
const SvxFontHeightItem& rNew );
void SetWeight(
const SvxWeightItem& rNew );
void SetPosture(
const SvxPostureItem& rNew );
void SetCJKFont(
const SvxFontItem& rNew );
void SetCJKHeight(
const SvxFontHeightItem& rNew );
void SetCJKWeight(
const SvxWeightItem& rNew );
void SetCJKPosture(
const SvxPostureItem& rNew );
void SetCTLFont(
const SvxFontItem& rNew );
void SetCTLHeight(
const SvxFontHeightItem& rNew );
void SetCTLWeight(
const SvxWeightItem& rNew );
void SetCTLPosture(
const SvxPostureItem& rNew );
void SetUnderline(
const SvxUnderlineItem& rNew );
void SetOverline(
const SvxOverlineItem& rNew );
void SetCrossedOut(
const SvxCrossedOutItem& rNew );
void SetContour(
const SvxContourItem& rNew );
void SetShadowed(
const SvxShadowedItem& rNew );
void SetColor(
const SvxColorItem& rNew );
void SetBox(
const SvxBoxItem& rNew );
void SetTLBR(
const SvxLineItem& rNew );
void SetBLTR(
const SvxLineItem& rNew );
void SetBackground(
const SvxBrushItem& rNew );
void SetAdjust(
const SvxAdjustItem& rNew );
void SetHorJustify(
const SvxHorJustifyItem& rNew );
void SetVerJustify(
const SvxVerJustifyItem& rNew );
void SetStacked(
const SfxBoolItem& rNew );
void SetMargin(
const SvxMarginItem& rNew );
void SetLinebreak(
const SfxBoolItem& rNew );
void SetRotateAngle(
const SfxInt32Item& rNew );
void SetRotateMode(
const SvxRotateModeItem& rNew );
bool LoadBlockA( SvStream& rStream,
const AutoFormatVersions& rVersions, sal_uI
nt16 nVer );
bool LoadBlockB( SvStream& rStream, const AutoFormatVersions& rVersions, sal_uInt16 nVer );
bool SaveBlockA( SvStream& rStream, sal_uInt16 fileVersion ) const;
bool SaveBlockB( SvStream& rStream, sal_uInt16 fileVersion ) const;
};
#endif // INCLUDED_SVX_AUTOFORMATHELPER_HXX
//////////////////////////////////////////////////////////////////////////////
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */