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_TOX_HXX
20 #define INCLUDED_SW_INC_TOX_HXX
21
22 #include <vector>
23 #include <optional>
24
25 #include <cppuhelper/weakref.hxx>
26 #include <editeng/svxenum.hxx>
27 #include <i18nlangtag/lang.h>
28 #include <o3tl/typed_flags_set.hxx>
29 #include <sal/log.hxx>
30 #include <svl/listener.hxx>
31 #include <svl/poolitem.hxx>
32
33 #include "calbck.hxx"
34 #include "hints.hxx"
35 #include "swtypes.hxx"
36 #include "toxe.hxx"
37
38 namespace com::sun::star {
39 namespace text { class XDocumentIndexMark; }
40 }
41 class SwTOXType;
42 class SwTOXMark;
43 class SwTextTOXMark;
44 class SwDoc;
45 class SwRootFrame;
46 class SwContentFrame;
47
48
49 typedef std::vector<SwTOXMark*> SwTOXMarks;
50
51 namespace sw {
52 struct CollectTextMarksHint final : SfxHint {
53 SwTOXMarks& m_rMarks;
CollectTextMarksHintsw::CollectTextMarksHint54 CollectTextMarksHint(SwTOXMarks& rMarks) : m_rMarks(rMarks) {}
55 };
56 struct FindContentFrameHint final : SfxHint {
57 SwContentFrame*& m_rpContentFrame;
58 const SwDoc& m_rDoc;
59 const SwRootFrame& m_rLayout;
FindContentFrameHintsw::FindContentFrameHint60 FindContentFrameHint(SwContentFrame*& rpContentFrame, const SwDoc& rDoc, const SwRootFrame& rLayout)
61 : m_rpContentFrame(rpContentFrame)
62 , m_rDoc(rDoc)
63 , m_rLayout(rLayout)
64 {}
65 };
66 struct CollectTextTOXMarksForLayoutHint final : SfxHint {
67 std::vector<std::reference_wrapper<SwTextTOXMark>>& m_rMarks;
68 const SwRootFrame* m_pLayout;
CollectTextTOXMarksForLayoutHintsw::CollectTextTOXMarksForLayoutHint69 CollectTextTOXMarksForLayoutHint(std::vector<std::reference_wrapper<SwTextTOXMark>>& rMarks, const SwRootFrame* pLayout) : m_rMarks(rMarks), m_pLayout(pLayout) {}
70 };
71 SW_DLLPUBLIC auto PrepareJumpToTOXMark(SwDoc const& rDoc, OUString const& rName)
72 -> std::optional<std::pair<SwTOXMark, sal_Int32>>;
73 }
74
75 // Entry of content index, alphabetical index or user defined index
76
77 extern const sal_Unicode C_NUM_REPL;
78 extern const sal_Unicode C_END_PAGE_NUM;
79
80 class SW_DLLPUBLIC SwTOXMark final
81 : public SfxPoolItem
82 , public sw::BroadcastingModify
83 , public SvtListener
84 {
85 friend void InitCore();
86 friend class SwTextTOXMark;
87
88 const SwTOXType* m_pType;
89 OUString m_aAltText; // Text of caption is different.
90 OUString m_aPrimaryKey;
91 OUString m_aSecondaryKey;
92
93 // three more strings for phonetic sorting
94 OUString m_aTextReading;
95 OUString m_aPrimaryKeyReading;
96 OUString m_aSecondaryKeyReading;
97
98 SwTextTOXMark* m_pTextAttr;
99
100 sal_uInt16 m_nLevel;
101 OUString m_aBookmarkName;
102 bool m_bAutoGenerated; // generated using a concordance file
103 bool m_bMainEntry; // main entry emphasized by character style
104
105 css::uno::WeakReference<css::text::XDocumentIndexMark> m_wXDocumentIndexMark;
106
107 SwTOXMark(); // to create the default attribute in InitCore
108
109 virtual void Notify(const SfxHint& rHint) override;
110
111 public:
112
113 // single argument ctors shall be explicit.
114 explicit SwTOXMark( const SwTOXType* pTyp );
115 virtual ~SwTOXMark() override;
116
117 SwTOXMark( const SwTOXMark& rCopy );
118 SwTOXMark& operator=( const SwTOXMark& rCopy );
119
120 // "pure virtual methods" of SfxPoolItem
121 virtual bool operator==( const SfxPoolItem& ) const override;
122 virtual SwTOXMark* Clone( SfxItemPool* pPool = nullptr ) const override;
123
124 void InvalidateTOXMark();
125
126 OUString GetText(SwRootFrame const* pLayout) const;
127
128 inline bool IsAlternativeText() const;
129 inline const OUString& GetAlternativeText() const;
130
131 inline void SetAlternativeText( const OUString& rAlt );
132
133 // content or user defined index
134 inline void SetLevel(sal_uInt16 nLevel);
135 inline sal_uInt16 GetLevel() const;
136 inline void SetBookmarkName( const OUString& bName);
137 inline const OUString& GetBookmarkName() const;
138
139 // for alphabetical index only
140 inline void SetPrimaryKey(const OUString& rStr );
141 inline void SetSecondaryKey(const OUString& rStr);
142 inline void SetTextReading(const OUString& rStr);
143 inline void SetPrimaryKeyReading(const OUString& rStr );
144 inline void SetSecondaryKeyReading(const OUString& rStr);
145
146 inline OUString const & GetPrimaryKey() const;
147 inline OUString const & GetSecondaryKey() const;
148 inline OUString const & GetTextReading() const;
149 inline OUString const & GetPrimaryKeyReading() const;
150 inline OUString const & GetSecondaryKeyReading() const;
151
IsAutoGenerated() const152 bool IsAutoGenerated() const {return m_bAutoGenerated;}
SetAutoGenerated(bool bSet)153 void SetAutoGenerated(bool bSet) {m_bAutoGenerated = bSet;}
154
IsMainEntry() const155 bool IsMainEntry() const {return m_bMainEntry;}
SetMainEntry(bool bSet)156 void SetMainEntry(bool bSet) { m_bMainEntry = bSet;}
157
158 inline const SwTOXType* GetTOXType() const;
159
GetTextTOXMark() const160 const SwTextTOXMark* GetTextTOXMark() const { return m_pTextAttr; }
GetTextTOXMark()161 SwTextTOXMark* GetTextTOXMark() { return m_pTextAttr; }
162
GetXTOXMark() const163 SAL_DLLPRIVATE css::uno::WeakReference<css::text::XDocumentIndexMark> const& GetXTOXMark() const
164 { return m_wXDocumentIndexMark; }
SetXTOXMark(css::uno::Reference<css::text::XDocumentIndexMark> const & xMark)165 SAL_DLLPRIVATE void SetXTOXMark(css::uno::Reference<css::text::XDocumentIndexMark> const& xMark)
166 { m_wXDocumentIndexMark = xMark; }
167 void RegisterToTOXType( SwTOXType& rMark );
168
169 static constexpr OUStringLiteral S_PAGE_DELI = u", ";
170 };
171
172 // index types
173 class SwTOXType final: public sw::BroadcastingModify
174 {
175 public:
176 SwTOXType(SwDoc& rDoc, TOXTypes eTyp, const OUString& rName);
177
178 // @@@ public copy ctor, but no copy assignment?
179 SwTOXType(const SwTOXType& rCopy);
180
181 inline const OUString& GetTypeName() const;
182 inline TOXTypes GetType() const;
GetDoc() const183 SwDoc& GetDoc() const { return m_rDoc; }
CollectTextMarks(SwTOXMarks & rMarks) const184 void CollectTextMarks(SwTOXMarks& rMarks) const
185 { const_cast<SwTOXType*>(this)->GetNotifier().Broadcast(sw::CollectTextMarksHint(rMarks)); }
FindContentFrame(const SwDoc & rDoc,const SwRootFrame & rLayout) const186 SwContentFrame* FindContentFrame(const SwDoc& rDoc, const SwRootFrame& rLayout) const
187 {
188 SwContentFrame* pContentFrame = nullptr;
189 const_cast<SwTOXType*>(this)->GetNotifier().Broadcast(sw::FindContentFrameHint(pContentFrame, rDoc, rLayout));
190 return pContentFrame;
191 }
CollectTextTOXMarksForLayout(std::vector<std::reference_wrapper<SwTextTOXMark>> & rMarks,const SwRootFrame * pLayout) const192 void CollectTextTOXMarksForLayout(std::vector<std::reference_wrapper<SwTextTOXMark>>& rMarks, const SwRootFrame* pLayout) const
193 { const_cast<SwTOXType*>(this)->GetNotifier().Broadcast(sw::CollectTextTOXMarksForLayoutHint(rMarks, pLayout)); }
194
195
196 private:
197 SwDoc& m_rDoc;
198 OUString m_aName;
199 TOXTypes m_eType;
200
201 // @@@ public copy ctor, but no copy assignment?
202 SwTOXType & operator= (const SwTOXType &) = delete;
203 };
204
205 // Structure of the index lines
206 #define FORM_TITLE 0
207 #define FORM_ALPHA_DELIMITER 1
208 #define FORM_PRIMARY_KEY 2
209 #define FORM_SECONDARY_KEY 3
210 #define FORM_ENTRY 4
211
212 /*
213 Pattern structure
214
215 <E#> - entry number <E# CharStyleName,PoolId>
216 <ET> - entry text <ET CharStyleName,PoolId>
217 <E> - entry text and number <E CharStyleName,PoolId>
218 <T> - tab stop <T,,Position,Adjust>
219 <C> - chapter info n = {0, 1, 2, 3, 4 } values of SwChapterFormat <C CharStyleName,PoolId>
220 <TX> - text token <X CharStyleName,PoolId, TOX_STYLE_DELIMITERTextContentTOX_STYLE_DELIMITER>
221 <#> - Page number <# CharStyleName,PoolId>
222 <LS> - Link start <LS>
223 <LE> - Link end <LE>
224 <A00> - Authority entry field <A02 CharStyleName, PoolId>
225 */
226
227 // These enum values are stored and must not be changed!
228 enum FormTokenType
229 {
230 TOKEN_ENTRY_NO,
231 TOKEN_ENTRY_TEXT,
232 TOKEN_ENTRY,
233 TOKEN_TAB_STOP,
234 TOKEN_TEXT,
235 TOKEN_PAGE_NUMS,
236 TOKEN_CHAPTER_INFO,
237 TOKEN_LINK_START,
238 TOKEN_LINK_END,
239 TOKEN_AUTHORITY,
240 TOKEN_END
241 };
242
243 struct SW_DLLPUBLIC SwFormToken
244 {
245 OUString sText;
246 OUString sCharStyleName;
247 SwTwips nTabStopPosition;
248 FormTokenType eTokenType;
249 sal_uInt16 nPoolId;
250 SvxTabAdjust eTabAlign;
251 sal_uInt16 nChapterFormat; //SwChapterFormat;
252 sal_uInt16 nOutlineLevel;//the maximum permitted outline level in numbering
253 sal_uInt16 nAuthorityField; //enum ToxAuthorityField
254 sal_Unicode cTabFillChar;
255 bool bWithTab; // true: do generate tab
256 // character only the tab stop
257 // #i21237#
258
SwFormTokenSwFormToken259 SwFormToken(FormTokenType eType ) :
260 nTabStopPosition(0),
261 eTokenType(eType),
262 nPoolId(USHRT_MAX),
263 eTabAlign( SvxTabAdjust::Left ),
264 nChapterFormat(0 /*CF_NUMBER*/),
265 nOutlineLevel(MAXLEVEL), //default to maximum outline level
266 nAuthorityField(0 /*AUTH_FIELD_IDENTIFIER*/),
267 cTabFillChar(' '),
268 bWithTab(true) // #i21237#
269 {}
270
271 OUString GetString() const;
272 };
273
274 struct SwFormTokenEqualToFormTokenType
275 {
276 FormTokenType eType;
277
SwFormTokenEqualToFormTokenTypeSwFormTokenEqualToFormTokenType278 SwFormTokenEqualToFormTokenType(FormTokenType _eType) : eType(_eType) {}
operator ()SwFormTokenEqualToFormTokenType279 bool operator()(const SwFormToken & rToken)
280 {
281 return rToken.eTokenType == eType;
282 }
283 };
284
285 /// Vector of tokens.
286 typedef std::vector<SwFormToken> SwFormTokens;
287
288 /**
289 Helper class that converts vectors of tokens to strings and vice
290 versa.
291 */
292 class SwFormTokensHelper
293 {
294 /// the tokens
295 SwFormTokens m_Tokens;
296
297 public:
298 /**
299 constructor
300
301 @param rStr string representation of the tokens
302 */
303 SwFormTokensHelper(const OUString & rStr);
304
305 /**
306 Returns vector of tokens.
307
308 @return vector of tokens
309 */
GetTokens() const310 const SwFormTokens & GetTokens() const { return m_Tokens; }
311 };
312
313 class SW_DLLPUBLIC SwForm
314 {
315 SwFormTokens m_aPattern[ AUTH_TYPE_END + 1 ]; // #i21237#
316 OUString m_aTemplate[ AUTH_TYPE_END + 1 ];
317
318 TOXTypes m_eType;
319 sal_uInt16 m_nFormMaxLevel;
320
321 bool m_bIsRelTabPos : 1;
322 bool m_bCommaSeparated : 1;
323
324 public:
325 SwForm( TOXTypes eTOXType = TOX_CONTENT );
326 SwForm( const SwForm& rForm );
327
328 SwForm& operator=( const SwForm& rForm );
329
330 inline void SetTemplate(sal_uInt16 nLevel, const OUString& rName);
331 inline OUString const & GetTemplate(sal_uInt16 nLevel) const;
332
333 // #i21237#
334 void SetPattern(sal_uInt16 nLevel, const SwFormTokens& rName);
335 void SetPattern(sal_uInt16 nLevel, const OUString& rStr);
336 const SwFormTokens& GetPattern(sal_uInt16 nLevel) const;
337
338 // fill tab stop positions from template to pattern- #i21237#
339 void AdjustTabStops( SwDoc const & rDoc );
340
341 inline TOXTypes GetTOXType() const;
342 inline sal_uInt16 GetFormMax() const;
343
IsRelTabPos() const344 bool IsRelTabPos() const { return m_bIsRelTabPos; }
SetRelTabPos(bool b)345 void SetRelTabPos( bool b ) { m_bIsRelTabPos = b; }
346
IsCommaSeparated() const347 bool IsCommaSeparated() const { return m_bCommaSeparated;}
SetCommaSeparated(bool b)348 void SetCommaSeparated( bool b) { m_bCommaSeparated = b;}
349
350 static sal_uInt16 GetFormMaxLevel( TOXTypes eType );
351
352 static OUString GetFormEntry();
353 static OUString GetFormTab();
354 static OUString GetFormPageNums();
355 static OUString GetFormLinkStt();
356 static OUString GetFormLinkEnd();
357 static OUString GetFormEntryNum();
358 static OUString GetFormEntryText();
359 static OUString GetFormChapterMark();
360 static OUString GetFormText();
361 static OUString GetFormAuth();
362 };
363
364 // Content to create indexes of
365 enum class SwTOXElement : sal_uInt16
366 {
367 NONE = 0x0000,
368 Mark = 0x0001,
369 OutlineLevel = 0x0002,
370 Template = 0x0004,
371 Ole = 0x0008,
372 Table = 0x0010,
373 Graphic = 0x0020,
374 Frame = 0x0040,
375 Sequence = 0x0080,
376 TableLeader = 0x0100,
377 TableInToc = 0x0200,
378 Bookmark = 0x0400,
379 Newline = 0x0800,
380 ParagraphOutlineLevel = 0x1000,
381 };
382 namespace o3tl {
383 template<> struct typed_flags<SwTOXElement> : is_typed_flags<SwTOXElement, 0x3fff> {};
384 }
385
386 enum class SwTOIOptions : sal_uInt16
387 {
388 NONE = 0x00,
389 SameEntry = 0x01,
390 FF = 0x02,
391 CaseSensitive = 0x04,
392 KeyAsEntry = 0x08,
393 AlphaDelimiter = 0x10,
394 Dash = 0x20,
395 InitialCaps = 0x40,
396 };
397 namespace o3tl {
398 template<> struct typed_flags<SwTOIOptions> : is_typed_flags<SwTOIOptions, 0x7f> {};
399 }
400
401 //which part of the caption is to be displayed
402 enum SwCaptionDisplay
403 {
404 CAPTION_COMPLETE,
405 CAPTION_NUMBER,
406 CAPTION_TEXT
407 };
408
409 enum class SwTOOElements : sal_uInt16
410 {
411 NONE = 0x00,
412 Math = 0x01,
413 Chart = 0x02,
414 Calc = 0x08,
415 DrawImpress = 0x10,
416 Other = 0x80,
417 };
418 namespace o3tl {
419 template<> struct typed_flags<SwTOOElements> : is_typed_flags<SwTOOElements, 0x9b> {};
420 }
421
422 #define TOX_STYLE_DELIMITER u'\x0001'
423
424 // Class for all indexes
425 class SW_DLLPUBLIC SwTOXBase : public SwClient
426 {
427 SwForm m_aForm; // description of the lines
428 OUString m_aName; // unique name
429 OUString m_aTitle; // title
430 OUString m_aBookmarkName; //Bookmark Name
431
432 OUString m_sMainEntryCharStyle; // name of the character style applied to main index entries
433
434 OUString m_aStyleNames[MAXLEVEL]; // (additional) style names TOX_CONTENT, TOX_USER
435 OUString m_sSequenceName; // FieldTypeName of a caption sequence
436
437 LanguageType m_eLanguage;
438 OUString m_sSortAlgorithm;
439
440 union {
441 sal_uInt16 nLevel; // consider outline levels
442 SwTOIOptions nOptions; // options of alphabetical index
443 } m_aData;
444
445 SwTOXElement m_nCreateType; // sources to create the index from
446 SwTOOElements m_nOLEOptions; // OLE sources
447 SwCaptionDisplay m_eCaptionDisplay;
448 bool m_bProtected : 1; // index protected ?
449 bool m_bFromChapter : 1; // create from chapter or document
450 bool m_bFromObjectNames : 1; // create a table or object index
451 // from the names rather than the caption
452 bool m_bLevelFromChapter : 1; // User index: get the level from the source chapter
453
454 protected:
455 // Add a data member, for record the TOC field expression of MS Word binary format
456 // For keeping fidelity and may giving a better exporting performance
457 OUString maMSTOCExpression;
458 bool mbKeepExpression;
459
460 public:
461 SwTOXBase( const SwTOXType* pTyp, const SwForm& rForm,
462 SwTOXElement nCreaType, const OUString& rTitle );
463 SwTOXBase( const SwTOXBase& rCopy, SwDoc* pDoc = nullptr );
464 virtual ~SwTOXBase() override;
465
SwClientNotify(const SwModify & rMod,const SfxHint & rHint)466 virtual void SwClientNotify(const SwModify& rMod, const SfxHint& rHint) override
467 {
468 if(dynamic_cast<const sw::DocumentDyingHint*>(&rHint))
469 GetRegisteredIn()->Remove(this);
470 else
471 SwClient::SwClientNotify(rMod, rHint);
472 }
473 // a kind of CopyCtor - check if the TOXBase is at TOXType of the doc.
474 // If not, so create it and copy all other used things.
475 void CopyTOXBase( SwDoc*, const SwTOXBase& );
476
477 const SwTOXType* GetTOXType() const;
478
479 SwTOXElement GetCreateType() const; // creation types
480
GetTOXName() const481 const OUString& GetTOXName() const {return m_aName;}
SetTOXName(const OUString & rSet)482 void SetTOXName(const OUString& rSet) {m_aName = rSet;}
483
484 // for record the TOC field expression of MS Word binary format
GetMSTOCExpression() const485 const OUString& GetMSTOCExpression() const{return maMSTOCExpression;}
SetMSTOCExpression(const OUString & rExp)486 void SetMSTOCExpression(const OUString& rExp) {maMSTOCExpression = rExp;}
EnableKeepExpression()487 void EnableKeepExpression() {mbKeepExpression = true;}
DisableKeepExpression()488 void DisableKeepExpression() {mbKeepExpression = false;}
489
490 const OUString& GetTitle() const; // Title
491 const OUString& GetBookmarkName() const;
492 OUString const & GetTypeName() const; // Name
493 const SwForm& GetTOXForm() const; // description of the lines
494
495 void SetCreate(SwTOXElement);
496 void SetTitle(const OUString& rTitle);
497 void SetTOXForm(const SwForm& rForm);
498 void SetBookmarkName(const OUString& bName);
499
500 TOXTypes GetType() const;
501
GetMainEntryCharStyle() const502 const OUString& GetMainEntryCharStyle() const {return m_sMainEntryCharStyle;}
SetMainEntryCharStyle(const OUString & rSet)503 void SetMainEntryCharStyle(const OUString& rSet) {m_sMainEntryCharStyle = rSet;}
504
505 // content index only
506 inline void SetLevel(sal_uInt16); // consider outline level
507 inline sal_uInt16 GetLevel() const;
508
509 // alphabetical index only
510 inline SwTOIOptions GetOptions() const; // alphabetical index options
511 inline void SetOptions(SwTOIOptions nOpt);
512
513 // index of objects
GetOLEOptions() const514 SwTOOElements GetOLEOptions() const {return m_nOLEOptions;}
SetOLEOptions(SwTOOElements nOpt)515 void SetOLEOptions(SwTOOElements nOpt) {m_nOLEOptions = nOpt;}
516
517 // index of objects
518
GetStyleNames(sal_uInt16 nLevel) const519 OUString const & GetStyleNames(sal_uInt16 nLevel) const
520 {
521 SAL_WARN_IF( nLevel >= MAXLEVEL, "sw", "Which level?");
522 return m_aStyleNames[nLevel];
523 }
SetStyleNames(const OUString & rSet,sal_uInt16 nLevel)524 void SetStyleNames(const OUString& rSet, sal_uInt16 nLevel)
525 {
526 SAL_WARN_IF( nLevel >= MAXLEVEL, "sw", "Which level?");
527 m_aStyleNames[nLevel] = rSet;
528 }
IsFromChapter() const529 bool IsFromChapter() const { return m_bFromChapter;}
SetFromChapter(bool bSet)530 void SetFromChapter(bool bSet) { m_bFromChapter = bSet;}
531
IsFromObjectNames() const532 bool IsFromObjectNames() const {return m_bFromObjectNames;}
SetFromObjectNames(bool bSet)533 void SetFromObjectNames(bool bSet) {m_bFromObjectNames = bSet;}
534
IsLevelFromChapter() const535 bool IsLevelFromChapter() const {return m_bLevelFromChapter;}
SetLevelFromChapter(bool bSet)536 void SetLevelFromChapter(bool bSet) {m_bLevelFromChapter = bSet;}
537
IsProtected() const538 bool IsProtected() const { return m_bProtected; }
SetProtected(bool bSet)539 void SetProtected(bool bSet) { m_bProtected = bSet; }
540
GetSequenceName() const541 const OUString& GetSequenceName() const {return m_sSequenceName;}
SetSequenceName(const OUString & rSet)542 void SetSequenceName(const OUString& rSet) {m_sSequenceName = rSet;}
543
GetCaptionDisplay() const544 SwCaptionDisplay GetCaptionDisplay() const { return m_eCaptionDisplay;}
SetCaptionDisplay(SwCaptionDisplay eSet)545 void SetCaptionDisplay(SwCaptionDisplay eSet) {m_eCaptionDisplay = eSet;}
546
547 bool IsTOXBaseInReadonly() const;
548
549 const SfxItemSet* GetAttrSet() const;
550 void SetAttrSet( const SfxItemSet& );
551
GetLanguage() const552 LanguageType GetLanguage() const {return m_eLanguage;}
SetLanguage(LanguageType nLang)553 void SetLanguage(LanguageType nLang) {m_eLanguage = nLang;}
554
GetSortAlgorithm() const555 const OUString& GetSortAlgorithm()const {return m_sSortAlgorithm;}
SetSortAlgorithm(const OUString & rSet)556 void SetSortAlgorithm(const OUString& rSet) {m_sSortAlgorithm = rSet;}
557 // #i21237#
AdjustTabStops(SwDoc const & rDoc)558 void AdjustTabStops( SwDoc const & rDoc )
559 {
560 m_aForm.AdjustTabStops( rDoc );
561 }
562
563 SwTOXBase& operator=(const SwTOXBase& rSource);
564 void RegisterToTOXType( SwTOXType& rMark );
IsVisible() const565 virtual bool IsVisible() const { return true; }
566 };
567
568 //SwTOXMark
569
GetAlternativeText() const570 inline const OUString& SwTOXMark::GetAlternativeText() const
571 { return m_aAltText; }
572
GetBookmarkName() const573 inline const OUString& SwTOXMark::GetBookmarkName() const
574 { return m_aBookmarkName; }
575
GetTOXType() const576 inline const SwTOXType* SwTOXMark::GetTOXType() const
577 { return m_pType; }
578
IsAlternativeText() const579 inline bool SwTOXMark::IsAlternativeText() const
580 { return !m_aAltText.isEmpty(); }
581
SetAlternativeText(const OUString & rAlt)582 inline void SwTOXMark::SetAlternativeText(const OUString& rAlt)
583 {
584 m_aAltText = rAlt;
585 }
586
SetBookmarkName(const OUString & bName)587 inline void SwTOXMark::SetBookmarkName(const OUString& bName)
588 {
589 m_aBookmarkName = bName;
590 }
591
SetLevel(sal_uInt16 nLvl)592 inline void SwTOXMark::SetLevel( sal_uInt16 nLvl )
593 {
594 SAL_WARN_IF( GetTOXType() && GetTOXType()->GetType() == TOX_INDEX, "sw", "Wrong type");
595 m_nLevel = nLvl;
596 }
597
SetPrimaryKey(const OUString & rKey)598 inline void SwTOXMark::SetPrimaryKey( const OUString& rKey )
599 {
600 SAL_WARN_IF( GetTOXType()->GetType() != TOX_INDEX, "sw", "Wrong type");
601 m_aPrimaryKey = rKey;
602 }
603
SetSecondaryKey(const OUString & rKey)604 inline void SwTOXMark::SetSecondaryKey( const OUString& rKey )
605 {
606 SAL_WARN_IF(GetTOXType()->GetType() != TOX_INDEX, "sw", "Wrong type");
607 m_aSecondaryKey = rKey;
608 }
609
SetTextReading(const OUString & rText)610 inline void SwTOXMark::SetTextReading( const OUString& rText )
611 {
612 SAL_WARN_IF(GetTOXType()->GetType() != TOX_INDEX, "sw", "Wrong type");
613 m_aTextReading = rText;
614 }
615
SetPrimaryKeyReading(const OUString & rKey)616 inline void SwTOXMark::SetPrimaryKeyReading( const OUString& rKey )
617 {
618 SAL_WARN_IF(GetTOXType()->GetType() != TOX_INDEX, "sw", "Wrong type");
619 m_aPrimaryKeyReading = rKey;
620 }
621
SetSecondaryKeyReading(const OUString & rKey)622 inline void SwTOXMark::SetSecondaryKeyReading( const OUString& rKey )
623 {
624 SAL_WARN_IF(GetTOXType()->GetType() != TOX_INDEX, "sw", "Wrong type");
625 m_aSecondaryKeyReading = rKey;
626 }
627
GetLevel() const628 inline sal_uInt16 SwTOXMark::GetLevel() const
629 {
630 SAL_WARN_IF( GetTOXType() && GetTOXType()->GetType() == TOX_INDEX, "sw", "Wrong type");
631 return m_nLevel;
632 }
633
GetPrimaryKey() const634 inline OUString const & SwTOXMark::GetPrimaryKey() const
635 {
636 SAL_WARN_IF(GetTOXType()->GetType() != TOX_INDEX, "sw", "Wrong type");
637 return m_aPrimaryKey;
638 }
639
GetSecondaryKey() const640 inline OUString const & SwTOXMark::GetSecondaryKey() const
641 {
642 SAL_WARN_IF(GetTOXType()->GetType() != TOX_INDEX, "sw", "Wrong type");
643 return m_aSecondaryKey;
644 }
645
GetTextReading() const646 inline OUString const & SwTOXMark::GetTextReading() const
647 {
648 SAL_WARN_IF(GetTOXType()->GetType() != TOX_INDEX, "sw", "Wrong type");
649 return m_aTextReading;
650 }
651
GetPrimaryKeyReading() const652 inline OUString const & SwTOXMark::GetPrimaryKeyReading() const
653 {
654 SAL_WARN_IF(GetTOXType()->GetType() != TOX_INDEX, "sw", "Wrong type");
655 return m_aPrimaryKeyReading;
656 }
657
GetSecondaryKeyReading() const658 inline OUString const & SwTOXMark::GetSecondaryKeyReading() const
659 {
660 SAL_WARN_IF(GetTOXType()->GetType() != TOX_INDEX, "sw", "Wrong type");
661 return m_aSecondaryKeyReading;
662 }
663
664 //SwForm
665
SetTemplate(sal_uInt16 nLevel,const OUString & rTemplate)666 inline void SwForm::SetTemplate(sal_uInt16 nLevel, const OUString& rTemplate)
667 {
668 SAL_WARN_IF(nLevel >= GetFormMax(), "sw", "Index >= GetFormMax()");
669 m_aTemplate[nLevel] = rTemplate;
670 }
671
GetTemplate(sal_uInt16 nLevel) const672 inline OUString const & SwForm::GetTemplate(sal_uInt16 nLevel) const
673 {
674 SAL_WARN_IF(nLevel >= GetFormMax(), "sw", "Index >= GetFormMax()");
675 return m_aTemplate[nLevel];
676 }
677
GetTOXType() const678 inline TOXTypes SwForm::GetTOXType() const
679 {
680 return m_eType;
681 }
682
GetFormMax() const683 inline sal_uInt16 SwForm::GetFormMax() const
684 {
685 return m_nFormMaxLevel;
686 }
687
688 //SwTOXType
689
GetTypeName() const690 inline const OUString& SwTOXType::GetTypeName() const
691 { return m_aName; }
692
GetType() const693 inline TOXTypes SwTOXType::GetType() const
694 { return m_eType; }
695
696 // SwTOXBase
697
GetTOXType() const698 inline const SwTOXType* SwTOXBase::GetTOXType() const
699 { return static_cast<const SwTOXType*>(GetRegisteredIn()); }
700
GetCreateType() const701 inline SwTOXElement SwTOXBase::GetCreateType() const
702 { return m_nCreateType; }
703
GetTitle() const704 inline const OUString& SwTOXBase::GetTitle() const
705 { return m_aTitle; }
706
GetBookmarkName() const707 inline const OUString& SwTOXBase::GetBookmarkName() const
708 { return m_aBookmarkName; }
709
GetTypeName() const710 inline OUString const & SwTOXBase::GetTypeName() const
711 { return GetTOXType()->GetTypeName(); }
712
GetTOXForm() const713 inline const SwForm& SwTOXBase::GetTOXForm() const
714 { return m_aForm; }
715
SetCreate(SwTOXElement nCreate)716 inline void SwTOXBase::SetCreate(SwTOXElement nCreate)
717 { m_nCreateType = nCreate; }
718
SetTOXForm(const SwForm & rForm)719 inline void SwTOXBase::SetTOXForm(const SwForm& rForm)
720 { m_aForm = rForm; }
721
GetType() const722 inline TOXTypes SwTOXBase::GetType() const
723 { return GetTOXType()->GetType(); }
724
SetLevel(sal_uInt16 nLev)725 inline void SwTOXBase::SetLevel(sal_uInt16 nLev)
726 {
727 SAL_WARN_IF(GetTOXType()->GetType() == TOX_INDEX, "sw", "Wrong type");
728 m_aData.nLevel = nLev;
729 }
730
GetLevel() const731 inline sal_uInt16 SwTOXBase::GetLevel() const
732 {
733 SAL_WARN_IF(GetTOXType()->GetType() == TOX_INDEX, "sw", "Wrong type");
734 return m_aData.nLevel;
735 }
736
GetOptions() const737 inline SwTOIOptions SwTOXBase::GetOptions() const
738 {
739 SAL_WARN_IF(GetTOXType()->GetType() != TOX_INDEX, "sw", "Wrong type");
740 return m_aData.nOptions;
741 }
742
SetOptions(SwTOIOptions nOpt)743 inline void SwTOXBase::SetOptions(SwTOIOptions nOpt)
744 {
745 SAL_WARN_IF(GetTOXType()->GetType() != TOX_INDEX, "sw", "Wrong type");
746 m_aData.nOptions = nOpt;
747 }
748
749 #endif // INCLUDED_SW_INC_TOX_HXX
750
751 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
752