IWORKCollector.h
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2/*
3 * This file is part of the libetonyek 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
10#ifndef IWORKCOLLECTOR_H_INCLUDED
11#define IWORKCOLLECTOR_H_INCLUDED
12
13#include <deque>
14#include <memory>
15#include <stack>
16#include <string>
17
18#include <boost/optional.hpp>
19
20#include "libetonyek_utils.h"
21#include "IWORKPath_fwd.h"
22#include "IWORKShape.h"
23#include "IWORKStyle.h"
24#include "IWORKStyleStack.h"
25#include "IWORKStylesheet.h"
26#include "IWORKTransformation.h"
27#include "IWORKTypes.h"
28#include "IWORKOutputManager.h"
29
30namespace libetonyek
31{
32
33class IWORKDocumentInterface;
34class IWORKLanguageManager;
35class IWORKPropertyMap;
36class IWORKRecorder;
37class IWORKTable;
38class IWORKText;
39struct IWORKSize;
40
42{
43private:
44 struct Level
45 {
48 glm::dmat3 m_trafo;
49 glm::dmat3 m_previousTrafo;
50
51 Level();
52 };
53
54public:
56 virtual ~IWORKCollector();
57
58 void setRecorder(const std::shared_ptr<IWORKRecorder> &recorder);
59
60 // collector functions
61
63
65
67 void setAccumulateTransformTo(bool accumulate);
68
70 void collectLine(const IWORKLinePtr_t &line);
71 void collectShape(const boost::optional<int> &order=boost::none, bool locked=false);
72
73 void collectBezierPath();
74 void collectPolygonPath(const IWORKSize &size, unsigned edges);
76 void collectArrowPath(const IWORKSize &size, double headWidth, double stemRelYPos, bool doubleSided);
77 void collectStarPath(const IWORKSize &size, unsigned points, double innerRadius);
79 void collectCalloutPath(const IWORKSize &size, double radius, double tailSize, double tailX, double tailY, bool quoteBubble);
80
82 const boost::optional<int> &order=boost::none, bool locked=false);
83 void collectMedia(const IWORKMediaContentPtr_t &content, const IWORKGeometryPtr_t &cropGeometry=IWORKGeometryPtr_t(), const boost::optional<int> &order=boost::none);
84
86
88
89 void collectHeader(const std::string &name);
90 void collectFooter(const std::string &name);
91
92 void collectTable(const std::shared_ptr<IWORKTable> &table);
93 void collectText(const std::shared_ptr<IWORKText> &text);
94
95 void startDocument();
96 void endDocument();
97
98 void startAttachment();
99 void endAttachment();
100
101 void startAttachments();
102 void endAttachments();
103
104 void startGroup();
105 void endGroup();
106
107 // really add a group in the final file
108 void openGroup();
109 void closeGroup();
110
111 void startLevel();
112 void endLevel();
113
114 void pushStyle();
115 void popStyle();
116
118 void popStylesheet();
120 {
121 if (m_stylesheetStack.empty())
122 return IWORKStylesheetPtr_t();
123 return m_stylesheetStack.top();
124 }
125
127
128public:
129 virtual std::shared_ptr<IWORKTable> createTable(const IWORKTableNameMapPtr_t &tableNameMap, const IWORKLanguageManager &langManager) const;
130 virtual std::shared_ptr<IWORKText> createText(const IWORKLanguageManager &langManager, bool discardEmptyContent = false, bool allowListInsertion=true) const;
131
132protected:
133 void fillMetadata(librevenge::RVNGPropertyList &props);
134
135 static void fillGraphicProps(const IWORKStylePtr_t style, librevenge::RVNGPropertyList &props,
136 bool isSurface=true, bool isFrame=false);
137 static void fillLayoutProps(const IWORKStylePtr_t style, librevenge::RVNGPropertyList &props);
138 static void fillWrapProps(const IWORKStylePtr_t style, librevenge::RVNGPropertyList &props,
139 const boost::optional<int> &order);
140 static void writeFill(const IWORKFill &fill, librevenge::RVNGPropertyList &props);
141 virtual void drawShape(const IWORKShapePtr_t &shape);
142
143private:
145
147
148 void drawLine(const IWORKLinePtr_t &line);
149 void drawMedia(const IWORKMediaPtr_t &media);
150 virtual void drawTable() = 0;
151 virtual void drawMedia(double x, double y, const librevenge::RVNGPropertyList &data) = 0;
152 virtual void fillShapeProperties(librevenge::RVNGPropertyList &props) = 0;
153 virtual bool createFrameStylesForTextBox() const = 0;
154 virtual void drawTextBox(const IWORKTextPtr_t &text, const glm::dmat3 &trafo, const IWORKGeometryPtr_t &boundingBox, const librevenge::RVNGPropertyList &style) = 0;
155
156protected:
159
161 std::shared_ptr<IWORKRecorder> m_recorder;
162
163 std::stack<Level> m_levelStack;
165 std::stack<IWORKStylesheetPtr_t> m_stylesheetStack;
167
168 std::deque<IWORKStylePtr_t> m_newStyles;
169
170 std::shared_ptr<IWORKTable> m_currentTable;
171 std::shared_ptr<IWORKText> m_currentText;
172
175
176 std::stack<IWORKPathPtr_t> m_pathStack;
178
179 std::stack<bool> m_attachmentStack;
182
183private:
189
191
194};
195
196} // namespace libetonyek
197
198#endif // IWORKCOLLECTOR_H_INCLUDED
199
200/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
double y
Definition: IWORKShape.cpp:46
double x
Definition: IWORKShape.cpp:45
Definition: IWORKCollector.h:42
void startAttachments()
Definition: IWORKCollector.cpp:709
void openGroup()
Definition: IWORKCollector.cpp:602
virtual std::shared_ptr< IWORKTable > createTable(const IWORKTableNameMapPtr_t &tableNameMap, const IWORKLanguageManager &langManager) const
Definition: IWORKCollector.cpp:625
virtual void fillShapeProperties(librevenge::RVNGPropertyList &props)=0
IWORKPathPtr_t m_currentPath
Definition: IWORKCollector.h:177
std::stack< bool > m_attachmentStack
Definition: IWORKCollector.h:179
void popStylesheet()
Definition: IWORKCollector.cpp:742
void collectGeometry(const IWORKGeometryPtr_t &geometry)
Definition: IWORKCollector.cpp:312
void collectBezierPath()
Definition: IWORKCollector.cpp:418
void collectFooter(const std::string &name)
Definition: IWORKCollector.cpp:530
void collectMedia(const IWORKMediaContentPtr_t &content, const IWORKGeometryPtr_t &cropGeometry=IWORKGeometryPtr_t(), const boost::optional< int > &order=boost::none)
Definition: IWORKCollector.cpp:485
IWORKMediaContentPtr_t m_currentContent
Definition: IWORKCollector.h:188
bool m_inAttachments
Definition: IWORKCollector.h:181
void endAttachments()
Definition: IWORKCollector.cpp:715
std::shared_ptr< IWORKTable > m_currentTable
Definition: IWORKCollector.h:170
void setGraphicStyle(const IWORKStylePtr_t &style)
Definition: IWORKCollector.cpp:292
std::shared_ptr< IWORKText > m_currentText
Definition: IWORKCollector.h:171
void pushStyle(const IWORKStylePtr_t &style)
static void fillLayoutProps(const IWORKStylePtr_t style, librevenge::RVNGPropertyList &props)
Definition: IWORKCollector.cpp:948
IWORKMediaContentPtr_t m_currentLeveled
Definition: IWORKCollector.h:187
virtual void drawTable()=0
void collectCalloutPath(const IWORKSize &size, double radius, double tailSize, double tailX, double tailY, bool quoteBubble)
Definition: IWORKCollector.cpp:472
static void writeFill(const IWORKFill &fill, librevenge::RVNGPropertyList &props)
Definition: IWORKCollector.cpp:1249
void endLevel()
Definition: IWORKCollector.cpp:656
void collectConnectionPath(const IWORKConnectionPath &path)
Definition: IWORKCollector.cpp:463
IWORKMediaContentPtr_t m_currentUnfiltered
Definition: IWORKCollector.h:185
void collectHeaderFooter(const std::string &name, IWORKHeaderFooterMap_t &map)
Definition: IWORKCollector.cpp:755
void endDocument()
Definition: IWORKCollector.cpp:566
void collectLine(const IWORKLinePtr_t &line)
Definition: IWORKCollector.cpp:364
IWORKHeaderFooterMap_t m_headers
Definition: IWORKCollector.h:173
IWORKCollector(const IWORKCollector &)
IWORKOutputManager & getOutputManager()
Definition: IWORKCollector.cpp:1034
void pushStyle()
Definition: IWORKCollector.cpp:721
std::deque< IWORKStylePtr_t > m_newStyles
Definition: IWORKCollector.h:168
std::stack< Level > m_levelStack
Definition: IWORKCollector.h:163
virtual std::shared_ptr< IWORKText > createText(const IWORKLanguageManager &langManager, bool discardEmptyContent=false, bool allowListInsertion=true) const
Definition: IWORKCollector.cpp:630
IWORKMediaContentPtr_t m_currentFiltered
Definition: IWORKCollector.h:186
virtual void drawTextBox(const IWORKTextPtr_t &text, const glm::dmat3 &trafo, const IWORKGeometryPtr_t &boundingBox, const librevenge::RVNGPropertyList &style)=0
IWORKCollector & operator=(const IWORKCollector &)
void collectStyle(const IWORKStylePtr_t &style)
Definition: IWORKCollector.cpp:280
void collectTable(const std::shared_ptr< IWORKTable > &table)
Definition: IWORKCollector.cpp:535
void setRecorder(const std::shared_ptr< IWORKRecorder > &recorder)
Definition: IWORKCollector.cpp:275
void startDocument()
Definition: IWORKCollector.cpp:561
void closeGroup()
Definition: IWORKCollector.cpp:614
virtual bool createFrameStylesForTextBox() const =0
void fillMetadata(librevenge::RVNGPropertyList &props)
Definition: IWORKCollector.cpp:769
void drawMedia(const IWORKMediaPtr_t &media)
Definition: IWORKCollector.cpp:1117
IWORKDataPtr_t m_currentData
Definition: IWORKCollector.h:184
virtual void drawShape(const IWORKShapePtr_t &shape)
Definition: IWORKCollector.cpp:1197
IWORKMetadata m_metadata
Definition: IWORKCollector.h:190
IWORKStylesheetPtr_t getStylesheet() const
Definition: IWORKCollector.h:119
void collectStarPath(const IWORKSize &size, unsigned points, double innerRadius)
Definition: IWORKCollector.cpp:454
void popStyle()
Definition: IWORKCollector.cpp:726
void collectBezier(const IWORKPathPtr_t &path)
Definition: IWORKCollector.cpp:330
std::stack< IWORKPathPtr_t > m_pathStack
Definition: IWORKCollector.h:176
void setAccumulateTransformTo(bool accumulate)
Definition: IWORKCollector.cpp:307
void startLevel()
Definition: IWORKCollector.cpp:635
static void fillWrapProps(const IWORKStylePtr_t style, librevenge::RVNGPropertyList &props, const boost::optional< int > &order)
Definition: IWORKCollector.cpp:984
void drawLine(const IWORKLinePtr_t &line)
Definition: IWORKCollector.cpp:1039
void collectArrowPath(const IWORKSize &size, double headWidth, double stemRelYPos, bool doubleSided)
Definition: IWORKCollector.cpp:441
virtual void drawMedia(double x, double y, const librevenge::RVNGPropertyList &data)=0
bool m_accumulateTransform
Definition: IWORKCollector.h:192
void collectHeader(const std::string &name)
Definition: IWORKCollector.cpp:525
void endAttachment()
Definition: IWORKCollector.cpp:686
IWORKCollector(IWORKDocumentInterface *document)
Definition: IWORKCollector.cpp:237
void endGroup()
Definition: IWORKCollector.cpp:589
void collectPolygonPath(const IWORKSize &size, unsigned edges)
Definition: IWORKCollector.cpp:423
void pushStylesheet(const IWORKStylesheetPtr_t &stylesheet)
Definition: IWORKCollector.cpp:731
void collectRoundedRectanglePath(const IWORKSize &size, double radius)
Definition: IWORKCollector.cpp:432
virtual ~IWORKCollector()
Definition: IWORKCollector.cpp:265
std::stack< IWORKStylesheetPtr_t > m_stylesheetStack
Definition: IWORKCollector.h:165
void startAttachment()
Definition: IWORKCollector.cpp:670
int m_groupLevel
Definition: IWORKCollector.h:193
void collectShape(const boost::optional< int > &order=boost::none, bool locked=false)
Definition: IWORKCollector.cpp:382
bool m_inAttachment
Definition: IWORKCollector.h:180
void collectImage(const IWORKMediaContentPtr_t &image, const IWORKGeometryPtr_t &cropGeometry=IWORKGeometryPtr_t(), const boost::optional< int > &order=boost::none, bool locked=false)
Definition: IWORKCollector.cpp:341
IWORKDocumentInterface * m_document
Definition: IWORKCollector.h:160
IWORKOutputManager m_outputManager
Definition: IWORKCollector.h:166
void collectText(const std::shared_ptr< IWORKText > &text)
Definition: IWORKCollector.cpp:549
static void fillGraphicProps(const IWORKStylePtr_t style, librevenge::RVNGPropertyList &props, bool isSurface=true, bool isFrame=false)
Definition: IWORKCollector.cpp:781
std::shared_ptr< IWORKRecorder > m_recorder
Definition: IWORKCollector.h:161
void collectMetadata(const IWORKMetadata &metadata)
Definition: IWORKCollector.cpp:520
void startGroup()
Definition: IWORKCollector.cpp:578
void collectStylesheet(const IWORKStylesheetPtr_t &stylesheet)
Definition: IWORKCollector.cpp:508
IWORKHeaderFooterMap_t m_footers
Definition: IWORKCollector.h:174
IWORKStyleStack m_styleStack
Definition: IWORKCollector.h:164
Definition: IWORKPath.h:88
Definition: IWORKDocumentInterface.h:19
Definition: IWORKLanguageManager.h:24
A manager for output elements.
Definition: IWORKOutputManager.h:30
Representation of a dynamic inheritance of styles.
Definition: IWORKStyleStack.h:35
@ string
Definition: IWORKToken.h:411
@ line
Definition: IWORKToken.h:298
@ media
Definition: IWORKToken.h:321
@ fill
Definition: IWORKToken.h:200
@ none
Definition: IWORKToken.h:666
@ stylesheet
Definition: IWORKToken.h:417
@ text
Definition: IWORKToken.h:465
@ content
Definition: IWORKToken.h:163
@ image
Definition: IWORKToken.h:260
@ metadata
Definition: IWORKToken.h:323
@ size
Definition: IWORKToken.h:395
@ path
Definition: IWORKToken.h:358
@ shape
Definition: IWORKToken.h:394
@ data
Definition: IWORKToken.h:174
@ locked
Definition: IWORKToken.h:570
@ style
Definition: IWORKToken.h:414
@ tailSize
Definition: IWORKToken.h:617
@ geometry
Definition: IWORKToken.h:232
@ name
Definition: IWORKToken.h:578
@ radius
Definition: KEY1Token.h:185
@ table
Definition: KEY1Token.h:198
@ document
Definition: NUM1Token.h:34
@ order
Definition: PAG1Token.h:43
Definition: IWORKBezierElement.cpp:21
boost::variant< IWORKColor, IWORKGradient, IWORKMediaContent > IWORKFill
Definition: IWORKTypes.h:309
std::shared_ptr< IWORKStylesheet > IWORKStylesheetPtr_t
Definition: IWORKStylesheet.h:19
std::shared_ptr< IWORKMedia > IWORKMediaPtr_t
Definition: IWORKTypes_fwd.h:64
std::shared_ptr< IWORKMediaContent > IWORKMediaContentPtr_t
Definition: IWORKTypes_fwd.h:54
std::shared_ptr< IWORKData > IWORKDataPtr_t
Definition: IWORKTypes_fwd.h:49
std::shared_ptr< IWORKText > IWORKTextPtr_t
Definition: IWORKText_fwd.h:18
std::unordered_map< std::string, IWORKOutputElements > IWORKHeaderFooterMap_t
Definition: IWORKTypes.h:40
std::shared_ptr< IWORKPath > IWORKPathPtr_t
Definition: IWORKPath_fwd.h:20
std::shared_ptr< IWORKGeometry > IWORKGeometryPtr_t
Definition: IWORKTypes_fwd.h:41
std::shared_ptr< IWORKLine > IWORKLinePtr_t
Definition: IWORKTypes_fwd.h:45
std::shared_ptr< IWORKShape > IWORKShapePtr_t
Definition: IWORKShape.h:38
std::shared_ptr< IWORKStyle > IWORKStylePtr_t
Definition: IWORKStyle_fwd.h:21
std::shared_ptr< IWORKTableNameMap_t > IWORKTableNameMapPtr_t
Definition: IWORKTypes_fwd.h:34
Definition: IWORKCollector.h:45
IWORKStylePtr_t m_graphicStyle
Definition: IWORKCollector.h:47
IWORKGeometryPtr_t m_geometry
Definition: IWORKCollector.h:46
glm::dmat3 m_trafo
Definition: IWORKCollector.h:48
Level()
Definition: IWORKCollector.cpp:229
glm::dmat3 m_previousTrafo
Definition: IWORKCollector.h:49
Definition: IWORKTypes.h:328
Definition: IWORKTypes.h:45

Generated for libetonyek by doxygen 1.9.3