VSDStylesCollector.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 libvisio 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 VSDSTYLESCOLLECTOR_H
11 #define VSDSTYLESCOLLECTOR_H
12 
13 #include <map>
14 #include <vector>
15 #include <list>
16 #include "VSDCollector.h"
17 #include "VSDParser.h"
18 #include "libvisio_utils.h"
19 #include "VSDStyles.h"
20 
21 namespace libvisio
22 {
23 
25 {
26 public:
28  std::vector<std::map<unsigned, XForm> > &groupXFormsSequence,
29  std::vector<std::map<unsigned, unsigned> > &groupMembershipsSequence,
30  std::vector<std::list<unsigned> > &documentPageShapeOrders
31  );
32  virtual ~VSDStylesCollector() {}
33 
34  void collectEllipticalArcTo(unsigned id, unsigned level, double x3, double y3, double x2, double y2, double angle, double ecc);
35  void collectForeignData(unsigned level, const librevenge::RVNGBinaryData &binaryData);
36  void collectOLEList(unsigned id, unsigned level)
37  {
38  collectUnhandledChunk(id, level);
39  }
40  void collectOLEData(unsigned id, unsigned level, const librevenge::RVNGBinaryData &oleData);
41  void collectEllipse(unsigned id, unsigned level, double cx, double cy, double xleft, double yleft, double xtop, double ytop);
42  void collectLine(unsigned level, const boost::optional<double> &strokeWidth, const boost::optional<Colour> &c, const boost::optional<unsigned char> &linePattern,
43  const boost::optional<unsigned char> &startMarker, const boost::optional<unsigned char> &endMarker,
44  const boost::optional<unsigned char> &lineCap);
45  void collectFillAndShadow(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG,
46  const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency,
47  const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern,
48  const boost::optional<Colour> &shfgc, const boost::optional<double> &shadowOffsetX, const boost::optional<double> &shadowOffsetY);
49  void collectFillAndShadow(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG,
50  const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency,
51  const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern,
52  const boost::optional<Colour> &shfgc);
53  void collectThemeReference(unsigned level, const boost::optional<long> &lineColour, const boost::optional<long> &fillColour,
54  const boost::optional<long> &shadowColour, const boost::optional<long> &fontColour);
55  void collectGeometry(unsigned id, unsigned level, bool noFill, bool noLine, bool noShow);
56  void collectMoveTo(unsigned id, unsigned level, double x, double y);
57  void collectLineTo(unsigned id, unsigned level, double x, double y);
58  void collectArcTo(unsigned id, unsigned level, double x2, double y2, double bow);
59  void collectNURBSTo(unsigned id, unsigned level, double x2, double y2, unsigned char xType, unsigned char yType, unsigned degree,
60  const std::vector<std::pair<double, double> > &ctrlPnts, const std::vector<double> &kntVec, const std::vector<double> &weights);
61  void collectNURBSTo(unsigned id, unsigned level, double x2, double y2, double knot, double knotPrev, double weight, double weightPrev, unsigned dataID);
62  void collectNURBSTo(unsigned id, unsigned level, double x2, double y2, double knot, double knotPrev, double weight, double weightPrev, const NURBSData &data);
63  void collectPolylineTo(unsigned id, unsigned level, double x, double y, unsigned char xType, unsigned char yType, const std::vector<std::pair<double, double> > &points);
64  void collectPolylineTo(unsigned id, unsigned level, double x, double y, unsigned dataID);
65  void collectPolylineTo(unsigned id, unsigned level, double x, double y, const PolylineData &data);
66  void collectShapeData(unsigned id, unsigned level, unsigned char xType, unsigned char yType, unsigned degree, double lastKnot,
67  std::vector<std::pair<double, double> > controlPoints, std::vector<double> knotVector, std::vector<double> weights);
68  void collectShapeData(unsigned id, unsigned level, unsigned char xType, unsigned char yType, std::vector<std::pair<double, double> > points);
69  void collectXFormData(unsigned level, const XForm &xform);
70  void collectTxtXForm(unsigned level, const XForm &txtxform);
71  void collectShapesOrder(unsigned id, unsigned level, const std::vector<unsigned> &shapeIds);
72  void collectForeignDataType(unsigned level, unsigned foreignType, unsigned foreignFormat, double offsetX, double offsetY, double width, double height);
73  void collectPageProps(unsigned id, unsigned level, double pageWidth, double pageHeight, double shadowOffsetX, double shadowOffsetY, double scale);
74  void collectPage(unsigned id, unsigned level, unsigned backgroundPageID, bool isBackgroundPage, const VSDName &pageName);
75  void collectShape(unsigned id, unsigned level, unsigned parent, unsigned masterPage, unsigned masterShape, unsigned lineStyle, unsigned fillStyle, unsigned textStyle);
76  void collectSplineStart(unsigned id, unsigned level, double x, double y, double secondKnot, double firstKnot, double lastKnot, unsigned degree);
77  void collectSplineKnot(unsigned id, unsigned level, double x, double y, double knot);
78  void collectSplineEnd();
79  void collectInfiniteLine(unsigned id, unsigned level, double x1, double y1, double x2, double y2);
80  void collectRelCubBezTo(unsigned id, unsigned level, double x, double y, double a, double b, double c, double d);
81  void collectRelEllipticalArcTo(unsigned id, unsigned level, double x, double y, double a, double b, double c, double d);
82  void collectRelLineTo(unsigned id, unsigned level, double x, double y);
83  void collectRelMoveTo(unsigned id, unsigned level, double x, double y);
84  void collectRelQuadBezTo(unsigned id, unsigned level, double x, double y, double a, double b);
85  void collectUnhandledChunk(unsigned id, unsigned level);
86 
87  void collectText(unsigned level, const librevenge::RVNGBinaryData &textStream, TextFormat format);
88  void collectCharIX(unsigned id, unsigned level, unsigned charCount, const boost::optional<VSDName> &font,
89  const boost::optional<Colour> &fontColour, const boost::optional<double> &fontSize, const boost::optional<bool> &bold,
90  const boost::optional<bool> &italic, const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline,
91  const boost::optional<bool> &strikeout, const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps,
92  const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript,
93  const boost::optional<bool> &subscript);
94  void collectDefaultCharStyle(unsigned charCount, const boost::optional<VSDName> &font, const boost::optional<Colour> &fontColour,
95  const boost::optional<double> &fontSize, const boost::optional<bool> &bold, const boost::optional<bool> &italic,
96  const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline, const boost::optional<bool> &strikeout,
97  const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps, const boost::optional<bool> &initcaps,
98  const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript, const boost::optional<bool> &subscript);
99  void collectParaIX(unsigned id, unsigned level, unsigned charCount, const boost::optional<double> &indFirst,
100  const boost::optional<double> &indLeft, const boost::optional<double> &indRight, const boost::optional<double> &spLine,
101  const boost::optional<double> &spBefore, const boost::optional<double> &spAfter, const boost::optional<unsigned char> &align,
102  const boost::optional<unsigned> &flags);
103  void collectDefaultParaStyle(unsigned charCount, const boost::optional<double> &indFirst, const boost::optional<double> &indLeft,
104  const boost::optional<double> &indRight, const boost::optional<double> &spLine, const boost::optional<double> &spBefore,
105  const boost::optional<double> &spAfter, const boost::optional<unsigned char> &align, const boost::optional<unsigned> &flags);
106  void collectTextBlock(unsigned level, const boost::optional<double> &leftMargin, const boost::optional<double> &rightMargin,
107  const boost::optional<double> &topMargin, const boost::optional<double> &bottomMargin,
108  const boost::optional<unsigned char> &verticalAlign, const boost::optional<bool> &isBgFilled,
109  const boost::optional<Colour> &bgColour, const boost::optional<double> &defaultTabStop,
110  const boost::optional<unsigned char> &textDirection);
111  void collectNameList(unsigned id, unsigned level)
112  {
113  collectUnhandledChunk(id, level);
114  }
115  void collectName(unsigned id, unsigned level, const librevenge::RVNGBinaryData &name, TextFormat format);
116  void collectPageSheet(unsigned id, unsigned level);
117  void collectMisc(unsigned level, const VSDMisc &misc);
118 
119  // Style collectors
120  void collectStyleSheet(unsigned id, unsigned level,unsigned parentLineStyle, unsigned parentFillStyle, unsigned parentTextStyle);
121  void collectLineStyle(unsigned level, const boost::optional<double> &strokeWidth, const boost::optional<Colour> &c, const boost::optional<unsigned char> &linePattern,
122  const boost::optional<unsigned char> &startMarker, const boost::optional<unsigned char> &endMarker,
123  const boost::optional<unsigned char> &lineCap);
124  void collectFillStyle(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG,
125  const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency,
126  const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern,
127  const boost::optional<Colour> &shfgc, const boost::optional<double> &shadowOffsetX, const boost::optional<double> &shadowOffsetY);
128  void collectFillStyle(unsigned level, const boost::optional<Colour> &colourFG, const boost::optional<Colour> &colourBG,
129  const boost::optional<unsigned char> &fillPattern, const boost::optional<double> &fillFGTransparency,
130  const boost::optional<double> &fillBGTransparency, const boost::optional<unsigned char> &shadowPattern,
131  const boost::optional<Colour> &shfgc);
132  void collectCharIXStyle(unsigned id, unsigned level, unsigned charCount, const boost::optional<VSDName> &font,
133  const boost::optional<Colour> &fontColour, const boost::optional<double> &fontSize, const boost::optional<bool> &bold,
134  const boost::optional<bool> &italic, const boost::optional<bool> &underline, const boost::optional<bool> &doubleunderline,
135  const boost::optional<bool> &strikeout, const boost::optional<bool> &doublestrikeout, const boost::optional<bool> &allcaps,
136  const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps, const boost::optional<bool> &superscript,
137  const boost::optional<bool> &subscript);
138  void collectParaIXStyle(unsigned id, unsigned level, unsigned charCount, const boost::optional<double> &indFirst,
139  const boost::optional<double> &indLeft, const boost::optional<double> &indRight, const boost::optional<double> &spLine,
140  const boost::optional<double> &spBefore, const boost::optional<double> &spAfter, const boost::optional<unsigned char> &align,
141  const boost::optional<unsigned> &flags);
142  void collectTextBlockStyle(unsigned level, const boost::optional<double> &leftMargin, const boost::optional<double> &rightMargin,
143  const boost::optional<double> &topMargin, const boost::optional<double> &bottomMargin,
144  const boost::optional<unsigned char> &verticalAlign, const boost::optional<bool> &isBgFilled,
145  const boost::optional<Colour> &bgColour, const boost::optional<double> &defaultTabStop,
146  const boost::optional<unsigned char> &textDirection);
147  void collectStyleThemeReference(unsigned level, const boost::optional<long> &lineColour, const boost::optional<long> &fillColour,
148  const boost::optional<long> &shadowColour, const boost::optional<long> &fontColour);
149 
150  // Field list
151  void collectFieldList(unsigned id, unsigned level);
152  void collectTextField(unsigned id, unsigned level, int nameId, int formatStringId);
153  void collectNumericField(unsigned id, unsigned level, unsigned short format, double number, int formatStringId);
154 
155  // Temporary hack
156  void startPage(unsigned pageID);
157  void endPage();
158  void endPages() {}
159 
160  const VSDStyles &getStyleSheets() const
161  {
162  return m_styles;
163  }
164 
165 
166 private:
169 
170  void _handleLevelChange(unsigned level);
171  void _flushShapeList();
172 
173  unsigned m_currentLevel;
175 
178 
180  std::map<unsigned, XForm> m_groupXForms;
181  std::map<unsigned, unsigned> m_groupMemberships;
182  std::vector<std::map<unsigned, XForm> > &m_groupXFormsSequence;
183  std::vector<std::map<unsigned, unsigned> > &m_groupMembershipsSequence;
184  std::list<unsigned> m_pageShapeOrder;
185  std::vector<std::list<unsigned> > &m_documentPageShapeOrders;
186  std::map<unsigned, std::list<unsigned> > m_groupShapeOrder;
187  std::list<unsigned> m_shapeList;
188 
191 
193 };
194 
195 }
196 
197 #endif /* VSDSTYLESCOLLECTOR_H */
198 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */

Generated for libvisio by doxygen 1.8.4