1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2
3
* Copyright (C) 2002 William Lachance (wrlach@gmail.com)
3
4
* Copyright (C) 2002 Marc Maurer (uwog@uwog.net)
4
5
* Copyright (C) 2006-2007 Fridrich Strba (fridrich.strba@bluewin.ch)
6
7
* This library is free software; you can redistribute it and/or
7
8
* modify it under the terms of the GNU Library General Public
8
9
* License as published by the Free Software Foundation; either
20
21
* For further information visit http://libwpd.sourceforge.net
23
/* "This product is not manufactured, approved, or supported by
24
/* "This product is not manufactured, approved, or supported by
24
25
* Corel Corporation or Corel Corporation Limited."
35
36
const uint8_t DUMMY_INTERNAL_HEADER_FOOTER = 16;
37
38
// precondition: 0 <= headerFooterType <= 3 (i.e.: we don't handle watermarks here)
38
WPXHeaderFooter::WPXHeaderFooter(const WPXHeaderFooterType headerFooterType, const WPXHeaderFooterOccurence occurence,
39
const uint8_t internalType, const WPXSubDocument * subDocument, WPXTableList tableList) :
39
WPXHeaderFooter::WPXHeaderFooter(const WPXHeaderFooterType headerFooterType, const WPXHeaderFooterOccurence occurence,
40
const uint8_t internalType, const WPXSubDocument *subDocument, WPXTableList tableList) :
40
41
m_type(headerFooterType),
41
42
m_occurence(occurence),
42
43
m_internalType(internalType),
48
WPXHeaderFooter::WPXHeaderFooter(const WPXHeaderFooterType headerFooterType, const WPXHeaderFooterOccurence occurence,
49
const uint8_t internalType, const WPXSubDocument * subDocument) :
49
WPXHeaderFooter::WPXHeaderFooter(const WPXHeaderFooterType headerFooterType, const WPXHeaderFooterOccurence occurence,
50
const uint8_t internalType, const WPXSubDocument *subDocument) :
50
51
m_type(headerFooterType),
51
52
m_occurence(occurence),
52
53
m_internalType(internalType),
67
WPXHeaderFooter& WPXHeaderFooter::operator=(const WPXHeaderFooter &headerFooter)
68
WPXHeaderFooter &WPXHeaderFooter::operator=(const WPXHeaderFooter &headerFooter)
69
70
m_type = headerFooter.getType();
70
71
m_occurence = headerFooter.getOccurence();
120
121
m_pageSpan(page.getPageSpan())
122
123
for (uint8_t i=0; i<WPX_NUM_HEADER_FOOTER_TYPES; i++)
123
m_isHeaderFooterSuppressed[i] = page.getHeaderFooterSuppression(i);
124
m_isHeaderFooterSuppressed[i] = page.getHeaderFooterSuppression(i);
126
127
// NB: this is not a literal "clone" function: it is contingent on the side margins that are passed,
144
145
m_pageSpan(page.getPageSpan())
146
147
for (int i=0; i<WPX_NUM_HEADER_FOOTER_TYPES; i++)
147
m_isHeaderFooterSuppressed[i] = false;
148
m_isHeaderFooterSuppressed[i] = false;
150
151
WPXPageSpan::~WPXPageSpan()
155
void WPXPageSpan::setHeaderFooter(const WPXHeaderFooterType type, const uint8_t headerFooterType, const WPXHeaderFooterOccurence occurence,
156
const WPXSubDocument * subDocument, WPXTableList tableList)
156
void WPXPageSpan::setHeaderFooter(const WPXHeaderFooterType type, const uint8_t headerFooterType, const WPXHeaderFooterOccurence occurence,
157
const WPXSubDocument *subDocument, WPXTableList tableList)
158
159
WPXHeaderFooter headerFooter(type, occurence, headerFooterType, subDocument, tableList);
163
_removeHeaderFooter(type, ODD); _removeHeaderFooter(type, EVEN); _removeHeaderFooter(type, ALL);
164
_removeHeaderFooter(type, ODD);
165
_removeHeaderFooter(type, EVEN);
166
_removeHeaderFooter(type, ALL);
166
_removeHeaderFooter(type, ODD); _removeHeaderFooter(type, ALL);
169
_removeHeaderFooter(type, ODD);
170
_removeHeaderFooter(type, ALL);
169
_removeHeaderFooter(type, EVEN); _removeHeaderFooter(type, ALL);
173
_removeHeaderFooter(type, EVEN);
174
_removeHeaderFooter(type, ALL);
173
178
if ((occurence != NEVER) && (subDocument))
194
199
void WPXPageSpan::_removeHeaderFooter(WPXHeaderFooterType type, WPXHeaderFooterOccurence occurence)
196
for (std::vector<WPXHeaderFooter>::iterator iter = m_headerFooterList.begin(); iter != m_headerFooterList.end(); iter++)
201
for (std::vector<WPXHeaderFooter>::iterator iter = m_headerFooterList.begin(); iter != m_headerFooterList.end(); iter++)
198
if ((*iter).getType() == type && (*iter).getOccurence() == occurence) {
203
if ((*iter).getType() == type && (*iter).getOccurence() == occurence)
199
205
WPD_DEBUG_MSG(("WordPerfect: Removing header/footer element of type: %i since it is identical to %i\n",(*iter).getType(), type));
200
206
m_headerFooterList.erase(iter);
206
212
bool WPXPageSpan::_containsHeaderFooter(WPXHeaderFooterType type, WPXHeaderFooterOccurence occurence)
208
for (std::vector<WPXHeaderFooter>::iterator iter = m_headerFooterList.begin(); iter != m_headerFooterList.end(); iter++)
214
for (std::vector<WPXHeaderFooter>::iterator iter = m_headerFooterList.begin(); iter != m_headerFooterList.end(); iter++)
210
216
if ((*iter).getType()==type && (*iter).getOccurence()==occurence)
217
223
inline bool operator==(const WPXHeaderFooter &headerFooter1, const WPXHeaderFooter &headerFooter2)
219
return ((headerFooter1.getType() == headerFooter2.getType()) &&
220
(headerFooter1.getSubDocument() == headerFooter2.getSubDocument()) &&
221
(headerFooter1.getOccurence() == headerFooter2.getOccurence()) &&
222
(headerFooter1.getInternalType() == headerFooter2.getInternalType()) );
225
return ((headerFooter1.getType() == headerFooter2.getType()) &&
226
(headerFooter1.getSubDocument() == headerFooter2.getSubDocument()) &&
227
(headerFooter1.getOccurence() == headerFooter2.getOccurence()) &&
228
(headerFooter1.getInternalType() == headerFooter2.getInternalType()) );
225
231
bool operator==(const WPXPageSpan &page1, const WPXPageSpan &page2)
227
233
if ((page1.getMarginLeft() != page2.getMarginLeft()) || (page1.getMarginRight() != page2.getMarginRight()) ||
228
(page1.getMarginTop() != page2.getMarginTop())|| (page1.getMarginBottom() != page2.getMarginBottom()))
234
(page1.getMarginTop() != page2.getMarginTop())|| (page1.getMarginBottom() != page2.getMarginBottom()))
231
if (page1.getPageNumberPosition() != page2.getPageNumberPosition())
237
if (page1.getPageNumberPosition() != page2.getPageNumberPosition())
234
240
if (page1.getPageNumberSuppression() != page2.getPageNumberSuppression())
237
if (page1.getPageNumberOverriden() != page2.getPageNumberOverriden() ||
238
page1.getPageNumberOverride() != page2.getPageNumberOverride())
243
if (page1.getPageNumberOverriden() != page2.getPageNumberOverriden() ||
244
page1.getPageNumberOverride() != page2.getPageNumberOverride())
241
247
if (page1.getPageNumberingType() != page2.getPageNumberingType())
244
250
if (page1.getPageNumberingFontName() != page2.getPageNumberingFontName() ||
245
page1.getPageNumberingFontSize() != page2.getPageNumberingFontSize())
251
page1.getPageNumberingFontSize() != page2.getPageNumberingFontSize())
248
for (uint8_t i=0; i<WPX_NUM_HEADER_FOOTER_TYPES; i++) {
254
for (uint8_t i=0; i<WPX_NUM_HEADER_FOOTER_TYPES; i++)
249
256
if (page1.getHeaderFooterSuppression(i) != page2.getHeaderFooterSuppression(i))
253
260
// NOTE: yes this is O(n^2): so what? n=4 at most
254
261
const std::vector<WPXHeaderFooter> headerFooterList1 = page1.getHeaderFooterList();
255
262
const std::vector<WPXHeaderFooter> headerFooterList2 = page2.getHeaderFooterList();
256
std::vector<WPXHeaderFooter>::const_iterator iter1;
257
std::vector<WPXHeaderFooter>::const_iterator iter2;
263
std::vector<WPXHeaderFooter>::const_iterator iter1;
264
std::vector<WPXHeaderFooter>::const_iterator iter2;
259
266
for (iter1 = headerFooterList1.begin(); iter1 != headerFooterList1.end(); iter1++)
261
268
if (std::find(headerFooterList2.begin(), headerFooterList2.end(), (*iter1)) == headerFooterList2.end())
265
272
// If we came here, we know that every header/footer that is found in the first page span is in the second too.
266
273
// But this is not enought for us to know whether the page spans are equal. Now we have to check in addition
267
274
// whether every header/footer that is in the second one is in the first too. If someone wants to optimize this,
268
275
// (s)he is most welcome :-)
270
277
for (iter2 = headerFooterList2.begin(); iter2 != headerFooterList2.end(); iter2++)
272
279
if (std::find(headerFooterList1.begin(), headerFooterList1.end(), (*iter2)) == headerFooterList1.end())
277
284
WPD_DEBUG_MSG(("WordPerfect: WPXPageSpan == comparison finished, found no differences\n"));
288
/* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */