Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
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/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
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 .
18 : */
19 :
20 : #ifndef INCLUDED_SC_SOURCE_FILTER_INC_PIVOTCACHEFRAGMENT_HXX
21 : #define INCLUDED_SC_SOURCE_FILTER_INC_PIVOTCACHEFRAGMENT_HXX
22 :
23 : #include "excelhandlers.hxx"
24 :
25 : namespace oox {
26 : namespace xls {
27 :
28 : class PivotCache;
29 : class PivotCacheField;
30 :
31 48 : class PivotCacheFieldContext : public WorkbookContextBase
32 : {
33 : public:
34 : explicit PivotCacheFieldContext(
35 : WorkbookFragmentBase& rFragment,
36 : PivotCacheField& rCacheField );
37 :
38 : protected:
39 : virtual ::oox::core::ContextHandlerRef onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) SAL_OVERRIDE;
40 : virtual void onStartElement( const AttributeList& rAttribs ) SAL_OVERRIDE;
41 : virtual ::oox::core::ContextHandlerRef onCreateRecordContext( sal_Int32 nRecId, SequenceInputStream& rStrm ) SAL_OVERRIDE;
42 : virtual void onStartRecord( SequenceInputStream& rStrm ) SAL_OVERRIDE;
43 :
44 : private:
45 : PivotCacheField& mrCacheField;
46 : };
47 :
48 8 : class PivotCacheDefinitionFragment : public WorkbookFragmentBase
49 : {
50 : public:
51 : explicit PivotCacheDefinitionFragment(
52 : const WorkbookHelper& rHelper,
53 : const OUString& rFragmentPath,
54 : PivotCache& rPivotCache );
55 :
56 : protected:
57 : virtual ::oox::core::ContextHandlerRef onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) SAL_OVERRIDE;
58 : virtual ::oox::core::ContextHandlerRef onCreateRecordContext( sal_Int32 nRecId, SequenceInputStream& rStrm ) SAL_OVERRIDE;
59 : virtual const ::oox::core::RecordInfo* getRecordInfos() const SAL_OVERRIDE;
60 : virtual void finalizeImport() SAL_OVERRIDE;
61 :
62 : private:
63 : PivotCache& mrPivotCache;
64 : };
65 :
66 0 : class PivotCacheRecordsFragment : public WorksheetFragmentBase
67 : {
68 : public:
69 : explicit PivotCacheRecordsFragment(
70 : const WorksheetHelper& rHelper,
71 : const OUString& rFragmentPath,
72 : const PivotCache& rPivotCache );
73 :
74 : protected:
75 : virtual ::oox::core::ContextHandlerRef onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) SAL_OVERRIDE;
76 : virtual ::oox::core::ContextHandlerRef onCreateRecordContext( sal_Int32 nRecId, SequenceInputStream& rStrm ) SAL_OVERRIDE;
77 : virtual const ::oox::core::RecordInfo* getRecordInfos() const SAL_OVERRIDE;
78 :
79 : private:
80 : void startCacheRecord();
81 : void importPCRecord( SequenceInputStream& rStrm );
82 : void importPCRecordItem( sal_Int32 nRecId, SequenceInputStream& rStrm );
83 :
84 : private:
85 : const PivotCache& mrPivotCache;
86 : sal_Int32 mnColIdx; /// Relative column index in source data.
87 : sal_Int32 mnRowIdx; /// Relative row index in source data.
88 : bool mbInRecord;
89 : };
90 :
91 0 : class BiffPivotCacheFragment : public BiffWorkbookFragmentBase
92 : {
93 : public:
94 : explicit BiffPivotCacheFragment(
95 : const WorkbookHelper& rHelper,
96 : const OUString& rStrmName,
97 : PivotCache& rPivotCache );
98 :
99 : /** Imports the entire fragment, returns true, if EOF record has been reached. */
100 : virtual bool importFragment() SAL_OVERRIDE;
101 :
102 : private:
103 : PivotCache& mrPivotCache;
104 : };
105 :
106 0 : class BiffPivotCacheRecordsContext : public BiffWorksheetContextBase
107 : {
108 : public:
109 : explicit BiffPivotCacheRecordsContext(
110 : const WorksheetHelper& rHelper,
111 : const PivotCache& rPivotCache );
112 :
113 : /** Reads the current record from stream and tries to insert a cell into
114 : the source data sheet. */
115 : virtual void importRecord( BiffInputStream& rStrm ) SAL_OVERRIDE;
116 :
117 : private:
118 : void startNextRow();
119 :
120 : private:
121 : typedef ::std::vector< sal_Int32 > ColumnIndexVector;
122 :
123 : const PivotCache& mrPivotCache;
124 : ColumnIndexVector maUnsharedCols; /// Column indexes of all unshared cache fields.
125 : size_t mnColIdx; /// Current index into maUnsharedCols.
126 : sal_Int32 mnRowIdx; /// Current row in source data (0-based).
127 : bool mbHasShared; /// True = pivot cache contains fields with shared items.
128 : bool mbInRow; /// True = a data row has been started.
129 : };
130 :
131 : } // namespace xls
132 : } // namespace oox
133 :
134 : #endif
135 :
136 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|