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 
47 const sal_Unicode cBulletChar = 0x2022;
48 
50 {
51  std::unique_ptr<SwFormatVertOrient> m_pVertOrient;
52  //For i120928,record the cp info of graphic within bullet
54  SAL_DLLPRIVATE void UpdateNumNodes( SwDoc* pDoc );
55 
56  using SvxNumberFormat::operator ==;
57  using SvxNumberFormat::operator !=;
58 
59 protected:
60  virtual void Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew ) 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* maBaseFormats [ RULE_END ][ MAXLEVEL ];
110  static const sal_uInt16 maDefNumIndents[ MAXLEVEL ];
112  static SwNumFormat* maLabelAlignmentBaseFormats [ RULE_END ][ MAXLEVEL ];
113  static sal_uInt16 mnRefCount;
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  const SwNumFormat* GetNumFormat( sal_uInt16 i ) const;
157  const SwNumFormat& Get( sal_uInt16 i ) const;
158 
159  bool IsHidden( ) const { return mbHidden; }
160  void SetHidden( bool bValue ) { mbHidden = bValue; }
161 
162  void Set( sal_uInt16 i, const SwNumFormat* );
163  void Set( sal_uInt16 i, const SwNumFormat& );
164  OUString MakeNumString( const SwNodeNum&, bool bInclStrings = true ) const;
167  OUString MakeNumString( const SwNumberTree::tNumberVector & rNumVector,
168  const bool bInclStrings = true,
169  const bool bOnlyArabic = false,
170  const unsigned int _nRestrictToThisLevel = MAXLEVEL,
171  Extremities* pExtremities = nullptr,
172  LanguageType nLang = LANGUAGE_SYSTEM) const;
173  OUString MakeRefNumString( const SwNodeNum& rNodeNum,
174  const bool bInclSuperiorNumLabels,
175  const int nRestrictInclToThisLevel ) const;
176 
178  void GetTextNodeList( SwNumRule::tTextNodeList& rTextNodeList ) const;
179  SwNumRule::tTextNodeList::size_type GetTextNodeListSize() const;
180 
181  void AddTextNode( SwTextNode& rTextNode );
182  void RemoveTextNode( SwTextNode& rTextNode );
183 
184  SwNumRule::tParagraphStyleList::size_type GetParagraphStyleListSize() const;
185  void AddParagraphStyle( SwTextFormatColl& rTextFormatColl );
186  void RemoveParagraphStyle( SwTextFormatColl& rTextFormatColl );
187 
188  void SetDefaultListId( const OUString& sDefaultListId )
189  {
190  msDefaultListId = sDefaultListId;
191  }
192  const OUString& GetDefaultListId() const
193  {
194  return msDefaultListId;
195  }
201  void SetNumRuleMap(
202  std::unordered_map<OUString, SwNumRule *>* pNumRuleMap );
203 
204  static OUString GetOutlineRuleName();
205 
206  static sal_uInt16 GetNumIndent( sal_uInt8 nLvl );
207  static sal_uInt16 GetBullIndent( sal_uInt8 nLvl );
208 
209  SwNumRuleType GetRuleType() const { return meRuleType; }
210  void SetRuleType( SwNumRuleType eNew ) { meRuleType = eNew;
211  mbInvalidRuleFlag = true; }
212 
216  SwNumRule& CopyNumRule( SwDoc*, const SwNumRule& );
217 
220  void CheckCharFormats( SwDoc* pDoc );
221 
222  const OUString& GetName() const { return msName; }
223 
224  void SetName( const OUString& rNm,
225  IDocumentListsAccess& rDocListAccess );
226 
227  bool IsAutoRule() const { return mbAutoRuleFlag; }
228  void SetAutoRule( bool bFlag ) { mbAutoRuleFlag = bFlag; }
229 
230  bool IsInvalidRule() const { return mbInvalidRuleFlag; }
231  void SetInvalidRule( bool bFlag );
232 
233  bool IsContinusNum() const { return mbContinusNum; }
234  void SetContinusNum( bool bFlag ) { mbContinusNum = bFlag; }
235 
236  bool IsAbsSpaces() const { return mbAbsSpaces; }
237  void SetAbsSpaces( bool bFlag ) { mbAbsSpaces = bFlag; }
238 
239  bool IsOutlineRule() const { return meRuleType == OUTLINE_RULE; }
240 
241  bool IsCountPhantoms() const { return mbCountPhantoms; }
242  void SetCountPhantoms(bool bCountPhantoms);
243 
244  bool IsUsedByRedline() const { return mbUsedByRedline; }
245  void SetUsedByRedline(bool bUsed ) { mbUsedByRedline = bUsed; }
246 
248  sal_uInt16 GetPoolFormatId() const { return mnPoolFormatId; }
249  void SetPoolFormatId( sal_uInt16 nId ) { mnPoolFormatId = nId; }
250 
252  sal_uInt16 GetPoolHelpId() const { return mnPoolHelpId; }
253  void SetPoolHelpId( sal_uInt16 nId ) { mnPoolHelpId = nId; }
254  sal_uInt8 GetPoolHlpFileId() const { return mnPoolHlpFileId; }
255  void SetPoolHlpFileId( sal_uInt8 nId ) { mnPoolHlpFileId = nId; }
256 
257  void SetSvxRule(const SvxNumRule&, SwDoc* pDoc);
258  SvxNumRule MakeSvxNumRule() const;
259 
261  void ChangeIndent( const sal_Int32 nDiff );
263  void SetIndent( const short nNewIndent,
264  const sal_uInt16 nListLevel );
267  void SetIndentOfFirstListLevelAndChangeOthers( const short nNewIndent );
268 
269  void Validate();
270  void dumpAsXml(xmlTextWriterPtr w) const;
271  void GetGrabBagItem(css::uno::Any& rVal) const;
272  void SetGrabBagItem(const css::uno::Any& rVal);
273 };
274 
276 namespace numfunc
277 {
279  OUString const & GetDefBulletFontname();
280 
286 
289 
292 
299 
301 }
302 
303 #endif // INCLUDED_SW_INC_NUMRULE_HXX
304 
305 /* 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:55
void SetAutoRule(bool bFlag)
Definition: numrule.hxx:228
bool IsHidden() const
Definition: numrule.hxx:159
void SetPoolHlpFileId(sal_uInt8 nId)
Definition: numrule.hxx:255
void SetGrfBulletCP(sal_Unicode cP)
Definition: numrule.hxx:81
sal_uInt16 GetPoolFormatId() const
Query and set PoolFormat IDs.
Definition: numrule.hxx:248
const OUString & GetDefaultListId() const
Definition: numrule.hxx:192
bool IsAutoRule() const
Definition: numrule.hxx:227
Definition: doc.hxx:185
const sal_Unicode cBulletChar
Character for lists.
Definition: numrule.hxx:47
void SetContinusNum(bool bFlag)
Definition: numrule.hxx:234
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:222
sal_uInt16 GetPoolHelpId() const
Query and set Help-IDs for document styles.
Definition: numrule.hxx:252
void SetHidden(bool bValue)
Definition: numrule.hxx:160
void SetAbsSpaces(bool bFlag)
Definition: numrule.hxx:237
static LanguageType nLang
Definition: srtdlg.cxx:58
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:1269
void SetCharFormatName(const OUString &rSet)
const sal_uInt8 MAXLEVEL
Definition: swtypes.hxx:95
void SetPoolFormatId(sal_uInt16 nId)
Definition: numrule.hxx:249
bool IsContinusNum() const
Definition: numrule.hxx:233
SwCharFormat * GetCharFormat() const
Definition: numrule.hxx:74
struct _xmlTextWriter * xmlTextWriterPtr
std::unique_ptr< SwFormatVertOrient > m_pVertOrient
Definition: numrule.hxx:51
bool IsCountPhantoms() const
Definition: numrule.hxx:241
bool IsInvalidRule() const
Definition: numrule.hxx:230
SwNumRuleType GetRuleType() const
Definition: numrule.hxx:209
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:1264
void FinitCore()
Definition: init.cxx:676
SwNumRuleType meRuleType
Definition: numrule.hxx:127
void SetRuleType(SwNumRuleType eNew)
Definition: numrule.hxx:210
sal_Unicode m_cGrfBulletCP
Definition: numrule.hxx:53
void SetPoolHelpId(sal_uInt16 nId)
Definition: numrule.hxx:253
sal_uInt8 GetPoolHlpFileId() const
Definition: numrule.hxx:254
std::unordered_map< OUString, SwNumRule * > * mpNumRuleMap
unordered_map containing "name->rule" relation
Definition: numrule.hxx:124
#define SW_DLLPUBLIC
Definition: swdllapi.h:28
Provides access to the lists of a document.
std::vector< tSwNumTreeNumber > tNumberVector
const SvxNumberFormat::SvxNumPositionAndSpaceMode meDefaultNumberFormatPositionAndSpaceMode
it needs to export as part of tracked numbering change
Definition: numrule.hxx:139
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:1386
bool IsDefBulletFontUserDefined()
determine if default bullet font is user defined
Definition: number.cxx:1259
void SetDefaultListId(const OUString &sDefaultListId)
Definition: numrule.hxx:188
unsigned char sal_uInt8
OUString const & GetDefBulletFontname()
retrieve font family name used for the default bullet list characters
Definition: number.cxx:1254
sal_uInt16 nSuffixChars
Definition: numrule.hxx:103
tTextNodeList maTextNodeList
container for associated text nodes
Definition: numrule.hxx:118
static sal_uInt16 mnRefCount
Definition: numrule.hxx:113
virtual OUString GetCharFormatName() const
const SwModify * GetRegisteredIn() const
Definition: calbck.hxx:157
bool IsUsedByRedline() const
Definition: numrule.hxx:244
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
tParagraphStyleList maParagraphStyleList
container for associated paragraph styles
Definition: numrule.hxx:121
bool IsAbsSpaces() const
Definition: numrule.hxx:236
SVX_DLLPUBLIC MSO_SPT Get(const OUString &)
sal_Unicode GetGrfBulletCP() const
Definition: numrule.hxx:82
void SetUsedByRedline(bool bUsed)
Definition: numrule.hxx:245
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:239
virtual void Modify(const SfxPoolItem *pOldValue, const SfxPoolItem *pNewValue)
Definition: calbck.cxx:130
bool ChangeIndentOnTabAtFirstPosOfFirstListItem()
configuration, if at first position of the first list item the -key increased the indent of the ...
Definition: number.cxx:1381
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:1046