LibreOffice Module sw (master)  1
numrule.hxx
Go to the documentation of this file.
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_INC_NUMRULE_HXX
20 #define INCLUDED_SW_INC_NUMRULE_HXX
21 
22 #include <sal/types.h>
23 #include <rtl/ustring.hxx>
24 #include <editeng/numitem.hxx>
25 #include <i18nlangtag/lang.h>
26 #include "swdllapi.h"
27 #include "swtypes.hxx"
28 #include "calbck.hxx"
29 #include "SwNumberTreeTypes.hxx"
30 #include "ndarr.hxx"
31 #include <unordered_map>
32 #include <memory>
33 #include <vector>
34 #include "charfmt.hxx"
35 
36 class SwTextFormatColl;
38 class SwNodeNum;
39 namespace vcl { class Font; }
40 class SvxBrushItem;
41 class SfxGrabBagItem;
42 class SwDoc;
43 class SwFormatVertOrient;
44 class SwTextNode;
45 class Size;
46 class SwWrtShell;
47 
48 const sal_Unicode cBulletChar = 0x2022;
49 
50 class SW_DLLPUBLIC SwNumFormat final : public SvxNumberFormat, public SwClient
51 {
52  std::unique_ptr<SwFormatVertOrient> m_pVertOrient;
53  //For i120928,record the cp info of graphic within bullet
55  SAL_DLLPRIVATE void UpdateNumNodes(SwDoc& rDoc);
56 
57  using SvxNumberFormat::operator ==;
58  using SvxNumberFormat::operator !=;
59 
60  virtual void SwClientNotify(const SwModify&, const SfxHint&) override;
61 
62 public:
63  SwNumFormat();
64  SwNumFormat( const SwNumFormat& );
65  SwNumFormat( const SvxNumberFormat&, SwDoc* pDoc);
66 
67  virtual ~SwNumFormat() override;
68 
70 
71  bool operator==( const SwNumFormat& ) const;
72  bool operator!=( const SwNumFormat& r ) const { return !(*this == r); }
73 
74  SwCharFormat* GetCharFormat() const { return const_cast<SwCharFormat*>(static_cast<const SwCharFormat*>(GetRegisteredIn())); }
75  void SetCharFormat( SwCharFormat* );
76 
78  virtual OUString GetCharFormatName() const override;
79 
80  //For i120928,access the cp info of graphic within bullet
81  void SetGrfBulletCP(sal_Unicode cP){m_cGrfBulletCP = cP;}
82  sal_Unicode GetGrfBulletCP() const {return m_cGrfBulletCP;}
83 
84  virtual void SetGraphicBrush( const SvxBrushItem* pBrushItem, const Size* pSize = nullptr, const sal_Int16* pOrient = nullptr) override;
85 
86  const SwFormatVertOrient* GetGraphicOrientation() const;
87 
88  bool IsEnumeration() const; // #i22362#
89  bool IsItemize() const; // #i29560#
90 };
91 
94 {
95 
96 public:
97  typedef std::vector< SwTextNode* > tTextNodeList;
98  typedef std::vector< SwTextFormatColl* > tParagraphStyleList;
99 
100  struct Extremities
101  {
102  sal_uInt16 nPrefixChars;
103  sal_uInt16 nSuffixChars;
104  };
105 
106 private:
107  friend void FinitCore();
108 
109  static SwNumFormat* saBaseFormats [ RULE_END ][ MAXLEVEL ];
110  static const sal_uInt16 saDefNumIndents[ MAXLEVEL ];
112  static SwNumFormat* saLabelAlignmentBaseFormats [ RULE_END ][ MAXLEVEL ];
113  static sal_uInt16 snRefCount;
114 
115  std::unique_ptr<SwNumFormat> maFormats[ MAXLEVEL ];
116 
118  tTextNodeList maTextNodeList;
119 
121  tParagraphStyleList maParagraphStyleList;
122 
124  std::unordered_map<OUString, SwNumRule *> * mpNumRuleMap;
125 
126  OUString msName;
128  sal_uInt16 mnPoolFormatId;
129  sal_uInt16 mnPoolHelpId;
131  bool mbAutoRuleFlag : 1;
132  bool mbInvalidRuleFlag : 1;
133  bool mbContinusNum : 1;
134  bool mbAbsSpaces : 1;
135  bool mbHidden : 1;
138 
140  OUString msDefaultListId;
141  std::shared_ptr<SfxGrabBagItem> mpGrabBagItem;
142 
143 public:
145  SwNumRule( const OUString& rNm,
146  const SvxNumberFormat::SvxNumPositionAndSpaceMode eDefaultNumberFormatPositionAndSpaceMode,
148 
149  SwNumRule( const SwNumRule& );
150  ~SwNumRule();
151 
152  SwNumRule& operator=( const SwNumRule& );
153  bool operator==( const SwNumRule& ) const;
154  bool operator!=( const SwNumRule& r ) const { return !(*this == r); }
155 
156  void Reset( const OUString& rName );
157 
158  const SwNumFormat* GetNumFormat( sal_uInt16 i ) const;
159  const SwNumFormat& Get( sal_uInt16 i ) const;
160 
161  bool IsHidden( ) const { return mbHidden; }
162  void SetHidden( bool bValue ) { mbHidden = bValue; }
163 
164  void Set( sal_uInt16 i, const SwNumFormat* );
165  void Set( sal_uInt16 i, const SwNumFormat& );
166  OUString MakeNumString( const SwNodeNum&, bool bInclStrings = true ) const;
169  OUString MakeNumString( const SwNumberTree::tNumberVector & rNumVector,
170  const bool bInclStrings = true,
171  const bool bOnlyArabic = false,
172  const unsigned int _nRestrictToThisLevel = MAXLEVEL,
173  Extremities* pExtremities = nullptr,
174  LanguageType nLang = LANGUAGE_SYSTEM) const;
175  OUString MakeRefNumString( const SwNodeNum& rNodeNum,
176  const bool bInclSuperiorNumLabels,
177  const int nRestrictInclToThisLevel ) const;
178  OUString MakeParagraphStyleListString() const;
179 
181  void GetTextNodeList( SwNumRule::tTextNodeList& rTextNodeList ) const;
182  SwNumRule::tTextNodeList::size_type GetTextNodeListSize() const;
183 
184  void AddTextNode( SwTextNode& rTextNode );
185  void RemoveTextNode( SwTextNode& rTextNode );
186 
187  SwNumRule::tParagraphStyleList::size_type GetParagraphStyleListSize() const;
188  void AddParagraphStyle( SwTextFormatColl& rTextFormatColl );
189  void RemoveParagraphStyle( SwTextFormatColl& rTextFormatColl );
190 
191  void SetDefaultListId( const OUString& sDefaultListId )
192  {
193  msDefaultListId = sDefaultListId;
194  }
195  const OUString& GetDefaultListId() const
196  {
197  return msDefaultListId;
198  }
204  void SetNumRuleMap(
205  std::unordered_map<OUString, SwNumRule *>* pNumRuleMap );
206 
207  static OUString GetOutlineRuleName();
208 
209  static sal_uInt16 GetNumIndent( sal_uInt8 nLvl );
210  static sal_uInt16 GetBullIndent( sal_uInt8 nLvl );
211 
212  SwNumRuleType GetRuleType() const { return meRuleType; }
213  void SetRuleType( SwNumRuleType eNew ) { meRuleType = eNew;
214  mbInvalidRuleFlag = true; }
215 
219  SwNumRule& CopyNumRule( SwDoc&, const SwNumRule& );
220 
223  void CheckCharFormats( SwDoc& rDoc );
224 
225  const OUString& GetName() const { return msName; }
226 
227  void SetName( const OUString& rNm,
228  IDocumentListsAccess& rDocListAccess );
229 
230  bool IsAutoRule() const { return mbAutoRuleFlag; }
231  void SetAutoRule( bool bFlag ) { mbAutoRuleFlag = bFlag; }
232 
233  bool IsInvalidRule() const { return mbInvalidRuleFlag; }
234  void SetInvalidRule( bool bFlag );
235 
236  bool IsContinusNum() const { return mbContinusNum; }
237  void SetContinusNum( bool bFlag ) { mbContinusNum = bFlag; }
238 
239  bool IsAbsSpaces() const { return mbAbsSpaces; }
240  void SetAbsSpaces( bool bFlag ) { mbAbsSpaces = bFlag; }
241 
242  bool IsOutlineRule() const { return meRuleType == OUTLINE_RULE; }
243 
244  bool IsCountPhantoms() const { return mbCountPhantoms; }
245  void SetCountPhantoms(bool bCountPhantoms);
246 
247  bool IsUsedByRedline() const { return mbUsedByRedline; }
248  void SetUsedByRedline(bool bUsed ) { mbUsedByRedline = bUsed; }
249 
251  sal_uInt16 GetPoolFormatId() const { return mnPoolFormatId; }
252  void SetPoolFormatId( sal_uInt16 nId ) { mnPoolFormatId = nId; }
253 
255  sal_uInt16 GetPoolHelpId() const { return mnPoolHelpId; }
256  void SetPoolHelpId( sal_uInt16 nId ) { mnPoolHelpId = nId; }
257  sal_uInt8 GetPoolHlpFileId() const { return mnPoolHlpFileId; }
258  void SetPoolHlpFileId( sal_uInt8 nId ) { mnPoolHlpFileId = nId; }
259 
260  void SetSvxRule(const SvxNumRule&, SwDoc* pDoc);
261  SvxNumRule MakeSvxNumRule() const;
262 
264  void ChangeIndent( const sal_Int32 nDiff );
266  void SetIndent( const short nNewIndent,
267  const sal_uInt16 nListLevel );
270  void SetIndentOfFirstListLevelAndChangeOthers( const short nNewIndent );
271 
272  void Validate(const SwDoc& rDoc);
273  void dumpAsXml(xmlTextWriterPtr w) const;
274  void GetGrabBagItem(css::uno::Any& rVal) const;
275  void SetGrabBagItem(const css::uno::Any& rVal);
276 };
277 
279 namespace numfunc
280 {
282  OUString const & GetDefBulletFontname();
283 
289 
292 
295 
302 
308  bool NumDownChangesIndent(const SwWrtShell& rShell);
309 
311 }
312 
313 #endif // INCLUDED_SW_INC_NUMRULE_HXX
314 
315 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
SvxNumberFormat & operator=(const SvxNumberFormat &)
sal_uInt16 mnPoolHelpId
HelpId for this Pool-style.
Definition: numrule.hxx:129
Represents the style of a paragraph.
Definition: fmtcol.hxx:56
void SetAutoRule(bool bFlag)
Definition: numrule.hxx:231
bool IsHidden() const
Definition: numrule.hxx:161
void SetPoolHlpFileId(sal_uInt8 nId)
Definition: numrule.hxx:258
void SetGrfBulletCP(sal_Unicode cP)
Definition: numrule.hxx:81
sal_uInt16 GetPoolFormatId() const
Query and set PoolFormat IDs.
Definition: numrule.hxx:251
const OUString & GetDefaultListId() const
Definition: numrule.hxx:195
bool IsAutoRule() const
Definition: numrule.hxx:230
Definition: doc.hxx:188
const sal_Unicode cBulletChar
Character for lists.
Definition: numrule.hxx:48
constexpr sal_uInt8 MAXLEVEL
Definition: swtypes.hxx:93
void SetContinusNum(bool bFlag)
Definition: numrule.hxx:237
sal_uInt8 mnPoolHlpFileId
FilePos at Doc on style helps.
Definition: numrule.hxx:130
SwNumRuleType
Definition: numrule.hxx:92
const OUString & GetName() const
Definition: numrule.hxx:225
sal_uInt16 GetPoolHelpId() const
Query and set Help-IDs for document styles.
Definition: numrule.hxx:255
void SetHidden(bool bValue)
Definition: numrule.hxx:162
virtual void SwClientNotify(const SwModify &, const SfxHint &rHint) override
Definition: calbck.cxx:121
void SetAbsSpaces(bool bFlag)
Definition: numrule.hxx:240
static LanguageType nLang
Definition: srtdlg.cxx:51
Used by the UI to modify the document model.
Definition: wrtsh.hxx:93
sal_uInt16 sal_Unicode
bool mbUsedByRedline
Definition: numrule.hxx:137
OUString msDefaultListId
Definition: numrule.hxx:140
bool operator==(const SvxNumberFormat &) const
sal_Unicode GetBulletChar(sal_uInt8 nLevel)
retrieve unicode of character used for the default bullet list for the given list level ...
Definition: number.cxx:1339
void SetCharFormatName(const OUString &rSet)
SvxNumberFormat::SvxNumPositionAndSpaceMode meDefaultNumberFormatPositionAndSpaceMode
it needs to export as part of tracked numbering change
Definition: numrule.hxx:139
void SetPoolFormatId(sal_uInt16 nId)
Definition: numrule.hxx:252
bool IsContinusNum() const
Definition: numrule.hxx:236
SwCharFormat * GetCharFormat() const
Definition: numrule.hxx:74
struct _xmlTextWriter * xmlTextWriterPtr
std::unique_ptr< SwFormatVertOrient > m_pVertOrient
Definition: numrule.hxx:52
bool IsCountPhantoms() const
Definition: numrule.hxx:244
bool IsInvalidRule() const
Definition: numrule.hxx:233
SwNumRuleType GetRuleType() const
Definition: numrule.hxx:212
bool operator!=(const SwNumRule &r) const
Definition: numrule.hxx:154
const vcl::Font & GetDefBulletFont()
retrieve font used for the default bullet list characters
Definition: number.cxx:1334
void FinitCore()
Definition: init.cxx:666
SwNumRuleType meRuleType
Definition: numrule.hxx:127
void SetRuleType(SwNumRuleType eNew)
Definition: numrule.hxx:213
sal_Unicode m_cGrfBulletCP
Definition: numrule.hxx:54
void SetPoolHelpId(sal_uInt16 nId)
Definition: numrule.hxx:256
sal_uInt8 GetPoolHlpFileId() const
Definition: numrule.hxx:257
std::unordered_map< OUString, SwNumRule * > * mpNumRuleMap
unordered_map containing "name->rule" relation
Definition: numrule.hxx:124
#define SW_DLLPUBLIC
Definition: swdllapi.h:28
Represents the style of a text portion.
Definition: charfmt.hxx:26
Provides access to the lists of a document.
std::vector< tSwNumTreeNumber > tNumberVector
sal_uInt16 nPrefixChars
Definition: numrule.hxx:102
bool operator!=(const SwNumFormat &r) const
Definition: numrule.hxx:72
SwTextNode is a paragraph in the document model.
Definition: ndtxt.hxx:79
SvxNumberFormat::SvxNumPositionAndSpaceMode GetDefaultPositionAndSpaceMode()
Definition: number.cxx:1500
bool IsDefBulletFontUserDefined()
determine if default bullet font is user defined
Definition: number.cxx:1329
void SetDefaultListId(const OUString &sDefaultListId)
Definition: numrule.hxx:191
unsigned char sal_uInt8
OUString const & GetDefBulletFontname()
retrieve font family name used for the default bullet list characters
Definition: number.cxx:1324
static sal_uInt16 snRefCount
Definition: numrule.hxx:113
sal_uInt16 nSuffixChars
Definition: numrule.hxx:103
tTextNodeList maTextNodeList
container for associated text nodes
Definition: numrule.hxx:118
virtual OUString GetCharFormatName() const
const SwModify * GetRegisteredIn() const
Definition: calbck.hxx:165
bool IsUsedByRedline() const
Definition: numrule.hxx:247
std::vector< SwTextNode * > tTextNodeList
Definition: numrule.hxx:97
virtual void SetGraphicBrush(const SvxBrushItem *pBrushItem, const Size *pSize=nullptr, const sal_Int16 *pOrient=nullptr)
std::shared_ptr< SfxGrabBagItem > mpGrabBagItem
Style InteropGrabBag.
Definition: numrule.hxx:141
bool NumDownChangesIndent(const SwWrtShell &rShell)
Decides if increasing ("downing") the numbering level will change the amount of indentation or not...
Definition: number.cxx:1456
tParagraphStyleList maParagraphStyleList
container for associated paragraph styles
Definition: numrule.hxx:121
bool IsAbsSpaces() const
Definition: numrule.hxx:239
SVXCORE_DLLPUBLIC MSO_SPT Get(const OUString &)
sal_Unicode GetGrfBulletCP() const
Definition: numrule.hxx:82
void SetUsedByRedline(bool bUsed)
Definition: numrule.hxx:248
bool operator==(const ScCsvLayoutData &rData1, const ScCsvLayoutData &rData2)
sal_uInt16 mnPoolFormatId
Id-for NumRules created "automatically".
Definition: numrule.hxx:128
std::vector< SwTextFormatColl * > tParagraphStyleList
Definition: numrule.hxx:98
bool IsOutlineRule() const
Definition: numrule.hxx:242
bool ChangeIndentOnTabAtFirstPosOfFirstListItem()
configuration, if at first position of the first list item the -key increased the indent of the ...
Definition: number.cxx:1451
OUString msName
Definition: numrule.hxx:126
bool mbCountPhantoms
Definition: numrule.hxx:136
namespace for static functions and methods for numbering and bullets
Definition: number.cxx:1118