1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ 2 /* libwps 3 * Version: MPL 2.0 / LGPLv2.1+ 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 * Major Contributor(s): 10 * Copyright (C) 2006, 2007 Andrew Ziem 11 * Copyright (C) 2003-2005 William Lachance (william.lachance@sympatico.ca) 12 * Copyright (C) 2003 Marc Maurer (uwog@uwog.net) 13 * 14 * For minor contributions see the git repository. 15 * 16 * Alternatively, the contents of this file may be used under the terms 17 * of the GNU Lesser General Public License Version 2.1 or later 18 * (LGPLv2.1+), in which case the provisions of the LGPLv2.1+ are 19 * applicable instead of those above. 20 */ 21 22 #ifndef LOTUS_CHART_H 23 #define LOTUS_CHART_H 24 25 #include <ostream> 26 #include <string> 27 #include <map> 28 #include <vector> 29 30 #include <librevenge-stream/librevenge-stream.h> 31 32 #include "libwps_internal.h" 33 34 #include "WPSDebug.h" 35 #include "WKSChart.h" 36 #include "WKSContentListener.h" 37 38 #include "Lotus.h" 39 40 namespace LotusChartInternal 41 { 42 class Chart; 43 struct State; 44 } 45 46 class LotusStyleManager; 47 class WPSGraphicStyle; 48 49 /** 50 * This class parses Microsoft Works chart file 51 * 52 */ 53 class LotusChart 54 { 55 public: 56 friend class LotusParser; 57 friend class LotusChartInternal::Chart; 58 59 //! constructor 60 explicit LotusChart(LotusParser &parser); 61 //! clean internal state 62 void cleanState(); 63 //! update internal state (must be called one time before sending data) 64 void updateState(); 65 //! destructor 66 ~LotusChart(); 67 //! sets the listener setListener(WKSContentListenerPtr & listen)68 void setListener(WKSContentListenerPtr &listen) 69 { 70 m_listener = listen; 71 } 72 73 protected: 74 //! return the file version 75 int version() const; 76 77 //! return the number of chart 78 int getNumCharts() const; 79 //! returns a map chart name to chart id map 80 std::map<std::string,int> getNameToChartIdMap() const; 81 //! update a chart, so that it can be send 82 void updateChart(LotusChartInternal::Chart &chart, int id); 83 //! try to send the charts(for Windows .wk3 file) 84 bool sendCharts(); 85 //! try to send a chart 86 bool sendChart(int cId, WPSPosition const &pos, WPSGraphicStyle const &style); 87 //! try to send the text 88 bool sendText(std::shared_ptr<WPSStream> stream, WPSEntry const &entry); 89 90 //! reads a structure which define a chart: 11 91 bool readChart(std::shared_ptr<WPSStream> stream); 92 //! reads the chart name or title: 12 93 bool readChartName(std::shared_ptr<WPSStream> stream); 94 95 // zone 1b 96 97 //! reads a chart data: 2710 (wk3mac) 98 bool readMacHeader(std::shared_ptr<WPSStream> stream, long endPos, int &chartId); 99 //! reads a placement position(wk3mac): 2774 100 bool readMacPlacement(std::shared_ptr<WPSStream> stream, long endPos); 101 //! reads a legend position(wk3mac): 277e 102 bool readMacLegend(std::shared_ptr<WPSStream> stream, long endPos); 103 //! reads a plot area position(wk3mac): 2788 104 bool readMacPlotArea(std::shared_ptr<WPSStream> stream, long endPos); 105 //! reads an axis style(wk3mac): 27d8 106 bool readMacAxis(std::shared_ptr<WPSStream> stream, long endPos); 107 //! reads a serie style(wk3mac): 27e2 108 bool readMacSerie(std::shared_ptr<WPSStream> stream, long endPos); 109 //! reads a 3D floor style(wk3mac): 2846 110 bool readMacFloor(std::shared_ptr<WPSStream> stream, long endPos); 111 //! reads a manual position(wk3mac): 2904 112 bool readMacPosition(std::shared_ptr<WPSStream> stream, long endPos); 113 114 //! reads a plot area style: 2a30 (unsure) 115 bool readPlotArea(std::shared_ptr<WPSStream> stream, long endPos); 116 //! reads a serie style: 2a31 117 bool readSerie(std::shared_ptr<WPSStream> stream, long endPos); 118 //! reads a serie name: 2a32 (serie 6-...) 119 bool readSerieName(std::shared_ptr<WPSStream> stream, long endPos); 120 //! reads a serie width style: 2a33 121 static bool readSerieWidth(std::shared_ptr<WPSStream> stream, long endPos); 122 //! reads a list of font style: 2a34 123 static bool readFontsStyle(std::shared_ptr<WPSStream> stream, long endPos); 124 //! reads a some frame styles: 2a35 125 bool readFramesStyle(std::shared_ptr<WPSStream> stream, long endPos); 126 127 //! convert a link zone in a chart position(if possible) 128 bool convert(LotusParser::Link const &link, WKSChart::Position(&positions)[2]) const; 129 private: 130 LotusChart(LotusChart const &orig) = delete; 131 LotusChart &operator=(LotusChart const &orig) = delete; 132 std::shared_ptr<WKSContentListener> m_listener; /** the listener (if set)*/ 133 //! the main parser 134 LotusParser &m_mainParser; 135 //! the style manager 136 std::shared_ptr<LotusStyleManager> m_styleManager; 137 //! the internal state 138 std::shared_ptr<LotusChartInternal::State> m_state; 139 }; 140 141 #endif /* WPS4_H */ 142 /* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */ 143