MWAWList.hxx
Go to the documentation of this file.
1 /* -*- Mode: C++; c-default-style: "k&r"; indent-tabs-mode: nil; tab-width: 2; c-basic-offset: 2 -*- */
2
3 /* libmwaw
4 * Version: MPL 2.0 / LGPLv2+
5 *
6 * The contents of this file are subject to the Mozilla Public License Version
7 * 2.0 (the "License"); you may not use this file except in compliance with
8 * the License or as specified alternatively below. You may obtain a copy of
9 * the License at http://www.mozilla.org/MPL/
10 *
11 * Software distributed under the License is distributed on an "AS IS" basis,
12 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13 * for the specific language governing rights and limitations under the
14 * License.
15 *
16 * Major Contributor(s):
17 * Copyright (C) 2002 William Lachance (wrlach@gmail.com)
18 * Copyright (C) 2002,2004 Marc Maurer (uwog@uwog.net)
19 * Copyright (C) 2004-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
20 * Copyright (C) 2006, 2007 Andrew Ziem
21 * Copyright (C) 2011, 2012 Alonso Laurent (alonso@loria.fr)
22 *
23 *
24 * All Rights Reserved.
25 *
26 * For minor contributions see the git repository.
27 *
28 * Alternatively, the contents of this file may be used under the terms of
29 * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
30 * in which case the provisions of the LGPLv2+ are applicable
31 * instead of those above.
32 */
33
34 #ifndef MWAW_LIST_H
35 # define MWAW_LIST_H
36
37 #include <iostream>
38
39 #include <vector>
40
41 #include <librevenge/librevenge.h>
42
44 struct MWAWListLevel {
46 enum Type { DEFAULT, NONE, BULLET, DECIMAL, LOWER_ALPHA, UPPER_ALPHA,
47 LOWER_ROMAN, UPPER_ROMAN, LABEL
48 };
50 enum Alignment { LEFT, RIGHT, CENTER };
51
53 MWAWListLevel()
54 : m_type(NONE)
55 , m_numBeforeLabels(0)
56 , m_labelBeforeSpace(0.0)
57 , m_labelWidth(0.1)
58 , m_labelAfterSpace(0.0)
59 , m_alignment(LEFT)
60 , m_startValue(0)
61 , m_label("")
62 , m_prefix("")
63 , m_suffix("")
64 , m_bullet("")
65 , m_spanId(-1)
66 , m_extra("")
67 {
68 }
70 ~MWAWListLevel() {}
71
73 bool isDefault() const
74 {
75 return m_type ==DEFAULT;
76 }
78 bool isNumeric() const
79 {
80 return m_type !=DEFAULT && m_type !=NONE && m_type != BULLET;
81 }
83 void addTo(librevenge::RVNGPropertyList &propList, MWAWFontManagerPtr fontManager) const;
84
86 int getStartValue() const
87 {
88 return m_startValue <= 0 ? 1 : m_startValue;
89 }
90
92 int cmp(MWAWListLevel const &levl) const;
93
95 friend std::ostream &operator<<(std::ostream &o, MWAWListLevel const &ft);
96
98 Type m_type;
100 int m_numBeforeLabels;
101 double m_labelBeforeSpace ;
102 double m_labelWidth ;
103 double m_labelAfterSpace ;
105 Alignment m_alignment;
107 int m_startValue;
108 librevenge::RVNGString m_label ,
109 m_prefix ,
110 m_suffix,
111 m_bullet ;
113 int m_spanId;
115 std::string m_extra;
116 };
117
119 class MWAWList
120 {
121 public:
123 MWAWList()
124 : m_levels()
125 , m_actualIndices()
126 , m_nextIndices()
127 , m_actLevel(-1)
128 , m_modifyMarker(1)
129 {
130 for (auto &id : m_id) id = -1;
131 }
132
134 int getId() const
135 {
136 return m_id[0];
137 }
138
140 int getMarker() const
141 {
142 return m_modifyMarker;
143 }
145 void resize(int levl);
147 bool isCompatibleWith(int levl, MWAWListLevel const &level) const;
149 bool isCompatibleWith(MWAWList const &newList) const;
151 void updateIndicesFrom(MWAWList const &list);
152
157 void swapId() const
158 {
159 std::swap(m_id[0], m_id[1]);
160 }
161
163 void setId(int newId) const;
164
166 MWAWListLevel getLevel(int levl) const
167 {
168 if (levl >= 0 && levl < int(m_levels.size()))
169 return m_levels[size_t(levl)];
170 MWAW_DEBUG_MSG(("MWAWList::getLevel: can not find level %d\n", levl));
171 return MWAWListLevel();
172 }
174 int numLevels() const
175 {
176 return int(m_levels.size());
177 }
179 void set(int levl, MWAWListLevel const &level);
180
182 void setLevel(int levl) const;
184 void openElement() const;
186 void closeElement() const {}
188 int getStartValueForNextElement() const;
190 void setStartValueForNextElement(int value);
191
193 bool isNumeric(int levl) const;
194
196 bool addTo(int level, librevenge::RVNGPropertyList &pList, MWAWFontManagerPtr fontManager) const;
197
198 protected:
200 std::vector<MWAWListLevel> m_levels;
201
202 mutable std::vector<int> m_actualIndices, m_nextIndices;
204 mutable int m_actLevel;
206 mutable int m_id[2];
208 mutable int m_modifyMarker;
209 };
210
212 class MWAWListManager
213 {
214 public:
216 explicit MWAWListManager(MWAWFontManagerPtr const &fontManager);
218 ~MWAWListManager();
220 bool needToSend(int index, std::vector<int> &idMarkerList) const;
222 std::shared_ptr<MWAWList> getList(int index) const;
224 std::shared_ptr<MWAWList> getNewList(std::shared_ptr<MWAWList> actList, int levl, MWAWListLevel const &level);
225 protected:
227 MWAWFontManagerPtr m_fontManager;
229 std::vector<MWAWList> m_listList;
231 mutable std::vector<int> m_sendIdMarkerList;
232 };
233 #endif
234 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
MWAWList::getId
int getId() const
returns the list id
Definition: MWAWList.hxx:134
MWAWList::MWAWList
MWAWList()
default constructor
Definition: MWAWList.hxx:123
MWAWListLevel::m_label
librevenge::RVNGString m_label
the text label
Definition: MWAWList.hxx:108
MWAWListLevel::CENTER
Definition: MWAWList.hxx:50
MWAWList::m_modifyMarker
int m_modifyMarker
a modification marker ( can be used to check if a list has been send to a interface ) ...
Definition: MWAWList.hxx:208
MWAWListLevel::m_prefix
librevenge::RVNGString m_prefix
string which preceedes the number if we have an ordered level
Definition: MWAWList.hxx:108
MWAWListLevel::Alignment
Alignment
the item alignment
Definition: MWAWList.hxx:50
MWAWListLevel::~MWAWListLevel
~MWAWListLevel()
destructor
Definition: MWAWList.hxx:70
MWAWListLevel::UPPER_ALPHA
Definition: MWAWList.hxx:46
MWAWListLevel::m_labelBeforeSpace
double m_labelBeforeSpace
the extra space between inserting a label
Definition: MWAWList.hxx:101
MWAWListLevel::MWAWListLevel
MWAWListLevel()
basic constructor
Definition: MWAWList.hxx:53
MWAWListLevel::NONE
Definition: MWAWList.hxx:46
MWAWListLevel::m_bullet
librevenge::RVNGString m_bullet
the bullet if we have an bullet level
Definition: MWAWList.hxx:108
MWAWListLevel::LOWER_ALPHA
Definition: MWAWList.hxx:46
MWAWListLevel
small structure to keep information about a list level
Definition: MWAWList.hxx:44
MWAWListLevel::m_numBeforeLabels
int m_numBeforeLabels
the number of label to show before this
Definition: MWAWList.hxx:100
MWAWListLevel::m_spanId
int m_spanId
the style span id
Definition: MWAWList.hxx:113
MWAWList::m_nextIndices
std::vector< int > m_nextIndices
Definition: MWAWList.hxx:202
MWAWListLevel::LOWER_ROMAN
Definition: MWAWList.hxx:47
MWAWListLevel::isNumeric
bool isNumeric() const
returns true if the list is decimal, alpha or roman
Definition: MWAWList.hxx:78
MWAWListLevel::cmp
int cmp(MWAWListLevel const &levl) const
comparison function ( compare all values excepted m_startValues
Definition: MWAWList.cxx:116
MWAWListLevel::m_labelAfterSpace
double m_labelAfterSpace
the minimum distance between the label and the text
Definition: MWAWList.hxx:103
MWAW_DEBUG_MSG
#define MWAW_DEBUG_MSG(M)
Definition: libmwaw_internal.hxx:129
MWAWList::m_levels
std::vector< MWAWListLevel > m_levels
the different levels
Definition: MWAWList.hxx:200
MWAWListLevel::addTo
void addTo(librevenge::RVNGPropertyList &propList, MWAWFontManagerPtr fontManager) const
add the information of this level in the propList
Definition: MWAWList.cxx:47
MWAWListLevel::LEFT
Definition: MWAWList.hxx:50
MWAWFontManagerPtr
std::shared_ptr< MWAWFontManager > MWAWFontManagerPtr
a smart pointer of MWAWFontManager
Definition: libmwaw_internal.hxx:543
MWAWList::swapId
void swapId() const
swap the list id
Definition: MWAWList.hxx:157
MWAWListManager::m_sendIdMarkerList
std::vector< int > m_sendIdMarkerList
the list of send list to interface
Definition: MWAWList.hxx:231
MWAWListLevel::DEFAULT
Definition: MWAWList.hxx:46
MWAWListLevel::RIGHT
Definition: MWAWList.hxx:50
MWAWListLevel::UPPER_ROMAN
Definition: MWAWList.hxx:47
MWAWListLevel::isDefault
bool isDefault() const
returns true if the level type was not set
Definition: MWAWList.hxx:73
MWAWListManager
a manager which manages the lists, keeps the different kind of lists, to assure the unicity of each l...
Definition: MWAWList.hxx:212
MWAWListLevel::m_suffix
librevenge::RVNGString m_suffix
string which follows the number if we have an ordered level
Definition: MWAWList.hxx:108
MWAWListLevel::DECIMAL
Definition: MWAWList.hxx:46
MWAWList::closeElement
void closeElement() const
close the list element
Definition: MWAWList.hxx:186
MWAWListLevel::getStartValue
int getStartValue() const
returns the start value (if set) or 1
Definition: MWAWList.hxx:86
MWAWListLevel::m_type
Type m_type
the type of the level
Definition: MWAWList.hxx:98
MWAWList::numLevels
int numLevels() const
returns the number of level
Definition: MWAWList.hxx:174
MWAWListLevel::LABEL
Definition: MWAWList.hxx:47
MWAWListLevel::operator<<
friend std::ostream & operator<<(std::ostream &o, MWAWListLevel const &ft)
operator<<
Definition: MWAWList.cxx:146
MWAWListManager::m_fontManager
MWAWFontManagerPtr m_fontManager
the font manager
Definition: MWAWList.hxx:227
MWAWListLevel::m_extra
std::string m_extra
extra data
Definition: MWAWList.hxx:115
MWAWListLevel::BULLET
Definition: MWAWList.hxx:46
MWAWListLevel::m_alignment
Alignment m_alignment
the alignment ( left, center, ...)
Definition: MWAWList.hxx:105
MWAWList::getMarker
int getMarker() const
returns the actual modify marker
Definition: MWAWList.hxx:140
MWAWListLevel::m_labelWidth
double m_labelWidth
the minimum label width
Definition: MWAWList.hxx:102
MWAWList
a small structure used to store the informations about a list
Definition: MWAWList.hxx:119
MWAWListLevel::Type
Type
the type of the level
Definition: MWAWList.hxx:46
MWAWListLevel::m_startValue
int m_startValue
the actual value (if this is an ordered level )
Definition: MWAWList.hxx:107
MWAWList::m_actLevel
int m_actLevel
the actual levels
Definition: MWAWList.hxx:204
MWAWListManager::m_listList
std::vector< MWAWList > m_listList
the list of created list
Definition: MWAWList.hxx:229
MWAWList::getLevel
MWAWListLevel getLevel(int levl) const
returns a level if it exists
Definition: MWAWList.hxx:166