31#include "FilterInternal.h"
33#include "DocumentElement.h"
36PageSpan::PageSpan(
const _SH_PropertyList &xPropList) :
38const int iSpan, const float fFormLength, const float fFormWidth, const WPXFormQt::Orientation fFormQt::Orientation,
39 const float fLeftMargin, const float fRightMargin, const float fTopMargin, const float fBottomMargin):
41 mfFormLength(fFormLength),
42 mfFormWidth(fFormWidth),
43 mfFormQt::Orientation(fFormQt::Orientation),
44 mfMarginLeft(fLeftMargin),
45 mfMarginRight(fRightMargin),
46 mfMarginTop(fTopMargin),
47 mfMarginBottom(fBottomMargin),
49 mxPropList(xPropList),
50 mpHeaderContent(NULL),
51 mpFooterContent(NULL),
52 mpHeaderLeftContent(NULL),
53 mpFooterLeftContent(NULL)
59 delete mpHeaderContent;
60 delete mpHeaderLeftContent;
61 delete mpFooterContent;
62 delete mpFooterLeftContent;
65int PageSpan::getSpan()
const
67 if (mxPropList[
"libwpd:num-pages"])
68 return mxPropList[
"libwpd:num-pages"]->getInt();
73float PageSpan::getMarginLeft()
const
75 if (mxPropList[
"fo:margin-left"])
76#if defined(HAVE_LIBWPD_090) || defined(HAVE_LIBWPD_0100)
77 return mxPropList[
"fo:margin-left"]->getDouble();
79 return mxPropList[
"fo:margin-left"]->getFloat();
85float PageSpan::getMarginRight()
const
87 if (mxPropList[
"fo:margin-right"])
88#if defined(HAVE_LIBWPD_090) || defined(HAVE_LIBWPD_0100)
89 return mxPropList[
"fo:margin-right"]->getDouble();
91 return mxPropList[
"fo:margin-right"]->getFloat();
97void PageSpan::writePageMaster(
const int iNum, DocumentHandler &xHandler)
const
99 _SH_PropertyList propList;
101 _SH_String sPageMasterName;
102 sPageMasterName.sprintf(
"PM%i", iNum+2);
103 propList.insert(
"style:name", sPageMasterName);
104 xHandler.startElement(
"style:page-master", propList);
106 _SH_PropertyList tempPropList = mxPropList;
107 if (!tempPropList[
"style:writing-mode"])
108 tempPropList.insert(
"style:writing-mode", _SH_String(
"lr-tb"));
109 if (!tempPropList[
"style:footnote-max-height"])
110 tempPropList.insert(
"style:footnote-max-height", _SH_String(
"0inch"));
111 xHandler.startElement(
"style:properties", tempPropList);
113 _SH_PropertyList footnoteSepPropList;
114 footnoteSepPropList.insert(
"style:width", _SH_String(
"0.0071inch"));
115 footnoteSepPropList.insert(
"style:distance-before-sep", _SH_String(
"0.0398inch"));
116 footnoteSepPropList.insert(
"style:distance-after-sep", _SH_String(
"0.0398inch"));
117 footnoteSepPropList.insert(
"style:adjustment", _SH_String(
"left"));
118 footnoteSepPropList.insert(
"style:rel-width", _SH_String(
"25\%"));
119 footnoteSepPropList.insert(
"style:color", _SH_String(
"#000000"));
120 xHandler.startElement(
"style:footnote-sep", footnoteSepPropList);
122 xHandler.endElement(
"style:footnote-sep");
123 xHandler.endElement(
"style:properties");
124 xHandler.endElement(
"style:page-master");
127void PageSpan::writeMasterPages(
const int iStartingNum,
const int iPageMasterNum,
const bool bLastPageSpan,
128 DocumentHandler &xHandler)
const
130 _SH_PropertyList propList;
133 (bLastPageSpan) ? iSpan = 1 : iSpan = getSpan();
135 for (
int i=iStartingNum; i<(iStartingNum+iSpan); i++)
137 TagOpenElement masterPageOpen(
"style:master-page");
138 _SH_String sMasterPageName;
139 sMasterPageName.sprintf(
"Page Style %i", i);
140 _SH_String sPageMasterName;
141 sPageMasterName.sprintf(
"PM%i", iPageMasterNum+2);
142 propList.insert(
"style:name", sMasterPageName);
143 propList.insert(
"style:page-master-name", sPageMasterName);
146 _SH_String sNextMasterPageName;
147 sNextMasterPageName.sprintf(
"Page Style %i", (i+1));
148 propList.insert(
"style:next-style-name", sNextMasterPageName);
150 xHandler.startElement(
"style:master-page", propList);
153 _writeHeaderFooter(
"style:header", *mpHeaderContent, xHandler);
154 if (mpHeaderLeftContent)
155 _writeHeaderFooter(
"style:header-left", *mpHeaderLeftContent, xHandler);
157 _writeHeaderFooter(
"style:footer", *mpFooterContent, xHandler);
158 if (mpFooterLeftContent)
159 _writeHeaderFooter(
"style:footer-left", *mpFooterLeftContent, xHandler);
161 xHandler.endElement(
"style:master-page");
166void PageSpan::_writeHeaderFooter(
const char *headerFooterTagName,
167 const std::vector<DocumentElement *> & headerFooterContent,
168 DocumentHandler &xHandler)
const
170 TagOpenElement headerFooterOpen(headerFooterTagName);
171 headerFooterOpen.write(xHandler);
172 for (std::vector<DocumentElement *>::const_iterator iter = headerFooterContent.begin();
173 iter != headerFooterContent.end();
175 (*iter)->write(xHandler);
177 TagCloseElement headerFooterClose(headerFooterTagName);
178 headerFooterClose.write(xHandler);