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:
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, const boost::optional<unsigned> &resizeFlags=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 virtual void collectStickyNote();
95
96 void startDocument(const librevenge::RVNGPropertyList &props);
97 void endDocument();
98
99 void startAttachment();
100 void endAttachment();
101
102 void startAttachments();
103 void endAttachments();
104
105 void startGroup();
106 void endGroup();
107
108 // really add a group in the final file
109 void openGroup();
110 void closeGroup();
111 bool getOpenGroupLevel() const
112 {
113 return m_groupOpenLevel;
114 };
115
116 void startLevel();
117 void endLevel();
118
119 void pushStyle();
120 void popStyle();
121
123 void popStylesheet();
125 {
126 if (m_stylesheetStack.empty())
127 return IWORKStylesheetPtr_t();
128 return m_stylesheetStack.top();
129 }
130
131 // use to create the final table name in numbers document
132 virtual boost::optional<std::string> getWorkSpaceName() const
133 {
134 return boost::none;
135 }
137
138public:
139 virtual std::shared_ptr<IWORKTable> createTable(const IWORKTableNameMapPtr_t &tableNameMap, IWORKFormatNameMap &formatNameMap, const IWORKLanguageManager &langManager) const;
140 virtual std::shared_ptr<IWORKText> createText(const IWORKLanguageManager &langManager, bool discardEmptyContent = false, bool allowListInsertion=true) const;
141
142protected:
143 void fillMetadata(librevenge::RVNGPropertyList &props);
144
145 static void fillGraphicProps(const IWORKStylePtr_t style, librevenge::RVNGPropertyList &props,
146 bool isSurface=true, bool isFrame=false);
147 static void fillLayoutProps(const IWORKStylePtr_t style, librevenge::RVNGPropertyList &props);
148 static void fillTextAutoSizeProps(const boost::optional<unsigned> &resizeFlags, const IWORKGeometryPtr_t &boundingBox, librevenge::RVNGPropertyList &props);
149 static void fillWrapProps(const IWORKStylePtr_t style, librevenge::RVNGPropertyList &props,
150 const boost::optional<int> &order);
151 static void writeFill(const IWORKFill &fill, librevenge::RVNGPropertyList &props);
152 void drawShape(const IWORKShapePtr_t &shape);
153
154private:
156
157 void collectHeaderFooter(const std::string &name, IWORKHeaderFooterMap_t &map);
158
159 void drawLine(const IWORKLinePtr_t &line);
160 void drawMedia(const IWORKMediaPtr_t &media);
161 virtual void drawTable() = 0;
162 virtual void drawMedia(double x, double y, const librevenge::RVNGPropertyList &data) = 0;
163 virtual void fillShapeProperties(librevenge::RVNGPropertyList &props) = 0;
164 virtual bool createFrameStylesForTextBox() const = 0;
165 virtual void drawTextBox(const IWORKTextPtr_t &text, const glm::dmat3 &trafo, const IWORKGeometryPtr_t &boundingBox, const librevenge::RVNGPropertyList &style) = 0;
166
167protected:
170
172 std::shared_ptr<IWORKRecorder> m_recorder;
173
174 std::stack<Level> m_levelStack;
176 std::stack<IWORKStylesheetPtr_t> m_stylesheetStack;
178
179 std::deque<IWORKStylePtr_t> m_newStyles;
180
181 std::shared_ptr<IWORKTable> m_currentTable;
182 std::shared_ptr<IWORKText> m_currentText;
183
186
187 std::stack<IWORKPathPtr_t> m_pathStack;
189
190 std::stack<bool> m_attachmentStack;
193
194private:
200
202
206};
207
208} // namespace libetonyek
209
210#endif // IWORKCOLLECTOR_H_INCLUDED
211
212/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
Definition IWORKCollector.h:42
void startDocument(const librevenge::RVNGPropertyList &props)
Definition IWORKCollector.cpp:522
void startAttachments()
Definition IWORKCollector.cpp:672
void openGroup()
Definition IWORKCollector.cpp:563
virtual void fillShapeProperties(librevenge::RVNGPropertyList &props)=0
IWORKPathPtr_t m_currentPath
Definition IWORKCollector.h:188
static void fillTextAutoSizeProps(const boost::optional< unsigned > &resizeFlags, const IWORKGeometryPtr_t &boundingBox, librevenge::RVNGPropertyList &props)
Definition IWORKCollector.cpp:946
std::stack< bool > m_attachmentStack
Definition IWORKCollector.h:190
void popStylesheet()
Definition IWORKCollector.cpp:705
void collectGeometry(const IWORKGeometryPtr_t &geometry)
Definition IWORKCollector.cpp:267
void collectBezierPath()
Definition IWORKCollector.cpp:374
void collectFooter(const std::string &name)
Definition IWORKCollector.cpp:486
void collectMedia(const IWORKMediaContentPtr_t &content, const IWORKGeometryPtr_t &cropGeometry=IWORKGeometryPtr_t(), const boost::optional< int > &order=boost::none)
Definition IWORKCollector.cpp:441
IWORKMediaContentPtr_t m_currentContent
Definition IWORKCollector.h:199
bool m_inAttachments
Definition IWORKCollector.h:192
void endAttachments()
Definition IWORKCollector.cpp:678
std::shared_ptr< IWORKTable > m_currentTable
Definition IWORKCollector.h:181
void setGraphicStyle(const IWORKStylePtr_t &style)
Definition IWORKCollector.cpp:247
std::shared_ptr< IWORKText > m_currentText
Definition IWORKCollector.h:182
void pushStyle(const IWORKStylePtr_t &style)
static void fillLayoutProps(const IWORKStylePtr_t style, librevenge::RVNGPropertyList &props)
Definition IWORKCollector.cpp:910
IWORKMediaContentPtr_t m_currentLeveled
Definition IWORKCollector.h:198
virtual void drawTable()=0
void collectCalloutPath(const IWORKSize &size, double radius, double tailSize, double tailX, double tailY, bool quoteBubble)
Definition IWORKCollector.cpp:428
static void writeFill(const IWORKFill &fill, librevenge::RVNGPropertyList &props)
Definition IWORKCollector.cpp:1265
void endLevel()
Definition IWORKCollector.cpp:619
void collectConnectionPath(const IWORKConnectionPath &path)
Definition IWORKCollector.cpp:419
IWORKMediaContentPtr_t m_currentUnfiltered
Definition IWORKCollector.h:196
void collectHeaderFooter(const std::string &name, IWORKHeaderFooterMap_t &map)
Definition IWORKCollector.cpp:718
void endDocument()
Definition IWORKCollector.cpp:527
void collectLine(const IWORKLinePtr_t &line)
Definition IWORKCollector.cpp:319
IWORKHeaderFooterMap_t m_headers
Definition IWORKCollector.h:184
IWORKCollector(const IWORKCollector &)
IWORKOutputManager & getOutputManager()
Definition IWORKCollector.cpp:1016
void pushStyle()
Definition IWORKCollector.cpp:684
std::deque< IWORKStylePtr_t > m_newStyles
Definition IWORKCollector.h:179
std::stack< Level > m_levelStack
Definition IWORKCollector.h:174
int m_groupOpenLevel
Definition IWORKCollector.h:205
virtual std::shared_ptr< IWORKText > createText(const IWORKLanguageManager &langManager, bool discardEmptyContent=false, bool allowListInsertion=true) const
Definition IWORKCollector.cpp:593
IWORKMediaContentPtr_t m_currentFiltered
Definition IWORKCollector.h:197
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:235
void collectTable(const std::shared_ptr< IWORKTable > &table)
Definition IWORKCollector.cpp:491
void setRecorder(const std::shared_ptr< IWORKRecorder > &recorder)
Definition IWORKCollector.cpp:230
virtual void collectStickyNote()
Definition IWORKCollector.cpp:517
void closeGroup()
Definition IWORKCollector.cpp:576
virtual bool createFrameStylesForTextBox() const =0
void fillMetadata(librevenge::RVNGPropertyList &props)
Definition IWORKCollector.cpp:732
void drawMedia(const IWORKMediaPtr_t &media)
Definition IWORKCollector.cpp:1100
IWORKDataPtr_t m_currentData
Definition IWORKCollector.h:195
void drawShape(const IWORKShapePtr_t &shape)
Definition IWORKCollector.cpp:1211
IWORKMetadata m_metadata
Definition IWORKCollector.h:201
IWORKStylesheetPtr_t getStylesheet() const
Definition IWORKCollector.h:124
void collectStarPath(const IWORKSize &size, unsigned points, double innerRadius)
Definition IWORKCollector.cpp:410
void popStyle()
Definition IWORKCollector.cpp:689
void collectBezier(const IWORKPathPtr_t &path)
Definition IWORKCollector.cpp:285
std::stack< IWORKPathPtr_t > m_pathStack
Definition IWORKCollector.h:187
void setAccumulateTransformTo(bool accumulate)
Definition IWORKCollector.cpp:262
void startLevel()
Definition IWORKCollector.cpp:598
static void fillWrapProps(const IWORKStylePtr_t style, librevenge::RVNGPropertyList &props, const boost::optional< int > &order)
Definition IWORKCollector.cpp:966
void drawLine(const IWORKLinePtr_t &line)
Definition IWORKCollector.cpp:1021
void collectArrowPath(const IWORKSize &size, double headWidth, double stemRelYPos, bool doubleSided)
Definition IWORKCollector.cpp:397
virtual void drawMedia(double x, double y, const librevenge::RVNGPropertyList &data)=0
bool m_accumulateTransform
Definition IWORKCollector.h:203
void collectHeader(const std::string &name)
Definition IWORKCollector.cpp:481
bool getOpenGroupLevel() const
Definition IWORKCollector.h:111
void endAttachment()
Definition IWORKCollector.cpp:649
IWORKCollector(IWORKDocumentInterface *document)
Definition IWORKCollector.cpp:191
void endGroup()
Definition IWORKCollector.cpp:550
void collectPolygonPath(const IWORKSize &size, unsigned edges)
Definition IWORKCollector.cpp:379
void pushStylesheet(const IWORKStylesheetPtr_t &stylesheet)
Definition IWORKCollector.cpp:694
void collectRoundedRectanglePath(const IWORKSize &size, double radius)
Definition IWORKCollector.cpp:388
virtual ~IWORKCollector()
Definition IWORKCollector.cpp:220
std::stack< IWORKStylesheetPtr_t > m_stylesheetStack
Definition IWORKCollector.h:176
void startAttachment()
Definition IWORKCollector.cpp:633
virtual std::shared_ptr< IWORKTable > createTable(const IWORKTableNameMapPtr_t &tableNameMap, IWORKFormatNameMap &formatNameMap, const IWORKLanguageManager &langManager) const
Definition IWORKCollector.cpp:588
int m_groupLevel
Definition IWORKCollector.h:204
bool m_inAttachment
Definition IWORKCollector.h:191
virtual boost::optional< std::string > getWorkSpaceName() const
Definition IWORKCollector.h:132
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:296
IWORKDocumentInterface * m_document
Definition IWORKCollector.h:171
IWORKOutputManager m_outputManager
Definition IWORKCollector.h:177
void collectText(const std::shared_ptr< IWORKText > &text)
Definition IWORKCollector.cpp:505
static void fillGraphicProps(const IWORKStylePtr_t style, librevenge::RVNGPropertyList &props, bool isSurface=true, bool isFrame=false)
Definition IWORKCollector.cpp:744
std::shared_ptr< IWORKRecorder > m_recorder
Definition IWORKCollector.h:172
void collectShape(const boost::optional< int > &order=boost::none, const boost::optional< unsigned > &resizeFlags=boost::none, bool locked=false)
Definition IWORKCollector.cpp:337
void collectMetadata(const IWORKMetadata &metadata)
Definition IWORKCollector.cpp:476
void startGroup()
Definition IWORKCollector.cpp:539
void collectStylesheet(const IWORKStylesheetPtr_t &stylesheet)
Definition IWORKCollector.cpp:464
IWORKHeaderFooterMap_t m_footers
Definition IWORKCollector.h:185
IWORKStyleStack m_styleStack
Definition IWORKCollector.h:175
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
@ line
Definition IWORKToken.h:303
@ media
Definition IWORKToken.h:326
@ fill
Definition IWORKToken.h:204
@ y
Definition IWORKToken.h:643
@ stylesheet
Definition IWORKToken.h:424
@ text
Definition IWORKToken.h:472
@ content
Definition IWORKToken.h:167
@ image
Definition IWORKToken.h:264
@ metadata
Definition IWORKToken.h:328
@ size
Definition IWORKToken.h:402
@ path
Definition IWORKToken.h:365
@ shape
Definition IWORKToken.h:401
@ data
Definition IWORKToken.h:178
@ x
Definition IWORKToken.h:641
@ locked
Definition IWORKToken.h:577
@ style
Definition IWORKToken.h:421
@ tailSize
Definition IWORKToken.h:624
@ geometry
Definition IWORKToken.h:236
@ name
Definition IWORKToken.h:585
@ 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:20
std::unordered_map< std::string, std::string > IWORKFormatNameMap
Definition IWORKTypes_fwd.h:32
std::shared_ptr< IWORKMedia > IWORKMediaPtr_t
Definition IWORKTypes_fwd.h:68
std::shared_ptr< IWORKMediaContent > IWORKMediaContentPtr_t
Definition IWORKTypes_fwd.h:58
std::shared_ptr< IWORKData > IWORKDataPtr_t
Definition IWORKTypes_fwd.h:53
std::shared_ptr< IWORKText > IWORKTextPtr_t
Definition IWORKText_fwd.h:22
std::unordered_map< std::string, IWORKOutputElements > IWORKHeaderFooterMap_t
Definition IWORKTypes.h:42
std::shared_ptr< IWORKPath > IWORKPathPtr_t
Definition IWORKPath_fwd.h:22
std::shared_ptr< IWORKGeometry > IWORKGeometryPtr_t
Definition IWORKTypes_fwd.h:45
std::shared_ptr< IWORKLine > IWORKLinePtr_t
Definition IWORKTypes_fwd.h:49
std::shared_ptr< IWORKShape > IWORKShapePtr_t
Definition IWORKShape.h:39
std::shared_ptr< IWORKStyle > IWORKStylePtr_t
Definition IWORKStyle_fwd.h:23
std::shared_ptr< IWORKTableNameMap_t > IWORKTableNameMapPtr_t
Definition IWORKTypes_fwd.h:36
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:183
glm::dmat3 m_previousTrafo
Definition IWORKCollector.h:49
Definition IWORKTypes.h:347
Definition IWORKTypes.h:45

Generated for libetonyek by doxygen 1.12.0