1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ 2 /* libwps 3 * Version: MPL 2.0 / LGPLv2.1+ 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 * Major Contributor(s): 10 * Copyright (C) 2002 William Lachance (william.lachance@sympatico.ca) 11 * Copyright (C) 2002 Marc Maurer (uwog@uwog.net) 12 * Copyright (C) 2006 Fridrich Strba (fridrich.strba@bluewin.ch) 13 * 14 * For minor contributions see the git repository. 15 * 16 * Alternatively, the contents of this file may be used under the terms 17 * of the GNU Lesser General Public License Version 2.1 or later 18 * (LGPLv2.1+), in which case the provisions of the LGPLv2.1+ are 19 * applicable instead of those above. 20 * 21 * For further information visit http://libwps.sourceforge.net 22 */ 23 24 #ifndef WPSPAGESPAN_H 25 #define WPSPAGESPAN_H 26 #include <vector> 27 #include "libwps_internal.h" 28 29 class WKSContentListener; 30 class WPSContentListener; 31 32 namespace WPSPageSpanInternal 33 { 34 class HeaderFooter; 35 typedef std::shared_ptr<HeaderFooter> HeaderFooterPtr; 36 } 37 38 class WPSPageSpan 39 { 40 public: 41 enum FormOrientation { PORTRAIT, LANDSCAPE }; 42 43 enum HeaderFooterType { HEADER, FOOTER }; 44 enum HeaderFooterOccurrence { ODD, EVEN, ALL, FIRST, NEVER }; 45 46 enum PageNumberPosition { None = 0, TopLeft, TopCenter, TopRight, TopLeftAndRight, TopInsideLeftAndRight, 47 BottomLeft, BottomCenter, BottomRight, BottomLeftAndRight, BottomInsideLeftAndRight 48 }; 49 public: 50 //! constructor 51 WPSPageSpan(); 52 WPSPageSpan(WPSPageSpan const &)=default; 53 WPSPageSpan(WPSPageSpan &&)=default; 54 WPSPageSpan &operator=(WPSPageSpan const &)=default; 55 WPSPageSpan &operator=(WPSPageSpan &&)=default; 56 //! destructor 57 ~WPSPageSpan(); 58 getFormLength()59 double getFormLength() const 60 { 61 return m_formLength; 62 } getFormWidth()63 double getFormWidth() const 64 { 65 return m_formWidth; 66 } getFormOrientation()67 FormOrientation getFormOrientation() const 68 { 69 return m_formOrientation; 70 } getMarginLeft()71 double getMarginLeft() const 72 { 73 return m_marginLeft; 74 } getMarginRight()75 double getMarginRight() const 76 { 77 return m_marginRight; 78 } getMarginTop()79 double getMarginTop() const 80 { 81 return m_marginTop; 82 } getMarginBottom()83 double getMarginBottom() const 84 { 85 return m_marginBottom; 86 } getPageNumberPosition()87 PageNumberPosition getPageNumberPosition() const 88 { 89 return m_pageNumberPosition; 90 } getPageNumber()91 int getPageNumber() const 92 { 93 return m_pageNumber; 94 } getPageNumberingType()95 libwps::NumberingType getPageNumberingType() const 96 { 97 return m_pageNumberingType; 98 } getPageNumberingFontSize()99 double getPageNumberingFontSize() const 100 { 101 return m_pageNumberingFontSize; 102 } getPageNumberingFontName()103 librevenge::RVNGString getPageNumberingFontName() const 104 { 105 return m_pageNumberingFontName; 106 } getPageSpan()107 int getPageSpan() const 108 { 109 return m_pageSpan; 110 } getHeaderFooterList()111 const std::vector<WPSPageSpanInternal::HeaderFooterPtr> &getHeaderFooterList() const 112 { 113 return m_headerFooterList; 114 } 115 116 void setHeaderFooter(const HeaderFooterType type, const HeaderFooterOccurrence occurrence, 117 WPSSubDocumentPtr &subDocument); setFormLength(const double formLength)118 void setFormLength(const double formLength) 119 { 120 m_formLength = formLength; 121 } setFormWidth(const double formWidth)122 void setFormWidth(const double formWidth) 123 { 124 m_formWidth = formWidth; 125 } setFormOrientation(const FormOrientation formOrientation)126 void setFormOrientation(const FormOrientation formOrientation) 127 { 128 m_formOrientation = formOrientation; 129 } setMarginLeft(const double marginLeft)130 void setMarginLeft(const double marginLeft) 131 { 132 m_marginLeft = marginLeft; 133 } setMarginRight(const double marginRight)134 void setMarginRight(const double marginRight) 135 { 136 m_marginRight = marginRight; 137 } setMarginTop(const double marginTop)138 void setMarginTop(const double marginTop) 139 { 140 m_marginTop = marginTop; 141 } setMarginBottom(const double marginBottom)142 void setMarginBottom(const double marginBottom) 143 { 144 m_marginBottom = marginBottom; 145 } setPageNumberPosition(const PageNumberPosition pageNumberPosition)146 void setPageNumberPosition(const PageNumberPosition pageNumberPosition) 147 { 148 m_pageNumberPosition = pageNumberPosition; 149 } setPageNumber(const int pageNumber)150 void setPageNumber(const int pageNumber) 151 { 152 m_pageNumber = pageNumber; 153 } setPageNumberingType(const libwps::NumberingType pageNumberingType)154 void setPageNumberingType(const libwps::NumberingType pageNumberingType) 155 { 156 m_pageNumberingType = pageNumberingType; 157 } setPageNumberingFontSize(const double pageNumberingFontSize)158 void setPageNumberingFontSize(const double pageNumberingFontSize) 159 { 160 m_pageNumberingFontSize = pageNumberingFontSize; 161 } setPageNumberingFontName(const librevenge::RVNGString & pageNumberingFontName)162 void setPageNumberingFontName(const librevenge::RVNGString &pageNumberingFontName) 163 { 164 m_pageNumberingFontName = pageNumberingFontName; 165 } setPageSpan(const int pageSpan)166 void setPageSpan(const int pageSpan) 167 { 168 m_pageSpan = pageSpan; 169 } 170 171 bool operator==(std::shared_ptr<WPSPageSpan> const &pageSpan) const; 172 bool operator!=(std::shared_ptr<WPSPageSpan> const &pageSpan) const 173 { 174 return !operator==(pageSpan); 175 } 176 177 // interface with the listeners 178 void getPageProperty(librevenge::RVNGPropertyList &pList) const; 179 void sendHeaderFooters(WPSContentListener *listener, librevenge::RVNGTextInterface *documentInterface); 180 void sendHeaderFooters(WKSContentListener *listener, librevenge::RVNGSpreadsheetInterface *documentInterface); 181 182 protected: 183 184 int _getHeaderFooterPosition(HeaderFooterType type, HeaderFooterOccurrence occurrence); 185 void _setHeaderFooter(HeaderFooterType type, HeaderFooterOccurrence occurrence, WPSSubDocumentPtr &doc); 186 void _removeHeaderFooter(HeaderFooterType type, HeaderFooterOccurrence occurrence); 187 bool _containsHeaderFooter(HeaderFooterType type, HeaderFooterOccurrence occurrence); 188 189 void _insertPageNumberParagraph(librevenge::RVNGTextInterface *documentInterface); 190 private: 191 double m_formLength, m_formWidth; 192 FormOrientation m_formOrientation; 193 double m_marginLeft, m_marginRight; 194 double m_marginTop, m_marginBottom; 195 PageNumberPosition m_pageNumberPosition; 196 int m_pageNumber; 197 libwps::NumberingType m_pageNumberingType; 198 librevenge::RVNGString m_pageNumberingFontName; 199 double m_pageNumberingFontSize; 200 std::vector<WPSPageSpanInternal::HeaderFooterPtr> m_headerFooterList; 201 202 int m_pageSpan; 203 }; 204 205 #endif 206 /* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */ 207