1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef INCLUDED_SW_INC_LIST_HXX
21 #define INCLUDED_SW_INC_LIST_HXX
23 #include <o3tl/deleter.hxx>
24 #include <rtl/ustring.hxx>
25 #include "SwNodeNum.hxx"
38 SwList( const OUString
& sListId
,
39 SwNumRule
& rDefaultListStyle
,
40 const SwNodes
& rNodes
);
41 ~SwList() COVERITY_NOEXCEPT_FALSE
;
43 const OUString
& GetListId() const { return msListId
; }
45 const OUString
& GetDefaultListStyleName() const { return msDefaultListStyleName
; }
47 void SetDefaultListStyleName(OUString
const&);
49 void InsertListItem(SwNodeNum
& rNodeNum
,
50 bool isHiddenRedlines
,
53 static void RemoveListItem(SwNodeNum
& rNodeNum
, const SwDoc
& rDoc
);
55 void InvalidateListTree();
56 void ValidateListTree(const SwDoc
& rDoc
);
58 void MarkListLevel( const int nListLevel
,
61 bool IsListLevelMarked( const int nListLevel
) const;
63 bool HasNodes() const;
66 SwList( const SwList
& ) = delete;
67 SwList
& operator=( const SwList
& ) = delete;
69 void NotifyItemsOnListLevel( const int nLevel
);
71 // unique identifier of the list
72 const OUString msListId
;
73 // default list style for the list items, identified by the list style name
74 OUString msDefaultListStyleName
;
76 // list trees for certain document ranges
77 struct tListTreeForRange
79 /// tree always corresponds to document model
80 std::unique_ptr
<SwNodeNum
> pRoot
;
81 /// Tree that is missing those nodes that are merged or hidden
82 /// by delete redlines; this is only used if there is a layout
83 /// that has IsHideRedlines() enabled.
84 /// A second tree is needed because not only are the numbers in
85 /// the nodes different, the structure of the tree may be different
86 /// as well, if a high-level node is hidden its children go under
87 /// the previous node on the same level.
88 /// The nodes of pRootRLHidden are a subset of the nodes of pRoot.
89 std::unique_ptr
<SwNodeNum
> pRootRLHidden
;
90 /// top-level SwNodes section
91 std::unique_ptr
<SwPaM
> pSection
;
92 tListTreeForRange(std::unique_ptr
<SwNodeNum
> p1
, std::unique_ptr
<SwNodeNum
> p2
, std::unique_ptr
<SwPaM
> p3
)
93 : pRoot(std::move(p1
)), pRootRLHidden(std::move(p2
)), pSection(std::move(p3
)) {}
95 std::vector
<tListTreeForRange
> maListTrees
;
97 int mnMarkedListLevel
;
99 #endif // INCLUDED_SW_INC_LIST_HXX
101 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */