summaryrefslogtreecommitdiffstats
path: root/sw/inc/IDocumentSettingAccess.hxx
blob: 74b123dc462e2f6ee2f8fa2f0e72d849635f2d63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
/* -*- 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 .
 */

#pragma once

#include <sal/types.h>
#include "fldupde.hxx"
#include <i18nlangtag/lang.h>
#include <memory>

class SvxForbiddenCharactersTable;
namespace com::sun::star::i18n
{
struct ForbiddenCharacters;
}
enum class CharCompressType;

enum class DocumentSettingId
{
    // COMPATIBILITY FLAGS START
    PARA_SPACE_MAX,
    PARA_SPACE_MAX_AT_PAGES,

    TAB_COMPAT,

    ADD_FLY_OFFSETS,
    ADD_VERTICAL_FLY_OFFSETS,

    OLD_NUMBERING,

    ADD_EXT_LEADING,
    USE_VIRTUAL_DEVICE,
    USE_HIRES_VIRTUAL_DEVICE,
    OLD_LINE_SPACING,
    ADD_PARA_SPACING_TO_TABLE_CELLS,
    ADD_PARA_LINE_SPACING_TO_TABLE_CELLS,
    USE_FORMER_OBJECT_POS,
    USE_FORMER_TEXT_WRAPPING,
    CONSIDER_WRAP_ON_OBJECT_POSITION,

    IGNORE_FIRST_LINE_INDENT_IN_NUMBERING,
    DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK,
    TREAT_SINGLE_COLUMN_BREAK_AS_PAGE_BREAK,
    DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT,
    // tdf#159382: MS Word compatible handling of space between footnote number and text
    NO_GAP_AFTER_NOTE_NUMBER,

    DO_NOT_CAPTURE_DRAW_OBJS_ON_PAGE,
    TABLE_ROW_KEEP,
    IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION,
    CLIP_AS_CHARACTER_ANCHORED_WRITER_FLY_FRAME,

    // tdf#104349 tdf#104668
    MS_WORD_COMP_TRAILING_BLANKS,
    // tdf#128197 MS Word in some modes can have line height based on shape height, not on font
    MS_WORD_COMP_MIN_LINE_HEIGHT_BY_FLY,
    UNIX_FORCE_ZERO_EXT_LEADING,
    TABS_RELATIVE_TO_INDENT,
    PROTECT_FORM,
    // #i89181#
    TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST,
    INVERT_BORDER_SPACING,
    COLLAPSE_EMPTY_CELL_PARA,
    SMALL_CAPS_PERCENTAGE_66,
    TAB_OVERFLOW,
    UNBREAKABLE_NUMBERINGS,
    CLIPPED_PICTURES,
    BACKGROUND_PARA_OVER_DRAWINGS,
    TAB_OVER_MARGIN,
    TAB_OVER_SPACING,
    // MS Word still wraps text around objects with less space than LO would.
    SURROUND_TEXT_WRAP_SMALL,
    PROP_LINE_SPACING_SHRINKS_FIRST_LINE,
    SUBTRACT_FLYS,
    // tdf#112443 disable off-page content positioning
    DISABLE_OFF_PAGE_POSITIONING,
    EMPTY_DB_FIELD_HIDES_PARA,
    // tdf#129448: Auto first-line indent should not be effected by line space
    AUTO_FIRST_LINE_INDENT_DISREGARD_LINE_SPACE,
    HYPHENATE_URLS, ///< tdf#152952
    DO_NOT_BREAK_WRAPPED_TABLES,
    ALLOW_TEXT_AFTER_FLOATING_TABLE_BREAK,
    // tdf#119908 new paragraph justification
    JUSTIFY_LINES_WITH_SHRINKING,
    // COMPATIBILITY FLAGS END
    BROWSE_MODE,
    HTML_MODE,
    GLOBAL_DOCUMENT,
    GLOBAL_DOCUMENT_SAVE_LINKS,
    LABEL_DOCUMENT,
    PURGE_OLE,
    KERN_ASIAN_PUNCTUATION,
    MATH_BASELINE_ALIGNMENT,
    STYLES_NODEFAULT,
    EMBED_FONTS,
    EMBED_USED_FONTS,
    EMBED_LATIN_SCRIPT_FONTS,
    EMBED_ASIAN_SCRIPT_FONTS,
    EMBED_COMPLEX_SCRIPT_FONTS,
    EMBED_SYSTEM_FONTS,
    APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING,
    CONTINUOUS_ENDNOTES,
    PROTECT_BOOKMARKS,
    PROTECT_FIELDS,
    HEADER_SPACING_BELOW_LAST_PARA,
    FRAME_AUTOWIDTH_WITH_MORE_PARA,
    GUTTER_AT_TOP,
    // footnoteContainer default position is the page end instead of the column end
    // only if "evenly distributed" is set, and "collected at the end" is not set
    FOOTNOTE_IN_COLUMN_TO_PAGEEND,
    // Should we display follow by symbol for numbered paragraph if numbering exists, but "None"?
    NO_NUMBERING_SHOW_FOLLOWBY,
    // drop cap punctuation: smaller dashes, bullet, asterisks, quotation marks etc.
    // by extending the rounding box of the glyph to the baseline
    DROP_CAP_PUNCTUATION,
    // render NBSP as standard-space-width (prettier when justified)
    USE_VARIABLE_WIDTH_NBSP,
};

/** Provides access to settings of a document
 */
class IDocumentSettingAccess
{
public:
    /** Return the specified document setting.

       @param id
       [in] the identifier of the document setting to be returned.
       See above for a list of valid document setting identifiers.

       @returns
       the value of the requested document setting.
    */
    virtual bool get(/*[in]*/ DocumentSettingId id) const = 0;

    /** Set the specified document setting.

        @param id
        [in] the identifier of the document setting to be set.
        See above for a list of valid document setting identifiers.

        @param value
        [in] the new value of the specified document setting.
    */
    virtual void set(/*[in]*/ DocumentSettingId id, /*[in]*/ bool value) = 0;

    /** Return the forbidden characters.

       @param nLang
       [in] the language for which the forbidden character list is returned.

       @param bLocaleData
       [in] if set and there is no user defined forbidden character list for
            language lang, the default list for language lang will be returned.

       @returns
       a list of forbidden characters.
    */
    virtual const css::i18n::ForbiddenCharacters*
    getForbiddenCharacters(/*[in]*/ LanguageType nLang, /*[in]*/ bool bLocaleData) const = 0;

    /** Set the forbidden characters.

       @param nLang
       [in] the language for which the forbidden character list should be set.

       @param rForbiddenCharacters
       [in] the new list of forbidden characters for language lang.
    */
    virtual void
    setForbiddenCharacters(/*[in]*/ LanguageType nLang,
                           /*[in]*/ const css::i18n::ForbiddenCharacters& rForbiddenCharacters)
        = 0;

    /** Get the forbidden character table and creates one if necessary.

       @returns
       the forbidden characters table.
    */
    virtual std::shared_ptr<SvxForbiddenCharactersTable>& getForbiddenCharacterTable() = 0;

    /** Get the forbidden character table.

       @returns
       the forbidden characters table.
    */
    virtual const std::shared_ptr<SvxForbiddenCharactersTable>&
    getForbiddenCharacterTable() const = 0;

    /** Get the current link update mode.

       @param bGlobalSettings
       [in] if set, the link update mode is obtained from the module,
            if it is set to GLOBALSETTING

       @returns
       the current link update mode.
    */
    virtual sal_uInt16 getLinkUpdateMode(/*[in]*/ bool bGlobalSettings) const = 0;

    /** Set the current link update mode.

       @param nMode
       [in] the new link update mode.
    */
    virtual void setLinkUpdateMode(/*[in]*/ sal_uInt16 nMode) = 0;

    /** Get the current field update mode.

       @param bGlobalSettings
       [in] if set, the field update mode is obtained from the module,
            if it is set to GLOBALSETTING

       @returns
       the current field update mode.
    */
    virtual SwFieldUpdateFlags getFieldUpdateFlags(/*[in]*/ bool bGlobalSettings) const = 0;

    /** Set the current field update mode.

       @param nMode
       [in] the new field update mode.
    */
    virtual void setFieldUpdateFlags(/*[in]*/ SwFieldUpdateFlags nMode) = 0;

    /** Get the character compression type for Asian characters.

       @returns
       the current character compression mode.
    */
    virtual CharCompressType getCharacterCompressionType() const = 0;

    /** Set the character compression type for Asian characters.

       @param nMode
       [in] the new character compression type.
    */
    virtual void setCharacterCompressionType(/*[in]*/ CharCompressType nType) = 0;

    /** Get the n32DummyCompatibilityOptions1
    */
    virtual sal_uInt32 Getn32DummyCompatibilityOptions1() const = 0;

    /** Set the n32DummyCompatibilityOptions1
    */
    virtual void Setn32DummyCompatibilityOptions1(const sal_uInt32 CompatibilityOptions1) = 0;

    /** Get the n32DummyCompatibilityOptions2
    */
    virtual sal_uInt32 Getn32DummyCompatibilityOptions2() const = 0;

    /** Set the n32DummyCompatibilityOptions2
    */
    virtual void Setn32DummyCompatibilityOptions2(const sal_uInt32 CompatibilityOptions2) = 0;

    virtual sal_Int32 getImagePreferredDPI() = 0;
    virtual void setImagePreferredDPI(sal_Int32 nValue) = 0;

protected:
    virtual ~IDocumentSettingAccess(){};
};

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */