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 <stack>
15 #include <string>
16 
17 #include <boost/optional.hpp>
18 
19 #include <glm/glm.hpp>
20 
21 #include "libetonyek_utils.h"
22 #include "IWORKPath_fwd.h"
23 #include "IWORKShape.h"
24 #include "IWORKStyle.h"
25 #include "IWORKStyleStack.h"
26 #include "IWORKStylesheet.h"
27 #include "IWORKTransformation.h"
28 #include "IWORKTypes.h"
29 #include "IWORKOutputManager.h"
30 
31 namespace libetonyek
32 {
33 
34 class IWORKDocumentInterface;
35 class IWORKPropertyMap;
36 class IWORKTable;
37 class IWORKText;
38 struct IWORKSize;
39 
41 {
42 private:
43  struct Level
44  {
47  glm::dmat3 m_trafo;
48 
49  Level();
50  };
51 
52 public:
55 
56  // collector functions
57 
58  void collectStyle(const IWORKStylePtr_t &style);
59 
61 
63 
64  void collectBezier(const IWORKPathPtr_t &path);
65  void collectImage(const IWORKImagePtr_t &image);
66  void collectLine(const IWORKLinePtr_t &line);
67  void collectShape();
68 
69  void collectBezierPath();
70  void collectPolygonPath(const IWORKSize &size, unsigned edges);
71  void collectRoundedRectanglePath(const IWORKSize &size, double radius);
72  void collectArrowPath(const IWORKSize &size, double headWidth, double stemRelYPos, bool doubleSided);
73  void collectStarPath(const IWORKSize &size, unsigned points, double innerRadius);
74  void collectConnectionPath(const IWORKSize &size, double middleX, double middleY);
75  void collectCalloutPath(const IWORKSize &size, double radius, double tailSize, double tailX, double tailY, bool quoteBubble);
76 
78 
80 
82 
83  void collectHeader(const std::string &name);
84  void collectFooter(const std::string &name);
85 
86  void collectTable(const boost::shared_ptr<IWORKTable> &table);
87  void collectText(const boost::shared_ptr<IWORKText> &text);
88 
89  void startDocument();
90  void endDocument();
91 
92  void startGroup();
93  void endGroup();
94 
95  boost::shared_ptr<IWORKTable> createTable(const IWORKTableNameMapPtr_t &tableNameMap) const;
96  boost::shared_ptr<IWORKText> createText(bool discardEmptyContent = false) const;
97 
98  void startLevel();
99  void endLevel();
100 
101  void pushStyle();
102  void popStyle();
103 
105  void popStylesheet();
106 
108 
109 protected:
110  void fillMetadata(librevenge::RVNGPropertyList &props);
111 
112 private:
113  void pushStyle(const IWORKStylePtr_t &style);
115 
117 
118  void drawMedia(const IWORKMediaPtr_t &media);
119  void drawShape(const IWORKShapePtr_t &shape);
120 
121  virtual void drawTable() = 0;
122  virtual void drawMedia(double x, double y, double w, double h, const std::string &mimetype, const librevenge::RVNGBinaryData &data) = 0;
123  virtual void fillShapeProperties(librevenge::RVNGPropertyList &props) = 0;
124  virtual void drawTextBox(const IWORKTextPtr_t &text, const glm::dmat3 &trafo, const IWORKGeometryPtr_t &boundingBox) = 0;
125 
126 protected:
128 
129  std::stack<Level> m_levelStack;
131  std::stack<IWORKStylesheetPtr_t> m_stylesheetStack;
133 
134  std::deque<IWORKStylePtr_t> m_newStyles;
135 
136  boost::shared_ptr<IWORKTable> m_currentTable;
137  boost::shared_ptr<IWORKText> m_currentText;
138 
141 
142 private:
149 
151 
153 };
154 
155 } // namespace libetonyek
156 
157 #endif // IWORKCOLLECTOR_H_INCLUDED
158 
159 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
boost::shared_ptr< IWORKStylesheet > IWORKStylesheetPtr_t
Definition: IWORKStylesheet.h:19
void collectText(const boost::shared_ptr< IWORKText > &text)
Definition: IWORKCollector.cpp:463
Definition: IWORKBezierElement.cpp:18
std::stack< IWORKStylesheetPtr_t > m_stylesheetStack
Definition: IWORKCollector.h:131
IWORKMediaContentPtr_t m_currentFiltered
Definition: IWORKCollector.h:146
Definition: IWORKToken.h:183
boost::shared_ptr< IWORKMediaContent > IWORKMediaContentPtr_t
Definition: IWORKTypes_fwd.h:53
IWORKCollector(IWORKDocumentInterface *document)
Definition: IWORKCollector.cpp:278
Definition: IWORKToken.h:224
Represents a hierarchical style.
Definition: IWORKStyle.h:28
void collectGeometry(const IWORKGeometryPtr_t &geometry)
Definition: IWORKCollector.cpp:317
IWORKMediaContentPtr_t m_currentLeveled
Definition: IWORKCollector.h:147
Definition: IWORKToken.h:161
double y
Definition: IWORKShape.cpp:43
A manager for output elements.
Definition: IWORKOutputManager.h:29
boost::shared_ptr< IWORKStyle > IWORKStylePtr_t
Definition: IWORKStyle_fwd.h:21
boost::shared_ptr< IWORKShape > IWORKShapePtr_t
Definition: IWORKShape.h:36
Definition: IWORKToken.h:154
IWORKStylePtr_t m_graphicStyle
Definition: IWORKCollector.h:46
Definition: IWORKToken.h:77
Representation of a dynamic inheritance of styles.
Definition: IWORKStyleStack.h:34
IWORKMediaContentPtr_t m_currentContent
Definition: IWORKCollector.h:148
void popStylesheet()
Definition: IWORKCollector.cpp:541
Definition: IWORKToken.h:206
virtual void drawTextBox(const IWORKTextPtr_t &text, const glm::dmat3 &trafo, const IWORKGeometryPtr_t &boundingBox)=0
Definition: IWORKToken.h:137
void collectBezier(const IWORKPathPtr_t &path)
Definition: IWORKCollector.cpp:325
void startGroup()
Definition: IWORKCollector.cpp:485
void collectStarPath(const IWORKSize &size, unsigned points, double innerRadius)
Definition: IWORKCollector.cpp:401
boost::shared_ptr< IWORKText > m_currentText
Definition: IWORKCollector.h:137
Definition: IWORKToken.h:271
void drawMedia(const IWORKMediaPtr_t &media)
Definition: IWORKCollector.cpp:586
void collectStyle(const IWORKStylePtr_t &style)
Definition: IWORKCollector.cpp:302
Definition: IWORKCollector.h:43
boost::shared_ptr< IWORKGeometry > IWORKGeometryPtr_t
Definition: IWORKTypes_fwd.h:40
Definition: IWORKTypes.h:36
void resolveStyle(IWORKStyle &style)
Definition: IWORKCollector.cpp:548
boost::shared_ptr< IWORKImage > IWORKImagePtr_t
Definition: IWORKTypes_fwd.h:58
Definition: IWORKToken.h:236
void popStyle()
Definition: IWORKCollector.cpp:531
void collectFooter(const std::string &name)
Definition: IWORKCollector.cpp:450
void collectHeaderFooter(const std::string &name, IWORKHeaderFooterMap_t &map)
Definition: IWORKCollector.cpp:554
Definition: IWORKDocumentInterface.h:18
double x
Definition: IWORKShape.cpp:42
virtual void drawTable()=0
void setGraphicStyle(const IWORKStylePtr_t &style)
Definition: IWORKCollector.cpp:308
void collectMetadata(const IWORKMetadata &metadata)
Definition: IWORKCollector.cpp:440
IWORKHeaderFooterMap_t m_headers
Definition: IWORKCollector.h:139
~IWORKCollector()
Definition: IWORKCollector.cpp:292
boost::shared_ptr< IWORKTable > createTable(const IWORKTableNameMapPtr_t &tableNameMap) const
Definition: IWORKCollector.cpp:497
void collectImage(const IWORKImagePtr_t &image)
Definition: IWORKCollector.cpp:330
Definition: IWORKToken.h:221
IWORKGeometryPtr_t m_geometry
Definition: IWORKCollector.h:45
void startDocument()
Definition: IWORKCollector.cpp:469
void endDocument()
Definition: IWORKCollector.cpp:474
boost::shared_ptr< IWORKPath > IWORKPathPtr_t
Definition: IWORKPath_fwd.h:20
IWORKPathPtr_t m_currentPath
Definition: IWORKCollector.h:143
Definition: IWORKCollector.h:40
void collectHeader(const std::string &name)
Definition: IWORKCollector.cpp:445
void collectConnectionPath(const IWORKSize &size, double middleX, double middleY)
Definition: IWORKCollector.cpp:406
std::stack< Level > m_levelStack
Definition: IWORKCollector.h:129
const char * name
Definition: IWORKToken.cpp:43
boost::shared_ptr< IWORKTable > m_currentTable
Definition: IWORKCollector.h:136
void collectStylesheet(const IWORKStylesheetPtr_t &stylesheet)
Definition: IWORKCollector.cpp:434
boost::shared_ptr< IWORKData > IWORKDataPtr_t
Definition: IWORKTypes_fwd.h:48
Definition: IWORKToken.h:207
void collectBezierPath()
Definition: IWORKCollector.cpp:378
std::deque< IWORKStylePtr_t > m_newStyles
Definition: IWORKCollector.h:134
IWORKDocumentInterface * m_document
Definition: IWORKCollector.h:127
void collectMedia(const IWORKMediaContentPtr_t &content)
Definition: IWORKCollector.cpp:419
Level()
Definition: IWORKCollector.cpp:271
virtual void fillShapeProperties(librevenge::RVNGPropertyList &props)=0
IWORKOutputManager & getOutputManager()
Definition: IWORKCollector.cpp:581
Definition: IWORKToken.h:304
void drawShape(const IWORKShapePtr_t &shape)
Definition: IWORKCollector.cpp:622
IWORKMediaContentPtr_t m_currentUnfiltered
Definition: IWORKCollector.h:145
Definition: IWORKToken.h:123
void startLevel()
Definition: IWORKCollector.cpp:507
boost::shared_ptr< IWORKTableNameMap_t > IWORKTableNameMapPtr_t
Definition: IWORKTypes_fwd.h:33
glm::dmat3 m_trafo
Definition: IWORKCollector.h:47
void collectArrowPath(const IWORKSize &size, double headWidth, double stemRelYPos, bool doubleSided)
Definition: IWORKCollector.cpp:393
void endLevel()
Definition: IWORKCollector.cpp:518
Definition: KEY1Token.h:156
boost::unordered_map< std::string, IWORKOutputElements > IWORKHeaderFooterMap_t
Definition: IWORKTypes.h:32
Definition: IWORKToken.h:81
void endGroup()
Definition: IWORKCollector.cpp:490
boost::shared_ptr< IWORKMedia > IWORKMediaPtr_t
Definition: IWORKTypes_fwd.h:63
IWORKOutputManager m_outputManager
Definition: IWORKCollector.h:132
Definition: NUM1Token.h:34
IWORKHeaderFooterMap_t m_footers
Definition: IWORKCollector.h:140
Definition: IWORKToken.h:219
void collectCalloutPath(const IWORKSize &size, double radius, double tailSize, double tailX, double tailY, bool quoteBubble)
Definition: IWORKCollector.cpp:411
IWORKMetadata m_metadata
Definition: IWORKCollector.h:150
void fillMetadata(librevenge::RVNGPropertyList &props)
Definition: IWORKCollector.cpp:569
void collectLine(const IWORKLinePtr_t &line)
Definition: IWORKCollector.cpp:340
void collectShape()
Definition: IWORKCollector.cpp:350
boost::shared_ptr< IWORKLine > IWORKLinePtr_t
Definition: IWORKTypes_fwd.h:44
IWORKStyleStack m_styleStack
Definition: IWORKCollector.h:130
void pushStyle()
Definition: IWORKCollector.cpp:526
int m_groupLevel
Definition: IWORKCollector.h:152
boost::shared_ptr< IWORKText > createText(bool discardEmptyContent=false) const
Definition: IWORKCollector.cpp:502
boost::shared_ptr< IWORKText > IWORKTextPtr_t
Definition: IWORKText_fwd.h:18
void collectPolygonPath(const IWORKSize &size, unsigned edges)
Definition: IWORKCollector.cpp:383
void collectTable(const boost::shared_ptr< IWORKTable > &table)
Definition: IWORKCollector.cpp:455
void pushStylesheet(const IWORKStylesheetPtr_t &stylesheet)
Definition: IWORKCollector.cpp:536
Definition: IWORKToken.h:163
Definition: IWORKToken.h:298
void collectRoundedRectanglePath(const IWORKSize &size, double radius)
Definition: IWORKCollector.cpp:388
Definition: IWORKTypes.h:252
IWORKDataPtr_t m_currentData
Definition: IWORKCollector.h:144

Generated for libetonyek by doxygen 1.8.10