diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:06:44 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:06:44 +0000 |
commit | ed5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch) | |
tree | 7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /sw/inc/fmtcol.hxx | |
parent | Initial commit. (diff) | |
download | libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.tar.xz libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.zip |
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sw/inc/fmtcol.hxx')
-rw-r--r-- | sw/inc/fmtcol.hxx | 269 |
1 files changed, 269 insertions, 0 deletions
diff --git a/sw/inc/fmtcol.hxx b/sw/inc/fmtcol.hxx new file mode 100644 index 000000000..be547df3d --- /dev/null +++ b/sw/inc/fmtcol.hxx @@ -0,0 +1,269 @@ +/* -*- 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_SW_INC_FMTCOL_HXX +#define INCLUDED_SW_INC_FMTCOL_HXX + +#include "swdllapi.h" +#include "format.hxx" +#include "hintids.hxx" +#include "paratr.hxx" +#include <rtl/ustring.hxx> +#include <tools/solar.h> + +#include <vector> +#include <memory> + +class SwAttrPool; +namespace sw{ class DocumentStylePoolManager; } + +class SAL_DLLPUBLIC_RTTI SwFormatColl: public SwFormat +{ +protected: + SwFormatColl( SwAttrPool& rPool, const char* pFormatName, + const WhichRangesContainer& pWhichRanges, SwFormatColl* pDerFrom, + sal_uInt16 nFormatWhich ) + : SwFormat( rPool, pFormatName, pWhichRanges, pDerFrom, nFormatWhich ) + { SetAuto(false); } + + SwFormatColl( SwAttrPool& rPool, const OUString &rFormatName, + const WhichRangesContainer& pWhichRanges, SwFormatColl* pDerFrom, + sal_uInt16 nFormatWhich ) + : SwFormat( rPool, rFormatName, pWhichRanges, pDerFrom, nFormatWhich ) + { SetAuto(false); } + +private: + SwFormatColl(const SwFormatColl & ) = delete; + const SwFormatColl &operator=(const SwFormatColl &) = delete; +}; + +/// Represents the style of a paragraph. +class SW_DLLPUBLIC SwTextFormatColl + : public SwFormatColl + , public sw::FormatDropDefiner +{ + friend class SwDoc; + friend class ::sw::DocumentStylePoolManager; + + SwTextFormatColl(const SwTextFormatColl & rRef) = delete; + + bool mbStayAssignedToListLevelOfOutlineStyle; + + bool mbAssignedToOutlineStyle; + + bool m_bInSwFntCache; + + SwTextFormatColl *mpNextTextFormatColl; + + SwCharFormat* mpLinkedCharFormat = nullptr; + +protected: + SwTextFormatColl( SwAttrPool& rPool, const char* pFormatCollName, + SwTextFormatColl* pDerFrom = nullptr, + sal_uInt16 nFormatWh = RES_TXTFMTCOLL ) + : SwFormatColl(rPool, pFormatCollName, aTextFormatCollSetRange, pDerFrom, nFormatWh) + , mbStayAssignedToListLevelOfOutlineStyle(false) + , mbAssignedToOutlineStyle(false) + , m_bInSwFntCache(false) + { + mpNextTextFormatColl = this; + } + + SwTextFormatColl( SwAttrPool& rPool, const OUString &rFormatCollName, + SwTextFormatColl* pDerFrom, + sal_uInt16 nFormatWh = RES_TXTFMTCOLL ) + : SwFormatColl(rPool, rFormatCollName, aTextFormatCollSetRange, pDerFrom, nFormatWh) + , mbStayAssignedToListLevelOfOutlineStyle(false) + , mbAssignedToOutlineStyle(false) + , m_bInSwFntCache(false) + { + mpNextTextFormatColl = this; + } + + /// To get UL- / LR- / FontHeight-changes. + virtual void SwClientNotify(const SwModify&, const SfxHint&) override; + +public: + virtual ~SwTextFormatColl(); + inline void SetNextTextFormatColl(SwTextFormatColl& rNext); + SwTextFormatColl& GetNextTextFormatColl() const { return *mpNextTextFormatColl; } + + void SetLinkedCharFormat(SwCharFormat* pLink); + + const SwCharFormat* GetLinkedCharFormat() const; + + bool IsAtDocNodeSet() const; + + void SetAttrOutlineLevel( int ); + int GetAttrOutlineLevel() const; + + // Return the list level of the Outline Style - the List Style for the + // outline numbering - + // to which the Paragraph Style is assigned. + int GetAssignedOutlineStyleLevel() const; + + bool IsAssignedToListLevelOfOutlineStyle() const + { + return mbAssignedToOutlineStyle; + } + + // If a Paragraph Style is assigned to list level N of the Outline Style, + // then its outline level - AttrOutlineLevel - is set to N+1 + void AssignToListLevelOfOutlineStyle(const int nAssignedListLevel); + void DeleteAssignmentToListLevelOfOutlineStyle(); + + /** Override to recognize changes on the <SwNumRuleItem> and register/unregister + the paragragh style at the corresponding <SwNumRule> instance. */ + virtual bool SetFormatAttr( const SfxPoolItem& rAttr ) override; + virtual bool SetFormatAttr( const SfxItemSet& rSet ) override; + virtual bool ResetFormatAttr( sal_uInt16 nWhich1, sal_uInt16 nWhich2 = 0 ) override; + + /// Override <ResetAllFormatAttr()> to stay assigned to list level of outline style. + virtual sal_uInt16 ResetAllFormatAttr() override; + + bool StayAssignedToListLevelOfOutlineStyle() const + { + return mbStayAssignedToListLevelOfOutlineStyle; + } + + bool AreListLevelIndentsApplicable() const; + + void dumpAsXml(xmlTextWriterPtr pWriter) const; + virtual void FormatDropNotify(const SwFormatDrop& rDrop) override + { + if(HasWriterListeners() && !IsModifyLocked()) + CallSwClientNotify(sw::LegacyModifyHint(&rDrop, &rDrop)); + }; + bool IsInSwFntCache() const { return m_bInSwFntCache; }; + void SetInSwFntCache() { m_bInSwFntCache = true; }; + virtual void InvalidateInSwFntCache(sal_uInt16 nWhich) override + { + if(isCHRATR(nWhich)) + { + m_bInSwFntCache = false; + } + else + { + switch(nWhich) + { + case RES_OBJECTDYING: + case RES_FMT_CHG: + case RES_ATTRSET_CHG: + m_bInSwFntCache = false; + } + } + }; +}; + +class SwGrfFormatColl final : public SwFormatColl +{ + friend class SwDoc; + + SwGrfFormatColl( SwAttrPool& rPool, const char* pFormatCollName, + SwGrfFormatColl* pDerFrom = nullptr ) + : SwFormatColl( rPool, pFormatCollName, aGrfFormatCollSetRange, + pDerFrom, RES_GRFFMTCOLL ) + {} + + SwGrfFormatColl( SwAttrPool& rPool, const OUString &rFormatCollName, + SwGrfFormatColl* pDerFrom ) + : SwFormatColl( rPool, rFormatCollName, aGrfFormatCollSetRange, + pDerFrom, RES_GRFFMTCOLL ) + {} +}; + +// FEATURE::CONDCOLL +/// Conditional styles. +enum class Master_CollCondition +{ + NONE, + PARA_IN_LIST, + PARA_IN_OUTLINE, + PARA_IN_FRAME, + PARA_IN_TABLEHEAD, + PARA_IN_TABLEBODY, + PARA_IN_SECTION, + PARA_IN_FOOTNOTE, + PARA_IN_FOOTER, + PARA_IN_HEADER, + PARA_IN_ENDNOTE +}; + +class SW_DLLPUBLIC SwCollCondition final : public SwClient +{ + Master_CollCondition m_nCondition; + sal_uLong m_nSubCondition; + +public: + + SwCollCondition( SwTextFormatColl* pColl, Master_CollCondition nMasterCond, + sal_uLong nSubCond ); + virtual ~SwCollCondition() override; + + /// @@@ public copy ctor, but no copy assignment? + SwCollCondition( const SwCollCondition& rCpy ); +private: + /// @@@ public copy ctor, but no copy assignment? + SwCollCondition & operator= (const SwCollCondition &) = delete; +public: + + bool operator==( const SwCollCondition& rCmp ) const; + + Master_CollCondition GetCondition() const { return m_nCondition; } + sal_uLong GetSubCondition() const { return m_nSubCondition; } + + void SetCondition( Master_CollCondition nCond, sal_uLong nSubCond ); + SwTextFormatColl* GetTextFormatColl() const { return const_cast<SwTextFormatColl*>(static_cast<const SwTextFormatColl*>(GetRegisteredIn())); } + void RegisterToFormat( SwFormat& ); +}; + +using SwFormatCollConditions = std::vector<std::unique_ptr<SwCollCondition>>; + +class SW_DLLPUBLIC SwConditionTextFormatColl final : public SwTextFormatColl +{ + friend class SwDoc; + friend class ::sw::DocumentStylePoolManager; + + SwFormatCollConditions m_CondColls; + + SwConditionTextFormatColl( SwAttrPool& rPool, const OUString &rFormatCollName, + SwTextFormatColl* pDerFrom ) + : SwTextFormatColl( rPool, rFormatCollName, pDerFrom, RES_CONDTXTFMTCOLL ) + {} + +public: + + virtual ~SwConditionTextFormatColl() override; + + const SwCollCondition* HasCondition( const SwCollCondition& rCond ) const; + const SwFormatCollConditions& GetCondColls() const { return m_CondColls; } + void InsertCondition( const SwCollCondition& rCond ); + void RemoveCondition( const SwCollCondition& rCond ); + + void SetConditions( const SwFormatCollConditions& ); +}; + +// FEATURE::CONDCOLL +/// Inline implementations. +inline void SwTextFormatColl::SetNextTextFormatColl( SwTextFormatColl& rNext ) +{ + mpNextTextFormatColl = &rNext; +} +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |