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 OOX_XLS_PIVOTCACHEFRAGMENT_HXX
21 : #define OOX_XLS_PIVOTCACHEFRAGMENT_HXX
22 :
23 : #include "excelhandlers.hxx"
24 :
25 : namespace oox {
26 : namespace xls {
27 :
28 : class PivotCache;
29 : class PivotCacheField;
30 :
31 0 : 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 0 : 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 :
92 0 : class BiffPivotCacheFragment : public BiffWorkbookFragmentBase
93 : {
94 : public:
95 : explicit BiffPivotCacheFragment(
96 : const WorkbookHelper& rHelper,
97 : const OUString& rStrmName,
98 : PivotCache& rPivotCache );
99 :
100 : /** Imports the entire fragment, returns true, if EOF record has been reached. */
101 : virtual bool importFragment() SAL_OVERRIDE;
102 :
103 : private:
104 : PivotCache& mrPivotCache;
105 : };
106 :
107 0 : class BiffPivotCacheRecordsContext : public BiffWorksheetContextBase
108 : {
109 : public:
110 : explicit BiffPivotCacheRecordsContext(
111 : const WorksheetHelper& rHelper,
112 : const PivotCache& rPivotCache );
113 :
114 : /** Reads the current record from stream and tries to insert a cell into
115 : the source data sheet. */
116 : virtual void importRecord( BiffInputStream& rStrm ) SAL_OVERRIDE;
117 :
118 : private:
119 : void startNextRow();
120 :
121 : private:
122 : typedef ::std::vector< sal_Int32 > ColumnIndexVector;
123 :
124 : const PivotCache& mrPivotCache;
125 : ColumnIndexVector maUnsharedCols; /// Column indexes of all unshared cache fields.
126 : size_t mnColIdx; /// Current index into maUnsharedCols.
127 : sal_Int32 mnRowIdx; /// Current row in source data (0-based).
128 : bool mbHasShared; /// True = pivot cache contains fields with shared items.
129 : bool mbInRow; /// True = a data row has been started.
130 : };
131 :
132 : } // namespace xls
133 : } // namespace oox
134 :
135 : #endif
136 :
137 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|