summaryrefslogtreecommitdiffstats
path: root/sw/inc/format.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/inc/format.hxx')
-rw-r--r--sw/inc/format.hxx280
1 files changed, 280 insertions, 0 deletions
diff --git a/sw/inc/format.hxx b/sw/inc/format.hxx
new file mode 100644
index 000000000..d2eae51ee
--- /dev/null
+++ b/sw/inc/format.hxx
@@ -0,0 +1,280 @@
+/* -*- 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_FORMAT_HXX
+#define INCLUDED_SW_INC_FORMAT_HXX
+
+#include "swdllapi.h"
+
+#include "BorderCacheOwner.hxx"
+#include "calbck.hxx"
+#include "hintids.hxx"
+#include "swatrset.hxx"
+#include <memory>
+
+class IDocumentSettingAccess;
+class IDocumentDrawModelAccess;
+class IDocumentLayoutAccess;
+class IDocumentTimerAccess;
+class IDocumentFieldsAccess;
+class IDocumentChartDataProviderAccess;
+class SwDoc;
+class SfxGrabBagItem;
+class SwTextGridItem;
+
+namespace drawinglayer::attribute {
+ class SdrAllFillAttributesHelper;
+ typedef std::shared_ptr< SdrAllFillAttributesHelper > SdrAllFillAttributesHelperPtr;
+}
+
+/// Base class for various Writer styles.
+class SW_DLLPUBLIC SwFormat : public sw::BorderCacheOwner, public sw::BroadcastingModify
+{
+ friend class SwFrameFormat;
+
+ OUString m_aFormatName;
+ SwAttrSet m_aSet;
+
+ sal_uInt16 m_nWhichId;
+ sal_uInt16 m_nPoolFormatId; /**< Id for "automatically" created formats.
+ (is not hard attribution!!!) */
+ sal_uInt16 m_nPoolHelpId; ///< HelpId for this Pool-style.
+ sal_uInt8 m_nPoolHlpFileId; ///< FilePos to Doc to these style helps.
+ bool m_bAutoFormat : 1; /**< FALSE: it is a template.
+ default is true! */
+ bool m_bFormatInDTOR : 1; /**< TRUE: Format becomes deleted. In order to be able
+ to recognize this in FormatChg-message!! */
+ bool m_bAutoUpdateFormat : 1;/**< TRUE: Set attributes of a whole paragraph
+ at format (UI-side!). */
+ bool m_bHidden : 1;
+ std::shared_ptr<SfxGrabBagItem> m_pGrabBagItem; ///< Style InteropGrabBag.
+ virtual void InvalidateInSwFntCache(sal_uInt16) {};
+
+protected:
+ SwFormat( SwAttrPool& rPool, const char* pFormatNm,
+ const WhichRangesContainer& pWhichRanges, SwFormat *pDrvdFrame, sal_uInt16 nFormatWhich );
+ SwFormat( SwAttrPool& rPool, const OUString &rFormatNm, const WhichRangesContainer& pWhichRanges,
+ SwFormat *pDrvdFrame, sal_uInt16 nFormatWhich );
+ SwFormat( const SwFormat& rFormat );
+ virtual void SwClientNotify(const SwModify&, const SfxHint&) override;
+
+public:
+
+ virtual ~SwFormat() override;
+ SwFormat &operator=(const SwFormat&);
+
+ /// for Querying of Writer-functions.
+ sal_uInt16 Which() const { return m_nWhichId; };
+
+ /// Copy attributes even among documents.
+ void CopyAttrs( const SwFormat& );
+
+ /// Delete all attributes that are not in rFormat.
+ void DelDiffs( const SfxItemSet& rSet );
+ void DelDiffs( const SwFormat& rFormat ) { DelDiffs( rFormat.GetAttrSet() ); }
+
+ /// 0 is Default.
+ bool SetDerivedFrom(SwFormat *pDerivedFrom = nullptr);
+
+ /// If bInParents is FALSE, search only in this format for attribute.
+ const SfxPoolItem& GetFormatAttr( sal_uInt16 nWhich,
+ bool bInParents = true ) const;
+ template<class T> const T& GetFormatAttr( TypedWhichId<T> nWhich, bool bInParents = true ) const
+ {
+ return static_cast<const T&>(GetFormatAttr(sal_uInt16(nWhich), bInParents));
+ }
+
+ SfxItemState GetItemState( sal_uInt16 nWhich, bool bSrchInParent = true,
+ const SfxPoolItem **ppItem = nullptr ) const;
+ template<class T>
+ SfxItemState GetItemState( TypedWhichId<T> nWhich, bool bSrchInParent = true,
+ const T **ppItem = nullptr ) const
+ { return GetItemState(sal_uInt16(nWhich), bSrchInParent, reinterpret_cast<const SfxPoolItem **>(ppItem)); }
+
+ /// Templatized version of GetItemState() to directly return the correct type.
+ template<class T>
+ const T * GetItemIfSet( TypedWhichId<T> nWhich,
+ bool bSrchInParent = true ) const
+ {
+ const SfxPoolItem * pItem = nullptr;
+ if( SfxItemState::SET == GetItemState(sal_uInt16(nWhich), bSrchInParent, &pItem) )
+ return static_cast<const T*>(pItem);
+ return nullptr;
+ }
+ SfxItemState GetBackgroundState(std::unique_ptr<SvxBrushItem>& rItem) const;
+ virtual bool SetFormatAttr( const SfxPoolItem& rAttr );
+ virtual bool SetFormatAttr( const SfxItemSet& rSet );
+ virtual bool ResetFormatAttr( sal_uInt16 nWhich1, sal_uInt16 nWhich2 = 0 );
+
+ /** Takes all hints from Delta-Array,
+ @return count of deleted hints. */
+ virtual sal_uInt16 ResetAllFormatAttr();
+
+ SwFormat* DerivedFrom() const { return const_cast<SwFormat*>(static_cast<const SwFormat*>(GetRegisteredIn())); }
+ bool IsDefault() const { return DerivedFrom() == nullptr; }
+
+ const OUString& GetName() const { return m_aFormatName; }
+ bool HasName(std::u16string_view rName) const { return m_aFormatName == rName; }
+ virtual void SetName( const OUString& rNewName, bool bBroadcast=false );
+
+ /// For querying the attribute array.
+ const SwAttrSet& GetAttrSet() const { return m_aSet; }
+
+ /** The document is set in SwAttrPool now, therefore you always can access it. */
+ const SwDoc *GetDoc() const { return m_aSet.GetDoc(); }
+ SwDoc *GetDoc() { return m_aSet.GetDoc(); }
+
+ /// Provides access to the document settings interface.
+ const IDocumentSettingAccess& getIDocumentSettingAccess() const;
+
+ /// Provides access to the document draw model interface.
+ const IDocumentDrawModelAccess& getIDocumentDrawModelAccess() const;
+ IDocumentDrawModelAccess& getIDocumentDrawModelAccess();
+
+ /// Provides access to the document layout interface.
+ const IDocumentLayoutAccess& getIDocumentLayoutAccess() const;
+ IDocumentLayoutAccess& getIDocumentLayoutAccess();
+
+ /// Provides access to the document idle timer interface.
+ IDocumentTimerAccess& getIDocumentTimerAccess();
+
+ /// Provides access to the document idle timer interface.
+ IDocumentFieldsAccess& getIDocumentFieldsAccess();
+
+ /// Gives access to the chart data-provider.
+ IDocumentChartDataProviderAccess& getIDocumentChartDataProviderAccess();
+
+ /// Get and set Pool style IDs.
+ sal_uInt16 GetPoolFormatId() const { return m_nPoolFormatId; }
+ void SetPoolFormatId( sal_uInt16 nId ) { m_nPoolFormatId = nId; }
+
+ /// Get and set Help-IDs for document templates.
+ sal_uInt16 GetPoolHelpId() const { return m_nPoolHelpId; }
+ void SetPoolHelpId( sal_uInt16 nId ) { m_nPoolHelpId = nId; }
+ sal_uInt8 GetPoolHlpFileId() const { return m_nPoolHlpFileId; }
+ void SetPoolHlpFileId( sal_uInt8 nId ) { m_nPoolHlpFileId = nId; }
+
+ /// Get attribute-description. Returns passed string.
+ void GetPresentation( SfxItemPresentation ePres,
+ MapUnit eCoreMetric, MapUnit ePresMetric, OUString &rText ) const
+ { m_aSet.GetPresentation( ePres, eCoreMetric, ePresMetric, rText ); }
+
+ /// Query / set AutoFormat-flag.
+ bool IsAuto() const { return m_bAutoFormat; }
+ void SetAuto( bool bNew ) { m_bAutoFormat = bNew; }
+
+ bool IsHidden() const { return m_bHidden; }
+ void SetHidden( bool bValue ) { m_bHidden = bValue; }
+
+ void GetGrabBagItem(css::uno::Any& rVal) const;
+ void SetGrabBagItem(const css::uno::Any& rVal);
+
+ /// Query / set bAutoUpdateFormat-flag.
+ bool IsAutoUpdateFormat() const { return m_bAutoUpdateFormat; }
+ void SetAutoUpdateFormat( bool bNew = true ) { m_bAutoUpdateFormat = bNew; }
+
+ bool IsFormatInDTOR() const { return m_bFormatInDTOR; }
+
+ /** GetMethods: Bool indicates whether to search only in Set (FALSE)
+ or also in Parents.
+ If nothing is found the defaulted attribute is returned. */
+
+ /// Character-attributes - implemented in charatr.hxx
+ inline const SvxUnderlineItem &GetUnderline( bool = true ) const;
+ inline const SvxFontHeightItem &GetSize( bool = true ) const;
+ inline const SvxFontItem &GetFont( bool = true ) const;
+ inline const SvxColorItem &GetColor( bool = true ) const;
+ inline const SvxFontItem &GetCJKFont( bool = true ) const;
+ inline const SvxFontItem &GetCTLFont( bool = true ) const;
+
+ /// Frame-attributes - implemented in frmatr.hxx.
+ inline const SwFormatFillOrder &GetFillOrder( bool = true ) const;
+ inline const SwFormatFrameSize &GetFrameSize( bool = true ) const;
+ inline const SwFormatHeader &GetHeader( bool = true ) const;
+ inline const SwFormatFooter &GetFooter( bool = true ) const;
+ inline const SwFormatSurround &GetSurround( bool = true ) const;
+ inline const SwFormatHoriOrient &GetHoriOrient( bool = true ) const;
+ inline const SwFormatAnchor &GetAnchor( bool = true ) const;
+ inline const SwFormatCol &GetCol( bool = true ) const;
+ inline const SvxPaperBinItem &GetPaperBin( bool = true ) const;
+ inline const SvxLRSpaceItem &GetLRSpace( bool = true ) const;
+ inline const SvxULSpaceItem &GetULSpace( bool = true ) const;
+ inline const SwFormatContent &GetContent( bool = true ) const;
+ inline const SvxPrintItem &GetPrint( bool = true ) const;
+ inline const SvxOpaqueItem &GetOpaque( bool = true ) const;
+ inline const SvxProtectItem &GetProtect( bool = true ) const;
+ inline const SwFormatVertOrient &GetVertOrient( bool = true ) const;
+ inline const SvxBoxItem &GetBox( bool = true ) const;
+ inline const SvxFormatKeepItem &GetKeep( bool = true ) const;
+
+ // Create SvxBrushItem for Background fill (partially for backwards compatibility)
+ std::unique_ptr<SvxBrushItem> makeBackgroundBrushItem( bool = true ) const;
+
+ inline const SvxShadowItem &GetShadow( bool = true ) const;
+ inline const SwFormatPageDesc &GetPageDesc( bool = true ) const;
+ inline const SvxFormatBreakItem &GetBreak( bool = true ) const;
+ inline const SvxMacroItem &GetMacro( bool = true ) const;
+ inline const SwFormatURL &GetURL( bool = true ) const;
+ inline const SwFormatEditInReadonly &GetEditInReadonly( bool = true ) const;
+ inline const SwFormatLayoutSplit &GetLayoutSplit( bool = true ) const;
+ inline const SwFormatRowSplit &GetRowSplit( bool = true ) const;
+ inline const SwFormatChain &GetChain( bool = true ) const;
+ inline const SwFormatFootnoteAtTextEnd &GetFootnoteAtTextEnd( bool = true ) const;
+ inline const SwFormatEndAtTextEnd &GetEndAtTextEnd( bool = true ) const;
+ inline const SwFormatNoBalancedColumns &GetBalancedColumns( bool = true ) const;
+ inline const SvxFrameDirectionItem &GetFrameDir( bool = true ) const;
+ inline const SwTextGridItem &GetTextGrid( bool = true ) const;
+ inline const SwHeaderAndFooterEatSpacingItem &GetHeaderAndFooterEatSpacing( bool = true ) const;
+ // #i18732#
+ inline const SwFormatFollowTextFlow &GetFollowTextFlow(bool = true) const;
+ // #i28701#
+ inline const SwFormatWrapInfluenceOnObjPos& GetWrapInfluenceOnObjPos(bool = true) const;
+ inline const SdrTextVertAdjustItem& GetTextVertAdjust(bool = true) const;
+
+ /// Paragraph-attributes - implemented in paratr.hxx.
+ inline const SvxLineSpacingItem &GetLineSpacing( bool = true ) const;
+ inline const SwNumRuleItem &GetNumRule( bool = true ) const;
+ inline const SvxTabStopItem &GetTabStops( bool = true ) const;
+ inline const SwFormatDrop &GetDrop( bool = true ) const;
+
+ /// TableBox attributes - implemented in cellatr.hxx.
+ inline const SwTableBoxNumFormat &GetTableBoxNumFormat( bool = true ) const;
+ inline const SwTableBoxFormula &GetTableBoxFormula( bool = true ) const;
+ inline const SwTableBoxValue &GetTableBoxValue( bool = true ) const;
+
+ void SetPageFormatToDefault();
+
+ /** SwFormat::IsBackgroundTransparent
+
+ Virtual method to determine, if background of format is transparent.
+ Default implementation returns false. Thus, subclasses have to override
+ method, if the specific subclass can have a transparent background.
+
+ @return false, default implementation
+ */
+ virtual bool IsBackgroundTransparent() const;
+
+ // Access to DrawingLayer FillAttributes in a preprocessed form for primitive usage
+ virtual drawinglayer::attribute::SdrAllFillAttributesHelperPtr getSdrAllFillAttributesHelper() const;
+ virtual bool supportsFullDrawingLayerFillAttributeSet() const;
+ void RemoveAllUnos();
+};
+
+#endif // INCLUDED_SW_INC_FORMAT_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */