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 #ifndef INCLUDED_SC_SOURCE_FILTER_INC_EXCELHANDLERS_HXX
21 #define INCLUDED_SC_SOURCE_FILTER_INC_EXCELHANDLERS_HXX
23 #include <oox/core/fragmenthandler2.hxx>
24 #include "worksheethelper.hxx"
29 /** Context handler derived from the WorkbookHelper helper class.
31 Used to import contexts in global workbook fragments.
33 class WorkbookContextBase
: public ::oox::core::ContextHandler2
, public WorkbookHelper
36 template< typename ParentType
>
37 inline explicit WorkbookContextBase( ParentType
& rParent
) :
38 ::oox::core::ContextHandler2( rParent
), WorkbookHelper( rParent
) {}
41 /** Context handler derived from the WorksheetHelper helper class.
43 Used to import contexts in sheet fragments.
45 class WorksheetContextBase
: public ::oox::core::ContextHandler2
, public WorksheetHelper
48 template< typename ParentType
>
49 inline explicit WorksheetContextBase( ParentType
& rParent
) :
50 ::oox::core::ContextHandler2( rParent
), WorksheetHelper( rParent
) {}
53 /** Fragment handler derived from the WorkbookHelper helper class.
55 Used to import global workbook fragments.
57 class WorkbookFragmentBase
: public ::oox::core::FragmentHandler2
, public WorkbookHelper
60 explicit WorkbookFragmentBase(
61 const WorkbookHelper
& rHelper
,
62 const OUString
& rFragmentPath
);
65 /** Fragment handler derived from the WorksheetHelper helper class.
67 Used to import sheet fragments.
69 class WorksheetFragmentBase
: public ::oox::core::FragmentHandler2
, public WorksheetHelper
72 explicit WorksheetFragmentBase(
73 const WorksheetHelper
& rHelper
,
74 const OUString
& rFragmentPath
);
77 /** Base class for all BIFF context handlers.
79 Derived handlers have to implement the importRecord() function that has to
80 import the record the passed BIFF input stream currently points to.
82 class BiffContextHandler
85 virtual ~BiffContextHandler();
87 /** Derived classes have to implement importing the current record. */
88 virtual void importRecord( BiffInputStream
& rStrm
) = 0;
91 /** Context handler derived from the WorksheetHelper helper class.
93 Used to import contexts in sheet fragments.
95 class BiffWorksheetContextBase
: public BiffContextHandler
, public WorksheetHelper
98 explicit BiffWorksheetContextBase( const WorksheetHelper
& rHelper
);
101 /** An enumeration for all types of fragments in a BIFF workbook stream. */
102 enum BiffFragmentType
104 BIFF_FRAGMENT_GLOBALS
, /// Workbook globals fragment.
105 BIFF_FRAGMENT_WORKSHEET
, /// Worksheet fragment.
106 BIFF_FRAGMENT_CHARTSHEET
, /// Chart sheet fragment.
107 BIFF_FRAGMENT_MACROSHEET
, /// Macro sheet fragment.
108 BIFF_FRAGMENT_MODULESHEET
, /// BIFF5 VB module fragment.
109 BIFF_FRAGMENT_EMPTYSHEET
, /// Sheet fragment of unsupported type.
110 BIFF_FRAGMENT_WORKSPACE
, /// BIFF4 workspace/workbook globals.
111 BIFF_FRAGMENT_UNKNOWN
/// Unknown fragment/error.
114 class BiffFragmentHandler
117 /** Opens the stream with the passed full name. */
118 explicit BiffFragmentHandler(
119 const ::oox::core::FilterBase
& rFilter
,
120 const OUString
& rStrmName
);
122 virtual ~BiffFragmentHandler();
124 /** Imports the fragment, returns true, if EOF record has been reached. */
125 virtual bool importFragment() = 0;
128 /** Returns the BIFF input stream of this fragment. */
129 inline BiffInputStream
& getInputStream() { return *mxBiffStrm
; }
131 /** Skips the current fragment up to its trailing EOF record.
133 Skips all records until next EOF record. When this function returns,
134 stream points to the EOF record, and the next call of startNextRecord()
135 at the stream will start the record following the EOF record.
137 Embedded fragments enclosed in BOF/EOF records (e.g. embedded chart
138 objects) are skipped correctly.
140 @return True = stream points to the EOF record of the current fragment.
145 typedef ::boost::shared_ptr
< BinaryXInputStream
> XInputStreamRef
;
146 typedef ::boost::shared_ptr
< BiffInputStream
> BiffInputStreamRef
;
148 XInputStreamRef mxXInStrm
;
149 BiffInputStreamRef mxBiffStrm
;
152 /** Fragment handler derived from the WorkbookHelper helper class.
154 Used to import global workbook fragments.
156 class BiffWorkbookFragmentBase
: public BiffFragmentHandler
, public WorkbookHelper
159 explicit BiffWorkbookFragmentBase(
160 const WorkbookHelper
& rHelper
,
161 const OUString
& rStrmName
,
162 bool bCloneDecoder
= false );
170 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */