blob: 1f2ffc9e2496e1199301af2121b520c4ba2b8d0e [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef OOX_XLS_PAGESETTINGS_HXX
#define OOX_XLS_PAGESETTINGS_HXX
#include "oox/xls/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
{
::rtl::OUString maGraphicUrl; /// URL of the graphic object.
::rtl::OUString maBinSettPath; /// Relation identifier of binary printer settings.
::rtl::OUString maOddHeader; /// Header string for odd pages.
::rtl::OUString maOddFooter; /// Footer string for odd pages.
::rtl::OUString maEvenHeader; /// Header string for even pages.
::rtl::OUString maEvenFooter; /// Footer string for even pages.
::rtl::OUString maFirstHeader; /// Header string for first page of the sheet.
::rtl::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 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 ::rtl::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 );
/** Imports the LEFTMARGIN record from the passed BIFF stream. */
void importLeftMargin( BiffInputStream& rStrm );
/** Imports the RIGHTMARGIN record from the passed BIFF stream. */
void importRightMargin( BiffInputStream& rStrm );
/** Imports the TOPMARGIN record from the passed BIFF stream. */
void importTopMargin( BiffInputStream& rStrm );
/** Imports the BOTTOMMARGIN record from the passed BIFF stream. */
void importBottomMargin( BiffInputStream& rStrm );
/** Imports the SETUP record from the passed BIFF stream. */
void importPageSetup( BiffInputStream& rStrm );
/** Imports the HCENTER record from the passed BIFF stream. */
void importHorCenter( BiffInputStream& rStrm );
/** Imports the VCENTER record from the passed BIFF stream. */
void importVerCenter( BiffInputStream& rStrm );
/** Imports the PRINTHEADERS record from the passed BIFF stream. */
void importPrintHeaders( BiffInputStream& rStrm );
/** Imports the PRINTGRIDLINES record from the passed BIFF stream. */
void importPrintGridLines( BiffInputStream& rStrm );
/** Imports the HEADER record from the passed BIFF stream. */
void importHeader( BiffInputStream& rStrm );
/** Imports the FOOTER record from the passed BIFF stream. */
void importFooter( BiffInputStream& rStrm );
/** Imports the PICTURE record from the passed BIFF stream. */
void importPicture( BiffInputStream& 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 ::rtl::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 ::rtl::OUString rOddContent,
const ::rtl::OUString rEvenContent,
bool bUseEvenContent,
double fPageMargin,
double fContentMargin );
sal_Int32 writeHeaderFooter(
PropertySet& rPropSet,
sal_Int32 nPropId,
const ::rtl::OUString& rContent );
private:
typedef ::std::auto_ptr< HeaderFooterParser > HeaderFooterParserPtr;
HeaderFooterParserPtr mxHFParser;
HFHelperData maHeaderData;
HFHelperData maFooterData;
};
// ============================================================================
} // namespace xls
} // namespace oox
#endif