1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  *   Licensed to the Apache Software Foundation (ASF) under one or more
12  *   contributor license agreements. See the NOTICE file distributed
13  *   with this work for additional information regarding copyright
14  *   ownership. The ASF licenses this file to you under the Apache
15  *   License, Version 2.0 (the "License"); you may not use this file
16  *   except in compliance with the License. You may obtain a copy of
17  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 #ifndef INCLUDED_SW_SOURCE_CORE_INC_DOCUMENTSETTINGMANAGER_HXX
20 #define INCLUDED_SW_SOURCE_CORE_INC_DOCUMENTSETTINGMANAGER_HXX
21 
22 #include <IDocumentSettingAccess.hxx>
23 class SwDoc;
24 typedef struct _xmlTextWriter* xmlTextWriterPtr;
25 
26 namespace sw {
27 class DocumentSettingManager final :
28     public IDocumentSettingAccess
29 {
30     std::shared_ptr<SvxForbiddenCharactersTable> mxForbiddenCharsTable;
31     SwDoc &m_rDoc;
32 
33     sal_uInt16  mnLinkUpdMode;       //< UpdateMode for links.
34 
35     SwFieldUpdateFlags    meFieldUpdMode;//< Automatically Update Mode for fields/charts.
36     CharCompressType meChrCmprType;//< for ASIAN: compress punctuation/kana
37 
38     sal_uInt32  mn32DummyCompatibilityOptions1;
39     sal_uInt32  mn32DummyCompatibilityOptions2;
40 
41     // COMPATIBILITY FLAGS START
42     //
43     //
44     // HISTORY OF THE COMPATIBILITY FLAGS:
45     //
46     // SO5:
47     // mbParaSpaceMax                        def = false, true since SO8
48     // mbParaSpaceMaxAtPages                 def = false, true since SO8
49     //
50     // SO6:
51     // mbTabCompat                           def = false, true since SO8
52     //
53     // SO7:
54     // mbUseVirtualDevice                    def = true
55     // mbAddFlyOffsets                       def = false, hidden
56     //
57     // SO7pp1:
58     // bOldNumbering                        def = false, hidden
59     //
60     // SO8:
61     // mbAddExternalLeading                  def = true
62     // mbUseHiResolutionVirtualDevice        def = true, hidden
63     // mbOldLineSpacing                      def = false
64     // mbAddParaSpacingToTableCells          def = true
65     // mbUseFormerObjectPos                  def = false
66     // mbUseFormerTextWrapping               def = false
67     // mbConsiderWrapOnObjPos                def = false
68     //
69     // SO8pp1:
70     // mbIgnoreFirstLineIndentInNumbering    def = false, hidden
71     // mbDoNotJustifyLinesWithManualBreak    def = false, hidden
72     // mbDoNotResetParaAttrsForNumFont       def = false, hidden
73     //
74     // SO8pp3
75     // mbDoNotCaptureDrawObjsOnPage         def = false, hidden
76     // - Relevant for drawing objects, which don't follow the text flow, but
77     //   whose position is outside the page area:
78     //   false: Such drawing objects are captured on the page area of its anchor.
79     //   true: Such drawing objects can leave the page area, they aren't captured.
80     // mbTableRowKeep                            def = false, hidden
81     // mbIgnoreTabsAndBlanksForLineCalculation   def = false, hidden
82     // mbClipAsCharacterAnchoredWriterFlyFrame   def = false, hidden
83     // - Introduced in order to re-activate clipping of as-character anchored
84     //   Writer fly frames in method <SwFlyInContentFrame::MakeAll()> for documents,
85     //   which are created with version prior SO8/OOo 2.0
86     //
87     // SO8pp4
88     // mbUnixForceZeroExtLeading                def = false, hidden
89     //
90     // SO8pu8
91     //
92     // SO9
93     // #i24363# tab stops relative to indent
94     // mbTabRelativeToIndent                    def = true, hidden
95     // #i89181# suppress tab stop at left indent for paragraphs in lists, whose
96     // list level position and space mode equals LABEL_ALIGNMENT and whose list
97     // label is followed by a tab character.
98     // mbTabAtLeftIndentForParagraphsInList     def = false, hidden
99 
100     bool mbHTMLMode              : 1;    //< true: Document is in HTMLMode.
101     bool mbIsGlobalDoc           : 1;    //< true: It's a global document.
102     bool mbGlblDocSaveLinks      : 1;    //< true: Save sections linked in global document.
103     bool mbIsLabelDoc            : 1;    //< true: It's a label document.
104     bool mbPurgeOLE              : 1;    //< true: Purge OLE-Objects
105     bool mbKernAsianPunctuation  : 1;    //< true: kerning also for ASIAN punctuation
106 
107     bool mbParaSpaceMax                     : 1;
108     bool mbParaSpaceMaxAtPages              : 1;
109     bool mbTabCompat                        : 1;
110     bool mbUseVirtualDevice                 : 1;
111     bool mbAddFlyOffsets                    : 1;
112     bool mbAddVerticalFlyOffsets            : 1;
113     bool mbAddExternalLeading               : 1;
114     bool mbUseHiResolutionVirtualDevice     : 1;
115     bool mbOldLineSpacing                   : 1;    // #i11859#
116     bool mbAddParaSpacingToTableCells       : 1;
117     bool mbUseFormerObjectPos               : 1;    // #i11860#
118     bool mbUseFormerTextWrapping            : 1;
119     bool mbConsiderWrapOnObjPos             : 1;    // #i28701#
120                                                     // true: object positioning algorithm has consider the wrapping style of                                                    //       the floating screen objects as given by its attribute 'WrapInfluenceOnObjPos'
121                                                     // floating screen objects as given by its
122                                                     // attribute 'WrapInfluenceOnObjPos'.
123     bool mbMathBaselineAlignment            : 1;    // TL  2010-10-29 #i972#
124     bool mbStylesNoDefault                  : 1;
125     bool mbFloattableNomargins              : 1; //< If paragraph margins next to a floating table should be ignored.
126     bool mEmbedFonts                        : 1;  //< Whether to embed fonts when saving.
127     bool mEmbedUsedFonts                    : 1;  //< Whether to embed fonts that are used by the document when saving.
128     bool mEmbedLatinScriptFonts             : 1;  //< Whether to embed latin script fonts when saving.
129     bool mEmbedAsianScriptFonts             : 1;  //< Whether to embed asian script fonts when saving.
130     bool mEmbedComplexScriptFonts           : 1;  //< Whether to embed complex script fonts when saving.
131     bool mEmbedSystemFonts                  : 1;  //< Whether to embed also system fonts.
132 
133     // non-ui-compatibility flags:
134     bool mbOldNumbering                             : 1;
135     bool mbIgnoreFirstLineIndentInNumbering         : 1;   // #i47448#
136     bool mbDoNotJustifyLinesWithManualBreak         : 1;   // #i49277#
137     bool mbDoNotResetParaAttrsForNumFont            : 1;   // #i53199#
138     bool mbTableRowKeep                             : 1;
139     bool mbIgnoreTabsAndBlanksForLineCalculation    : 1;   // #i3952#
140     bool mbDoNotCaptureDrawObjsOnPage               : 1;   // #i62875#
141     bool mbClipAsCharacterAnchoredWriterFlyFrames   : 1;
142     bool mbUnixForceZeroExtLeading                  : 1;   // #i60945#
143     bool mbTabRelativeToIndent                      : 1;   // #i24363# tab stops relative to indent
144     bool mbProtectForm                              : 1;
145     bool mbMsWordCompTrailingBlanks                 : 1;   // tdf#104349 tdf#104668
146     bool mbMsWordCompMinLineHeightByFly             : 1;
147     bool mbInvertBorderSpacing                      : 1;
148     bool mbCollapseEmptyCellPara                    : 1;
149     bool mbTabAtLeftIndentForParagraphsInList;             // #i89181# - see above
150     bool mbSmallCapsPercentage66;
151     bool mbTabOverflow;
152     bool mbUnbreakableNumberings;
153     bool mbClippedPictures;
154     bool mbBackgroundParaOverDrawings;
155     bool mbTabOverMargin;
156     bool mbTabOverSpacing;
157     bool mbTreatSingleColumnBreakAsPageBreak;              // tdf#76349
158     bool mbSurroundTextWrapSmall;
159     bool mbPropLineSpacingShrinksFirstLine; // fdo#79602
160     bool mbSubtractFlys; // tdf#86578
161     bool mApplyParagraphMarkFormatToNumbering;
162     bool mbAddParaLineSpacingToTableCells; // tdf#125300 tdf#134782
163 
164     bool mbLastBrowseMode                           : 1;
165     bool mbDisableOffPagePositioning; // tdf#112443
166     bool mbEmptyDbFieldHidesPara;
167     bool mbContinuousEndnotes = false;
168     bool mbProtectBookmarks;
169     bool mbProtectFields;
170     bool mbHeaderSpacingBelowLastPara;
171     bool mbFrameAutowidthWithMorePara; //tdf#124423
172     /// Gutter position: false means left (not a compatibility setting).
173     bool mbGutterAtTop;
174 
175 public:
176 
177     DocumentSettingManager(SwDoc &rDoc);
178     virtual ~DocumentSettingManager() override;
179 
180     // IDocumentSettingAccess
181     virtual bool get(/*[in]*/ DocumentSettingId id) const override;
182     virtual void set(/*[in]*/ DocumentSettingId id, /*[in]*/ bool value) override;
183     virtual const css::i18n::ForbiddenCharacters* getForbiddenCharacters(/*[in]*/ LanguageType nLang, /*[in]*/ bool bLocaleData ) const override;
184     virtual void setForbiddenCharacters(/*[in]*/ LanguageType nLang, /*[in]*/ const css::i18n::ForbiddenCharacters& rForbiddenCharacters ) override;
185     virtual std::shared_ptr<SvxForbiddenCharactersTable>& getForbiddenCharacterTable() override;
186     virtual const std::shared_ptr<SvxForbiddenCharactersTable>& getForbiddenCharacterTable() const override;
187     virtual sal_uInt16 getLinkUpdateMode( /*[in]*/bool bGlobalSettings ) const override;
188     virtual void setLinkUpdateMode( /*[in]*/ sal_uInt16 nMode ) override;
189     virtual SwFieldUpdateFlags getFieldUpdateFlags( /*[in]*/bool bGlobalSettings ) const override;
190     virtual void setFieldUpdateFlags( /*[in]*/ SwFieldUpdateFlags eMode ) override;
191     virtual CharCompressType getCharacterCompressionType() const override;
192     virtual void setCharacterCompressionType( /*[in]*/CharCompressType nType ) override;
193 
194 
195 // Replace all compatibility options with those from rSource.
196     void ReplaceCompatibilityOptions(const DocumentSettingManager& rSource);
197 
198     sal_uInt32 Getn32DummyCompatibilityOptions1() const override;
199     void Setn32DummyCompatibilityOptions1( const sal_uInt32 CompatibilityOptions1 ) override;
200     sal_uInt32 Getn32DummyCompatibilityOptions2() const override;
201     void Setn32DummyCompatibilityOptions2( const sal_uInt32 CompatibilityOptions2 ) override;
202     void dumpAsXml(xmlTextWriterPtr pWriter) const;
203 };
204 
205 }
206 
207 #endif  //_DOCSETTING_HXX
208 
209 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
210