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 <oox/token/tokens.hxx>
25 #include "biffinputstream.hxx"
26 #include "pagesettings.hxx"
27 #include "viewsettings.hxx"
28 #include "workbooksettings.hxx"
29 #include "worksheetsettings.hxx"
34 using namespace ::oox::core
;
36 ChartsheetFragment::ChartsheetFragment( const WorksheetHelper
& rHelper
, const OUString
& rFragmentPath
) :
37 WorksheetFragmentBase( rHelper
, rFragmentPath
)
41 ContextHandlerRef
ChartsheetFragment::onCreateContext( sal_Int32 nElement
, const AttributeList
& rAttribs
)
43 switch( getCurrentElement() )
45 case XML_ROOT_CONTEXT
:
46 if( nElement
== XLS_TOKEN( chartsheet
) ) return this;
49 case XLS_TOKEN( chartsheet
):
52 case XLS_TOKEN( sheetViews
): return this;
54 case XLS_TOKEN( sheetPr
): getWorksheetSettings().importChartSheetPr( rAttribs
); break;
55 case XLS_TOKEN( sheetProtection
): getWorksheetSettings().importChartProtection( rAttribs
); break;
56 case XLS_TOKEN( pageMargins
): getPageSettings().importPageMargins( rAttribs
); break;
57 case XLS_TOKEN( pageSetup
): getPageSettings().importChartPageSetup( getRelations(), rAttribs
); break;
58 case XLS_TOKEN( headerFooter
): getPageSettings().importHeaderFooter( rAttribs
); return this;
59 case XLS_TOKEN( picture
): getPageSettings().importPicture( getRelations(), rAttribs
); break;
60 case XLS_TOKEN( drawing
): importDrawing( rAttribs
); break;
64 case XLS_TOKEN( sheetViews
):
65 if( nElement
== XLS_TOKEN( sheetView
) ) getSheetViewSettings().importChartSheetView( rAttribs
);
68 case XLS_TOKEN( headerFooter
):
71 case XLS_TOKEN( firstHeader
):
72 case XLS_TOKEN( firstFooter
):
73 case XLS_TOKEN( oddHeader
):
74 case XLS_TOKEN( oddFooter
):
75 case XLS_TOKEN( evenHeader
):
76 case XLS_TOKEN( evenFooter
): return this; // collect contents in onCharacters()
83 void ChartsheetFragment::onCharacters( const OUString
& rChars
)
85 switch( getCurrentElement() )
87 case XLS_TOKEN( firstHeader
):
88 case XLS_TOKEN( firstFooter
):
89 case XLS_TOKEN( oddHeader
):
90 case XLS_TOKEN( oddFooter
):
91 case XLS_TOKEN( evenHeader
):
92 case XLS_TOKEN( evenFooter
):
93 getPageSettings().importHeaderFooterCharacters( rChars
, getCurrentElement() );
98 ContextHandlerRef
ChartsheetFragment::onCreateRecordContext( sal_Int32 nRecId
, SequenceInputStream
& rStrm
)
100 switch( getCurrentElement() )
102 case XML_ROOT_CONTEXT
:
103 if( nRecId
== BIFF12_ID_WORKSHEET
) return this;
106 case BIFF12_ID_WORKSHEET
:
109 case BIFF12_ID_CHARTSHEETVIEWS
: return this;
111 case BIFF12_ID_CHARTSHEETPR
: getWorksheetSettings().importChartSheetPr( rStrm
); break;
112 case BIFF12_ID_CHARTPROTECTION
: getWorksheetSettings().importChartProtection( rStrm
); break;
113 case BIFF12_ID_PAGEMARGINS
: getPageSettings().importPageMargins( rStrm
); break;
114 case BIFF12_ID_CHARTPAGESETUP
: getPageSettings().importChartPageSetup( getRelations(), rStrm
); break;
115 case BIFF12_ID_HEADERFOOTER
: getPageSettings().importHeaderFooter( rStrm
); break;
116 case BIFF12_ID_PICTURE
: getPageSettings().importPicture( getRelations(), rStrm
); break;
117 case BIFF12_ID_DRAWING
: importDrawing( rStrm
); break;
121 case BIFF12_ID_CHARTSHEETVIEWS
:
122 if( nRecId
== BIFF12_ID_CHARTSHEETVIEW
) getSheetViewSettings().importChartSheetView( rStrm
);
128 const RecordInfo
* ChartsheetFragment::getRecordInfos() const
130 static const RecordInfo spRecInfos
[] =
132 { BIFF12_ID_CHARTSHEETVIEW
, BIFF12_ID_CHARTSHEETVIEW
+ 1 },
133 { BIFF12_ID_CHARTSHEETVIEWS
, BIFF12_ID_CHARTSHEETVIEWS
+ 1 },
134 { BIFF12_ID_CUSTOMCHARTVIEW
, BIFF12_ID_CUSTOMCHARTVIEW
+ 1 },
135 { BIFF12_ID_CUSTOMCHARTVIEWS
, BIFF12_ID_CUSTOMCHARTVIEWS
+ 1 },
136 { BIFF12_ID_HEADERFOOTER
, BIFF12_ID_HEADERFOOTER
+ 1 },
137 { BIFF12_ID_WORKSHEET
, BIFF12_ID_WORKSHEET
+ 1 },
143 void ChartsheetFragment::initializeImport()
145 // initial processing in base class WorksheetHelper
146 initializeWorksheetImport();
149 void ChartsheetFragment::finalizeImport()
151 // final processing in base class WorksheetHelper
152 finalizeWorksheetImport();
155 // private --------------------------------------------------------------------
157 void ChartsheetFragment::importDrawing( const AttributeList
& rAttribs
)
159 setDrawingPath( getFragmentPathFromRelId( rAttribs
.getString( R_TOKEN( id
), OUString() ) ) );
162 void ChartsheetFragment::importDrawing( SequenceInputStream
& rStrm
)
164 setDrawingPath( getFragmentPathFromRelId( BiffHelper::readString( rStrm
) ) );
170 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */