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 
20 #ifndef INCLUDED_SW_SOURCE_CORE_INC_DOCTXM_HXX
21 #define INCLUDED_SW_SOURCE_CORE_INC_DOCTXM_HXX
22 
23 #include <tools/gen.hxx>
24 #include <hints.hxx>
25 #include <tox.hxx>
26 #include <section.hxx>
27 
28 class  SwTOXInternational;
29 class  SwPageDesc;
30 class  SwTextNode;
31 class  SwTextFormatColl;
32 struct SwPosition;
33 struct SwTOXSortTabBase;
34 
35 class SwTOXBaseSection final : public SwTOXBase, public SwSection
36 {
37     std::vector<std::unique_ptr<SwTOXSortTabBase>> m_aSortArr;
38 
39     void UpdateMarks( const SwTOXInternational& rIntl,
40              const SwTextNode* pOwnChapterNode,
41              SwRootFrame const* pLayout );
42     void UpdateOutline( const SwTextNode* pOwnChapterNode,
43              SwRootFrame const* pLayout );
44     void UpdateTemplate( const SwTextNode* pOwnChapterNode,
45              SwRootFrame const* pLayout );
46     void UpdateContent( SwTOXElement eType,
47              const SwTextNode* pOwnChapterNode,
48              SwRootFrame const* pLayout );
49     void UpdateTable( const SwTextNode* pOwnChapterNode,
50              SwRootFrame const* pLayout );
51     void UpdateSequence( const SwTextNode* pOwnChapterNode,
52              SwRootFrame const* pLayout );
53     void UpdateAuthorities( const SwTOXInternational& rIntl,
54              SwRootFrame const* pLayout );
55 
56     // insert sorted into array for creation
57     void InsertSorted(std::unique_ptr<SwTOXSortTabBase> pBase);
58 
59     // insert alpha delimiter at creation
60     void InsertAlphaDelimiter( const SwTOXInternational& rIntl );
61 
62     // replace page num placeholder with actual page number
63     void UpdatePageNum_( SwTextNode* pNd,
64                          const std::vector<sal_uInt16>& rNums,
65                          const std::vector<SwPageDesc*>& rDescs,
66                          const std::vector<sal_uInt16>* pMainEntryNums,
67                          const SwTOXInternational& rIntl );
68 
69     // get section for entering keywords
70     Range GetKeyRange( const OUString& rStr, const OUString& rStrReading,
71                        const SwTOXSortTabBase& rNew, sal_uInt16 nLevel,
72                        const Range& rRange );
73 
74     // return text collection via name/ from format pool
75     SwTextFormatColl* GetTextFormatColl( sal_uInt16 nLevel );
76     virtual void SwClientNotify(const SwModify& rModify, const SfxHint& rHint) override;
77 
78 public:
79     SwTOXBaseSection(SwTOXBase const& rBase, SwSectionFormat & rFormat);
80     virtual ~SwTOXBaseSection() override;
81 
82     // <_bNewTOX> : distinguish between the creation of a new table-of-content
83     //              (true) or an update of a table-of-content (false)
84     void Update( const SfxItemSet* pAttr = nullptr,
85                  SwRootFrame const* pLayout = nullptr,
86                  const bool        _bNewTOX = false );
87     void UpdatePageNum();               // insert page numbering
88 
89     bool SetPosAtStartEnd( SwPosition& rPos ) const;
IsVisible() const90     bool IsVisible() const override
91     {
92         SwPtrMsgPoolItem aInfo(RES_CONTENT_VISIBLE, nullptr);
93         return GetFormat() && !GetFormat()->GetInfo(aInfo) && aInfo.pObject;
94     }
95 };
96 
97 struct SwDefTOXBase_Impl
98 {
99     std::unique_ptr<SwTOXBase> pContBase;
100     std::unique_ptr<SwTOXBase> pIdxBase;
101     std::unique_ptr<SwTOXBase> pUserBase;
102     std::unique_ptr<SwTOXBase> pTableBase;
103     std::unique_ptr<SwTOXBase> pObjBase;
104     std::unique_ptr<SwTOXBase> pIllBase;
105     std::unique_ptr<SwTOXBase> pAuthBase;
106     std::unique_ptr<SwTOXBase> pBiblioBase;
107 
SwDefTOXBase_ImplSwDefTOXBase_Impl108     SwDefTOXBase_Impl()
109     {
110     }
111 };
112 
113 #endif
114 
115 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
116