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