1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_SC_SOURCE_FILTER_INC_PAGESETTINGS_HXX
#define INCLUDED_SC_SOURCE_FILTER_INC_PAGESETTINGS_HXX
#include "worksheethelper.hxx"
namespace oox { class PropertySet; }
namespace oox { namespace core { class Relations; } }
namespace oox {
namespace xls {
class HeaderFooterParser;
/** Holds page style data for a single sheet. */
struct PageSettingsModel
{
OUString maGraphicUrl; /// URL of the graphic object.
OUString maBinSettPath; /// Relation identifier of binary printer settings.
OUString maOddHeader; /// Header string for odd pages.
OUString maOddFooter; /// Footer string for odd pages.
OUString maEvenHeader; /// Header string for even pages.
OUString maEvenFooter; /// Footer string for even pages.
OUString maFirstHeader; /// Header string for first page of the sheet.
OUString maFirstFooter; /// Footer string for first page of the sheet.
double mfLeftMargin; /// Margin between left edge of page and begin of sheet area.
double mfRightMargin; /// Margin between end of sheet area and right edge of page.
double mfTopMargin; /// Margin between top egde of page and begin of sheet area.
double mfBottomMargin; /// Margin between end of sheet area and bottom edge of page.
double mfHeaderMargin; /// Margin between top edge of page and begin of header.
double mfFooterMargin; /// Margin between end of footer and bottom edge of page.
sal_Int32 mnPaperSize; /// Paper size (enumeration).
sal_Int32 mnPaperWidth; /// Paper width in twips
sal_Int32 mnPaperHeight; /// Paper height in twips
sal_Int32 mnCopies; /// Number of copies to print.
sal_Int32 mnScale; /// Page scale (zoom in percent).
sal_Int32 mnFirstPage; /// First page number.
sal_Int32 mnFitToWidth; /// Fit to number of pages in horizontal direction.
sal_Int32 mnFitToHeight; /// Fit to number of pages in vertical direction.
sal_Int32 mnHorPrintRes; /// Horizontal printing resolution in DPI.
sal_Int32 mnVerPrintRes; /// Vertical printing resolution in DPI.
sal_Int32 mnOrientation; /// Landscape or portrait.
sal_Int32 mnPageOrder; /// Page order through sheet area (to left or down).
sal_Int32 mnCellComments; /// Cell comments printing mode.
sal_Int32 mnPrintErrors; /// Cell error printing mode.
bool mbUseEvenHF; /// True = use maEvenHeader/maEvenFooter.
bool mbUseFirstHF; /// True = use maFirstHeader/maFirstFooter.
bool mbValidSettings; /// True = use imported settings.
bool mbUseFirstPage; /// True = start page numbering with mnFirstPage.
bool mbBlackWhite; /// True = print black and white.
bool mbDraftQuality; /// True = print in draft quality.
bool mbFitToPages; /// True = Fit to width/height; false = scale in percent.
bool mbHorCenter; /// True = horizontally centered.
bool mbVerCenter; /// True = vertically centered.
bool mbPrintGrid; /// True = print grid lines.
bool mbPrintHeadings; /// True = print column/row headings.
explicit PageSettingsModel();
/** Sets the BIFF print errors mode. */
void setBiffPrintErrors( sal_uInt8 nPrintErrors );
};
class PageSettings : public WorksheetHelper
{
public:
explicit PageSettings( const WorksheetHelper& rHelper );
/** Imports printing options from a printOptions element. */
void importPrintOptions( const AttributeList& rAttribs );
/** Imports pageMarings element containing page margins. */
void importPageMargins( const AttributeList& rAttribs );
/** Imports pageSetup element for worksheets. */
void importPageSetup( const ::oox::core::Relations& rRelations, const AttributeList& rAttribs );
/** Imports pageSetup element for chart sheets. */
void importChartPageSetup( const ::oox::core::Relations& rRelations, const AttributeList& rAttribs );
/** Imports header and footer settings from a headerFooter element. */
void importHeaderFooter( const AttributeList& rAttribs );
/** Imports header/footer characters from a headerFooter element. */
void importHeaderFooterCharacters( const OUString& rChars, sal_Int32 nElement );
/** Imports the picture element. */
void importPicture( const ::oox::core::Relations& rRelations, const AttributeList& rAttribs );
/** Imports the PRINTOPTIONS record from the passed stream. */
void importPrintOptions( SequenceInputStream& rStrm );
/** Imports the PAGEMARGINS record from the passed stream. */
void importPageMargins( SequenceInputStream& rStrm );
/** Imports the PAGESETUP record from the passed stream. */
void importPageSetup( const ::oox::core::Relations& rRelations, SequenceInputStream& rStrm );
/** Imports the CHARTPAGESETUP record from the passed stream. */
void importChartPageSetup( const ::oox::core::Relations& rRelations, SequenceInputStream& rStrm );
/** Imports the HEADERFOOTER record from the passed stream. */
void importHeaderFooter( SequenceInputStream& rStrm );
/** Imports the PICTURE record from the passed stream. */
void importPicture( const ::oox::core::Relations& rRelations, SequenceInputStream& rStrm );
/** Sets whether percentual scaling or fit to width/height scaling is used. */
void setFitToPagesMode( bool bFitToPages );
/** Creates a page style for the spreadsheet and sets all page properties. */
void finalizeImport();
private:
/** Imports the binary picture data from the fragment with the passed identifier. */
void importPictureData( const ::oox::core::Relations& rRelations, const OUString& rRelId );
private:
PageSettingsModel maModel;
};
class PageSettingsConverter : public WorkbookHelper
{
public:
explicit PageSettingsConverter( const WorkbookHelper& rHelper );
virtual ~PageSettingsConverter();
/** Writes all properties to the passed property set of a page style object. */
void writePageSettingsProperties(
PropertySet& rPropSet,
const PageSettingsModel& rModel,
WorksheetType eSheetType );
private:
struct HFHelperData
{
sal_Int32 mnLeftPropId;
sal_Int32 mnRightPropId;
sal_Int32 mnHeight;
sal_Int32 mnBodyDist;
bool mbHasContent;
bool mbShareOddEven;
bool mbDynamicHeight;
explicit HFHelperData( sal_Int32 nLeftPropId, sal_Int32 nRightPropId );
};
private:
void convertHeaderFooterData(
PropertySet& rPropSet,
HFHelperData& orHFData,
const OUString& rOddContent,
const OUString& rEvenContent,
bool bUseEvenContent,
double fPageMargin,
double fContentMargin );
sal_Int32 writeHeaderFooter(
PropertySet& rPropSet,
sal_Int32 nPropId,
const OUString& rContent );
private:
typedef ::std::unique_ptr< HeaderFooterParser > HeaderFooterParserPtr;
HeaderFooterParserPtr mxHFParser;
HFHelperData maHeaderData;
HFHelperData maFooterData;
};
} // namespace xls
} // namespace oox
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|