diff options
Diffstat (limited to 'oox/inc/oox/xls/worksheethelper.hxx')
-rw-r--r-- | oox/inc/oox/xls/worksheethelper.hxx | 354 |
1 files changed, 354 insertions, 0 deletions
diff --git a/oox/inc/oox/xls/worksheethelper.hxx b/oox/inc/oox/xls/worksheethelper.hxx new file mode 100644 index 000000000000..e87599409528 --- /dev/null +++ b/oox/inc/oox/xls/worksheethelper.hxx @@ -0,0 +1,354 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef OOX_XLS_WORKSHEETHELPER_HXX +#define OOX_XLS_WORKSHEETHELPER_HXX + +#include "oox/helper/containerhelper.hxx" +#include "oox/helper/progressbar.hxx" +#include "oox/ole/olehelper.hxx" +#include "oox/xls/addressconverter.hxx" +#include "oox/xls/formulabase.hxx" + +namespace com { namespace sun { namespace star { + namespace awt { struct Point; } + namespace awt { struct Rectangle; } + namespace awt { struct Size; } + namespace drawing { class XDrawPage; } + namespace sheet { class XSheetCellRanges; } + namespace sheet { class XSpreadsheet; } + namespace table { class XCell; } + namespace table { class XCellRange; } + namespace table { class XTableColumns; } + namespace table { class XTableRows; } +} } } + +namespace oox { +namespace xls { + +class AutoFilterBuffer; +struct BinAddress; +struct BinRange; +class BiffSheetDrawing; +class BinRangeList; +class CommentsBuffer; +class CondFormatBuffer; +class Font; +class PageSettings; +class QueryTableBuffer; +class RichString; +class SheetDataBuffer; +class SheetViewSettings; +class VmlDrawing; +class WorksheetSettings; + +// ============================================================================ +// ============================================================================ + +/** An enumeration for all types of sheets in a workbook. */ +enum WorksheetType +{ + SHEETTYPE_WORKSHEET, /// Worksheet. + SHEETTYPE_CHARTSHEET, /// Chart sheet. + SHEETTYPE_MACROSHEET, /// Macro sheet. + SHEETTYPE_DIALOGSHEET, /// Dialog sheet (BIFF5+). + SHEETTYPE_MODULESHEET, /// VB module sheet (BIFF5 only). + SHEETTYPE_EMPTYSHEET /// Other (unsupported) sheet type. +}; + +// ============================================================================ + +/** Stores settings and formatting data about a range of sheet columns. */ +struct ColumnModel +{ + ValueRange maRange; /// 1-based (!) range of the described columns. + double mfWidth; /// Column width in number of characters. + sal_Int32 mnXfId; /// Column default formatting. + sal_Int32 mnLevel; /// Column outline level. + bool mbShowPhonetic; /// True = cells in column show phonetic settings. + bool mbHidden; /// True = column is hidden. + bool mbCollapsed; /// True = column outline is collapsed. + + explicit ColumnModel(); + + /** Returns true, if this entry can be merged with the passed column range (column settings are equal). */ + bool isMergeable( const ColumnModel& rModel ) const; +}; + +// ---------------------------------------------------------------------------- + +/** Stores settings and formatting data about a sheet row. */ +struct RowModel +{ + sal_Int32 mnRow; /// 1-based (!) index of the described row. + ValueRangeSet maColSpans; /// 0-based (!) column ranges of used cells. + double mfHeight; /// Row height in points. + sal_Int32 mnXfId; /// Row default formatting (see mbIsFormatted). + sal_Int32 mnLevel; /// Row outline level. + bool mbCustomHeight; /// True = row has custom height. + bool mbCustomFormat; /// True = cells in row have explicit formatting. + bool mbShowPhonetic; /// True = cells in row show phonetic settings. + bool mbHidden; /// True = row is hidden. + bool mbCollapsed; /// True = row outline is collapsed. + bool mbThickTop; /// True = row has extra space above text. + bool mbThickBottom; /// True = row has extra space below text. + + explicit RowModel(); + + /** Inserts the passed column span into the row model. */ + void insertColSpan( const ValueRange& rColSpan ); + /** Returns true, if this entry can be merged with the passed row range (row settings are equal). */ + bool isMergeable( const RowModel& rModel ) const; +}; + +// ---------------------------------------------------------------------------- + +/** Stores formatting data about a page break. */ +struct PageBreakModel +{ + sal_Int32 mnColRow; /// 0-based (!) index of column/row. + sal_Int32 mnMin; /// Start of limited break. + sal_Int32 mnMax; /// End of limited break. + bool mbManual; /// True = manual page break. + + explicit PageBreakModel(); +}; + +// ---------------------------------------------------------------------------- + +/** Stores data about a hyperlink range. */ +struct HyperlinkModel : public ::oox::ole::StdHlinkInfo +{ + ::com::sun::star::table::CellRangeAddress + maRange; /// The cell area containing the hyperlink. + ::rtl::OUString maTooltip; /// Additional tooltip text. + + explicit HyperlinkModel(); +}; + +// ---------------------------------------------------------------------------- + +/** Stores data about ranges with data validation settings. */ +struct ValidationModel +{ + ApiCellRangeList maRanges; + ApiTokenSequence maTokens1; + ApiTokenSequence maTokens2; + ::rtl::OUString maInputTitle; + ::rtl::OUString maInputMessage; + ::rtl::OUString maErrorTitle; + ::rtl::OUString maErrorMessage; + sal_Int32 mnType; + sal_Int32 mnOperator; + sal_Int32 mnErrorStyle; + bool mbShowInputMsg; + bool mbShowErrorMsg; + bool mbNoDropDown; + bool mbAllowBlank; + + explicit ValidationModel(); + + /** Sets the passed BIFF validation type. */ + void setBiffType( sal_uInt8 nType ); + /** Sets the passed BIFF operator. */ + void setBiffOperator( sal_uInt8 nOperator ); + /** Sets the passed BIFF error style. */ + void setBiffErrorStyle( sal_uInt8 nErrorStyle ); +}; + +// ============================================================================ +// ============================================================================ + +class WorksheetGlobals; +typedef ::boost::shared_ptr< WorksheetGlobals > WorksheetGlobalsRef; + +class WorksheetHelper : public WorkbookHelper +{ +public: + /*implicit*/ WorksheetHelper( WorksheetGlobals& rSheetGlob ); + + static WorksheetGlobalsRef constructGlobals( + const WorkbookHelper& rHelper, + const ISegmentProgressBarRef& rxProgressBar, + WorksheetType eSheetType, + sal_Int16 nSheet ); + + // ------------------------------------------------------------------------ + + /** Returns the type of this sheet. */ + WorksheetType getSheetType() const; + /** Returns the index of the current sheet. */ + sal_Int16 getSheetIndex() const; + /** Returns the XSpreadsheet interface of the current sheet. */ + const ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheet >& + getSheet() const; + + /** Returns the XCell interface for the passed cell address. */ + ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell > + getCell( const ::com::sun::star::table::CellAddress& rAddress ) const; + /** Returns the XCellRange interface for the passed cell range address. */ + ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > + getCellRange( const ::com::sun::star::table::CellRangeAddress& rRange ) const; + /** Returns the XSheetCellRanges interface for the passed cell range addresses. */ + ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSheetCellRanges > + getCellRangeList( const ApiCellRangeList& rRanges ) const; + + /** Returns the address of the passed cell. The cell reference must be valid. */ + static ::com::sun::star::table::CellAddress + getCellAddress( + const ::com::sun::star::uno::Reference< ::com::sun::star::table::XCell >& rxCell ); + /** Returns the address of the passed cell range. The range reference must be valid. */ + static ::com::sun::star::table::CellRangeAddress + getRangeAddress( + const ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange >& rxRange ); + + /** Returns the XCellRange interface for a column. */ + ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > + getColumn( sal_Int32 nCol ) const; + /** Returns the XCellRange interface for a row. */ + ::com::sun::star::uno::Reference< ::com::sun::star::table::XCellRange > + getRow( sal_Int32 nRow ) const; + + /** Returns the XTableColumns interface for a range of columns. */ + ::com::sun::star::uno::Reference< ::com::sun::star::table::XTableColumns > + getColumns( const ValueRange& rColRange ) const; + /** Returns the XTableRows interface for a range of rows. */ + ::com::sun::star::uno::Reference< ::com::sun::star::table::XTableRows > + getRows( const ValueRange& rRowRange ) const; + + /** Returns the XDrawPage interface of the draw page of the current sheet. */ + ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage > + getDrawPage() const; + + /** Returns the absolute cell position in 1/100 mm. */ + ::com::sun::star::awt::Point getCellPosition( sal_Int32 nCol, sal_Int32 nRow ) const; + /** Returns the cell size in 1/100 mm. */ + ::com::sun::star::awt::Size getCellSize( sal_Int32 nCol, sal_Int32 nRow ) const; + /** Returns the size of the entire drawing page in 1/100 mm. */ + ::com::sun::star::awt::Size getDrawPageSize() const; + + /** Returns the buffer for cell contents and cell formatting. */ + SheetDataBuffer& getSheetData() const; + /** Returns the conditional formattings in this sheet. */ + CondFormatBuffer& getCondFormats() const; + /** Returns the buffer for all cell comments in this sheet. */ + CommentsBuffer& getComments() const; + /** Returns the auto filters for the sheet. */ + AutoFilterBuffer& getAutoFilters() const; + /** Returns the buffer for all web query tables in this sheet. */ + QueryTableBuffer& getQueryTables() const; + /** Returns the worksheet settings object. */ + WorksheetSettings& getWorksheetSettings() const; + /** Returns the page/print settings for this sheet. */ + PageSettings& getPageSettings() const; + /** Returns the view settings for this sheet. */ + SheetViewSettings& getSheetViewSettings() const; + /** Returns the VML drawing page for this sheet (OOXML/BIFF12 only). */ + VmlDrawing& getVmlDrawing() const; + /** Returns the BIFF drawing page for this sheet (BIFF2-BIFF8 only). */ + BiffSheetDrawing& getBiffDrawing() const; + + /** Changes the current sheet type. */ + void setSheetType( WorksheetType eSheetType ); + /** Sets a column or row page break described in the passed struct. */ + void setPageBreak( const PageBreakModel& rModel, bool bRowBreak ); + /** Inserts the hyperlink URL into the spreadsheet. */ + void setHyperlink( const HyperlinkModel& rModel ); + /** Inserts the data validation settings into the spreadsheet. */ + void setValidation( const ValidationModel& rModel ); + /** Sets the passed label ranges to the current sheet. */ + void setLabelRanges( const ApiCellRangeList& rColRanges, const ApiCellRangeList& rRowRanges ); + /** Sets the path to the DrawingML fragment of this sheet. */ + void setDrawingPath( const ::rtl::OUString& rDrawingPath ); + /** Sets the path to the legacy VML drawing fragment of this sheet. */ + void setVmlDrawingPath( const ::rtl::OUString& rVmlDrawingPath ); + + /** Extends the used area of this sheet by the passed cell position. */ + void extendUsedArea( const ::com::sun::star::table::CellAddress& rAddress ); + /** Extends the used area of this sheet by the passed cell range. */ + void extendUsedArea( const ::com::sun::star::table::CellRangeAddress& rRange ); + /** Extends the shape bounding box by the position and size of the passed rectangle (in 1/100 mm). */ + void extendShapeBoundingBox( const ::com::sun::star::awt::Rectangle& rShapeRect ); + + /** Sets base width for all columns (without padding pixels). This value + is only used, if width has not been set with setDefaultColumnWidth(). */ + void setBaseColumnWidth( sal_Int32 nWidth ); + /** Sets default width for all columns. This function overrides the base + width set with the setBaseColumnWidth() function. */ + void setDefaultColumnWidth( double fWidth ); + /** Converts default cell formatting for a range of columns. */ + void setDefaultColumnFormat( sal_Int32 nFirstCol, sal_Int32 nLastCol, sal_Int32 nXfId ); + /** Sets column settings for a specific range of columns. + @descr Column default formatting is converted directly, other settings + are cached and converted in the finalizeWorksheetImport() call. */ + void setColumnModel( const ColumnModel& rModel ); + + /** Sets default height and hidden state for all unused rows in the sheet. */ + void setDefaultRowSettings( + double fHeight, bool bCustomHeight, + bool bHidden, bool bThickTop, bool bThickBottom ); + /** Sets row settings for a specific range of rows. + @descr Row default formatting is converted directly, other settings + are cached and converted in the finalizeWorksheetImport() call. */ + void setRowModel( const RowModel& rModel ); + /** Specifies that the passed row needs to set its height manually. */ + void setManualRowHeight( sal_Int32 nRow ); + + /** Inserts a value cell directly into the Calc sheet. */ + void putValue( + const ::com::sun::star::table::CellAddress& rAddress, + double fValue ) const; + /** Inserts a string cell directly into the Calc sheet. */ + void putString( + const ::com::sun::star::table::CellAddress& rAddress, + const ::rtl::OUString& rText ) const; + /** Inserts a rich-string cell directly into the Calc sheet. */ + void putRichString( + const ::com::sun::star::table::CellAddress& rAddress, + const RichString& rString, + const Font* pFirstPortionFont ) const; + /** Inserts a formula cell directly into the Calc sheet. */ + void putFormulaTokens( + const ::com::sun::star::table::CellAddress& rAddress, + const ApiTokenSequence& rTokens ) const; + + /** Initial conversion before importing the worksheet. */ + void initializeWorksheetImport(); + /** Final conversion after importing the worksheet. */ + void finalizeWorksheetImport(); + +private: + WorksheetGlobals& mrSheetGlob; +}; + +// ============================================================================ +// ============================================================================ + +} // namespace xls +} // namespace oox + +#endif |