KEYCollectorBase.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
00002 /*
00003  * This file is part of the libetonyek project.
00004  *
00005  * This Source Code Form is subject to the terms of the Mozilla Public
00006  * License, v. 2.0. If a copy of the MPL was not distributed with this
00007  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
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   // collector functions
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 } // namespace libetonyek
00201 
00202 #endif // KEYCOLLECTORBASE_H_INCLUDED
00203 
00204 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */