1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include <chartsheetfragment.hxx>
22 #include <oox/helper/attributelist.hxx>
23 #include <oox/token/namespaces.hxx>
24 #include <pagesettings.hxx>
25 #include <viewsettings.hxx>
26 #include <worksheetsettings.hxx>
27 #include <biffhelper.hxx>
32 using namespace ::oox::core
;
34 ChartsheetFragment::ChartsheetFragment( const WorksheetHelper
& rHelper
, const OUString
& rFragmentPath
) :
35 WorksheetFragmentBase( rHelper
, rFragmentPath
)
39 ContextHandlerRef
ChartsheetFragment::onCreateContext( sal_Int32 nElement
, const AttributeList
& rAttribs
)
41 switch( getCurrentElement() )
43 case XML_ROOT_CONTEXT
:
44 if( nElement
== XLS_TOKEN( chartsheet
) ) return this;
47 case XLS_TOKEN( chartsheet
):
50 case XLS_TOKEN( sheetViews
): return this;
52 case XLS_TOKEN( sheetPr
): getWorksheetSettings().importChartSheetPr( rAttribs
); return this;
53 case XLS_TOKEN( sheetProtection
): getWorksheetSettings().importChartProtection( rAttribs
); break;
54 case XLS_TOKEN( pageMargins
): getPageSettings().importPageMargins( rAttribs
); break;
55 case XLS_TOKEN( pageSetup
): getPageSettings().importChartPageSetup( getRelations(), rAttribs
); break;
56 case XLS_TOKEN( headerFooter
): getPageSettings().importHeaderFooter( rAttribs
); return this;
57 case XLS_TOKEN( picture
): getPageSettings().importPicture( getRelations(), rAttribs
); break;
58 case XLS_TOKEN( drawing
): importDrawing( rAttribs
); break;
62 case XLS_TOKEN( sheetViews
):
63 if( nElement
== XLS_TOKEN( sheetView
) ) getSheetViewSettings().importChartSheetView( rAttribs
);
66 case XLS_TOKEN( headerFooter
):
69 case XLS_TOKEN( firstHeader
):
70 case XLS_TOKEN( firstFooter
):
71 case XLS_TOKEN( oddHeader
):
72 case XLS_TOKEN( oddFooter
):
73 case XLS_TOKEN( evenHeader
):
74 case XLS_TOKEN( evenFooter
): return this; // collect contents in onCharacters()
78 case XLS_TOKEN( sheetPr
):
81 case XLS_TOKEN( tabColor
): getWorksheetSettings().importTabColor( rAttribs
); break;
89 void ChartsheetFragment::onCharacters( const OUString
& rChars
)
91 switch( getCurrentElement() )
93 case XLS_TOKEN( firstHeader
):
94 case XLS_TOKEN( firstFooter
):
95 case XLS_TOKEN( oddHeader
):
96 case XLS_TOKEN( oddFooter
):
97 case XLS_TOKEN( evenHeader
):
98 case XLS_TOKEN( evenFooter
):
99 getPageSettings().importHeaderFooterCharacters( rChars
, getCurrentElement() );
104 ContextHandlerRef
ChartsheetFragment::onCreateRecordContext( sal_Int32 nRecId
, SequenceInputStream
& rStrm
)
106 switch( getCurrentElement() )
108 case XML_ROOT_CONTEXT
:
109 if( nRecId
== BIFF12_ID_WORKSHEET
) return this;
112 case BIFF12_ID_WORKSHEET
:
115 case BIFF12_ID_CHARTSHEETVIEWS
: return this;
117 case BIFF12_ID_CHARTSHEETPR
: getWorksheetSettings().importChartSheetPr( rStrm
); break;
118 case BIFF12_ID_CHARTPROTECTION
: getWorksheetSettings().importChartProtection( rStrm
); break;
119 case BIFF12_ID_PAGEMARGINS
: getPageSettings().importPageMargins( rStrm
); break;
120 case BIFF12_ID_CHARTPAGESETUP
: getPageSettings().importChartPageSetup( getRelations(), rStrm
); break;
121 case BIFF12_ID_HEADERFOOTER
: getPageSettings().importHeaderFooter( rStrm
); break;
122 case BIFF12_ID_PICTURE
: getPageSettings().importPicture( getRelations(), rStrm
); break;
123 case BIFF12_ID_DRAWING
: importDrawing( rStrm
); break;
127 case BIFF12_ID_CHARTSHEETVIEWS
:
128 if( nRecId
== BIFF12_ID_CHARTSHEETVIEW
) getSheetViewSettings().importChartSheetView( rStrm
);
134 const RecordInfo
* ChartsheetFragment::getRecordInfos() const
136 static const RecordInfo spRecInfos
[] =
138 { BIFF12_ID_CHARTSHEETVIEW
, BIFF12_ID_CHARTSHEETVIEW
+ 1 },
139 { BIFF12_ID_CHARTSHEETVIEWS
, BIFF12_ID_CHARTSHEETVIEWS
+ 1 },
140 { BIFF12_ID_CUSTOMCHARTVIEW
, BIFF12_ID_CUSTOMCHARTVIEW
+ 1 },
141 { BIFF12_ID_CUSTOMCHARTVIEWS
, BIFF12_ID_CUSTOMCHARTVIEWS
+ 1 },
142 { BIFF12_ID_HEADERFOOTER
, BIFF12_ID_HEADERFOOTER
+ 1 },
143 { BIFF12_ID_WORKSHEET
, BIFF12_ID_WORKSHEET
+ 1 },
149 void ChartsheetFragment::initializeImport()
151 // initial processing in base class WorksheetHelper
152 initializeWorksheetImport();
155 void ChartsheetFragment::finalizeImport()
157 // final processing in base class WorksheetHelper
158 finalizeWorksheetImport();
161 // private --------------------------------------------------------------------
163 void ChartsheetFragment::importDrawing( const AttributeList
& rAttribs
)
165 setDrawingPath( getFragmentPathFromRelId( rAttribs
.getString( R_TOKEN( id
), OUString() ) ) );
168 void ChartsheetFragment::importDrawing( SequenceInputStream
& rStrm
)
170 setDrawingPath( getFragmentPathFromRelId( BiffHelper::readString( rStrm
) ) );
176 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */