00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef KEYCOLLECTORBASE_H_INCLUDED
00011 #define KEYCOLLECTORBASE_H_INCLUDED
00012
00013 #include <deque>
00014 #include <stack>
00015
00016 #include "KEYCollector.h"
00017 #include "KEYObject.h"
00018 #include "KEYStyle.h"
00019 #include "KEYStylesheet.h"
00020 #include "KEYText_fwd.h"
00021 #include "KEYTypes.h"
00022
00023 namespace libetonyek
00024 {
00025
00026 struct KEYDictionary;
00027
00032 class KEYCollectorBase : public KEYCollector
00033 {
00034 struct Level
00035 {
00036 KEYGeometryPtr_t geometry;
00037 KEYGraphicStylePtr_t graphicStyle;
00038
00039 Level();
00040 };
00041
00042 public:
00043 KEYCollectorBase(KEYDictionary &dict, const KEYDefaults &defaults);
00044 ~KEYCollectorBase();
00045
00046
00047
00048 virtual void collectCellStyle(const boost::optional<ID_t> &id,
00049 const boost::optional<KEYPropertyMap> &props,
00050 const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent,
00051 bool ref, bool anonymous);
00052 virtual void collectCharacterStyle(const boost::optional<ID_t> &id,
00053 const boost::optional<KEYPropertyMap> &props,
00054 const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent,
00055 bool ref, bool anonymous);
00056 virtual void collectConnectionStyle(const boost::optional<ID_t> &id,
00057 const boost::optional<KEYPropertyMap> &props,
00058 const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent,
00059 bool ref, bool anonymous);
00060 virtual void collectGraphicStyle(const boost::optional<ID_t> &id,
00061 const boost::optional<KEYPropertyMap> &props,
00062 const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent,
00063 bool ref, bool anonymous);
00064 virtual void collectLayoutStyle(const boost::optional<ID_t> &id,
00065 const boost::optional<KEYPropertyMap> &props,
00066 const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent,
00067 bool ref, bool anonymous);
00068 virtual void collectListStyle(const boost::optional<ID_t> &id,
00069 const boost::optional<KEYPropertyMap> &props,
00070 const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent,
00071 bool ref, bool anonymous);
00072 virtual void collectParagraphStyle(const boost::optional<ID_t> &id,
00073 const boost::optional<KEYPropertyMap> &props,
00074 const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent,
00075 bool ref, bool anonymous);
00076 virtual void collectPlaceholderStyle(const boost::optional<ID_t> &id,
00077 const boost::optional<KEYPropertyMap> &props,
00078 const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent,
00079 bool ref, bool anonymous);
00080 virtual void collectSlideStyle(const boost::optional<ID_t> &id,
00081 const boost::optional<KEYPropertyMap> &props,
00082 const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent,
00083 bool ref, bool anonymous);
00084 virtual void collectTabularStyle(const boost::optional<ID_t> &id,
00085 const boost::optional<KEYPropertyMap> &props,
00086 const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent,
00087 bool ref, bool anonymous);
00088 virtual void collectVectorStyle(const boost::optional<ID_t> &id,
00089 const boost::optional<KEYPropertyMap> &props,
00090 const boost::optional<std::string> &ident, const boost::optional<std::string> &parentIdent,
00091 bool ref, bool anonymous);
00092
00093 virtual void collectGeometry(boost::optional<ID_t> &id,
00094 boost::optional<KEYSize> &naturalSize, boost::optional<KEYPosition> &position,
00095 boost::optional<double> &angle,
00096 boost::optional<double> &shearXAngle, boost::optional<double> &shearYAngle,
00097 boost::optional<bool> &horizontalFlip, boost::optional<bool> &verticalFlip,
00098 boost::optional<bool> &aspectRatioLocked, boost::optional<bool> &sizesLocked);
00099
00100 virtual void collectBezier(const boost::optional<ID_t> &id, const KEYPathPtr_t &path, bool ref);
00101 virtual void collectGroup(const boost::optional<ID_t> &id, const KEYGroupPtr_t &group);
00102 virtual void collectImage(const boost::optional<ID_t> &id, const KEYImagePtr_t &image);
00103 virtual void collectLine(const boost::optional<ID_t> &id, const KEYLinePtr_t &line);
00104 virtual void collectShape(const boost::optional<ID_t> &id);
00105
00106 virtual void collectBezierPath(const boost::optional<ID_t> &id);
00107 virtual void collectPolygonPath(const boost::optional<ID_t> &id, const KEYSize &size, unsigned edges);
00108 virtual void collectRoundedRectanglePath(const boost::optional<ID_t> &id, const KEYSize &size, double radius);
00109 virtual void collectArrowPath(const boost::optional<ID_t> &id, const KEYSize &size, double headWidth, double stemRelYPos, bool doubleSided);
00110 virtual void collectStarPath(const boost::optional<ID_t> &id, const KEYSize &size, unsigned points, double innerRadius);
00111 virtual void collectConnectionPath(const boost::optional<ID_t> &id, const KEYSize &size, double middleX, double middleY);
00112 virtual void collectCalloutPath(const boost::optional<ID_t> &id, const KEYSize &size, double radius, double tailSize, double tailX, double tailY, bool quoteBubble);
00113
00114 virtual void collectData(const boost::optional<ID_t> &id, const WPXInputStreamPtr_t &stream, const boost::optional<std::string> &displayName, const boost::optional<unsigned> &type, bool ref);
00115 virtual void collectUnfiltered(const boost::optional<ID_t> &id, const boost::optional<KEYSize> &size, bool ref);
00116 virtual void collectFiltered(const boost::optional<ID_t> &id, const boost::optional<KEYSize> &size);
00117 virtual void collectLeveled(const boost::optional<ID_t> &id, const boost::optional<KEYSize> &size);
00118 virtual void collectFilteredImage(const boost::optional<ID_t> &id, bool ref);
00119 virtual void collectMovieMedia(const boost::optional<ID_t> &id);
00120 virtual void collectMedia(const boost::optional<ID_t> &id);
00121
00122 virtual void collectLayer(const boost::optional<ID_t> &id, bool ref);
00123 virtual void collectStylesheet(const boost::optional<ID_t> &id, const boost::optional<ID_t> &parent);
00124
00125 virtual void collectText(const boost::optional<ID_t> &style, const std::string &text);
00126 virtual void collectTab();
00127 virtual void collectLineBreak();
00128
00129 virtual void collectTextPlaceholder(const boost::optional<ID_t> &id, bool title, bool ref);
00130
00131 virtual void collectTableSizes(const KEYTable::RowSizes_t &rowSizes, const KEYTable::ColumnSizes_t &columnSizes);
00132 virtual void collectTableCell(unsigned row, unsigned column, const boost::optional<std::string> &content, unsigned rowSpan, unsigned columnSpan);
00133 virtual void collectCoveredTableCell(unsigned row, unsigned column);
00134 virtual void collectTableRow();
00135 virtual void collectTable();
00136
00137 virtual void collectNote();
00138
00139 virtual void collectStickyNote();
00140
00141 virtual void startPage();
00142 virtual void endPage();
00143 virtual void startLayer();
00144 virtual void endLayer();
00145 virtual void startGroup();
00146 virtual void endGroup();
00147
00148 virtual void startParagraph(const boost::optional<ID_t> &style);
00149 virtual void endParagraph();
00150 virtual void startText(bool object);
00151 virtual void endText();
00152
00153 virtual void startLevel();
00154 virtual void endLevel();
00155
00156 protected:
00157 bool isCollecting() const;
00158 void setCollecting(bool collecting);
00159
00160 const KEYDefaults &getDefaults() const;
00161
00162 const KEYLayerPtr_t &getLayer() const;
00163 const KEYObjectList_t &getNotes() const;
00164 const KEYStickyNotes_t &getStickyNotes() const;
00165
00166 private:
00167 KEYDictionary &m_dict;
00168 const KEYDefaults &m_defaults;
00169
00170 KEYLayerPtr_t m_currentLayer;
00171
00172 std::stack<Level> m_levelStack;
00173 std::stack<KEYObjectList_t> m_objectsStack;
00174 KEYPathPtr_t m_currentPath;
00175
00176 KEYTextPtr_t m_currentText;
00177
00178 KEYPlaceholderStylePtr_t m_currentPlaceholderStyle;
00179
00180 KEYStylesheetPtr_t m_currentStylesheet;
00181 std::deque<KEYStylePtr_t> m_newStyles;
00182
00183 KEYDataPtr_t m_currentData;
00184 KEYMediaContentPtr_t m_currentUnfiltered;
00185 KEYMediaContentPtr_t m_currentFiltered;
00186 KEYMediaContentPtr_t m_currentLeveled;
00187 KEYMediaContentPtr_t m_currentContent;
00188
00189 KEYTable m_currentTable;
00190
00191 KEYObjectList_t m_notes;
00192
00193 KEYStickyNotes_t m_stickyNotes;
00194
00195 bool m_collecting;
00196 bool m_layerOpened;
00197 int m_groupLevel;
00198 };
00199
00200 }
00201
00202 #endif // KEYCOLLECTORBASE_H_INCLUDED
00203
00204