STOFFChart.hxx
Go to the documentation of this file.
1 /* -*- Mode: C++; c-default-style: "k&r"; indent-tabs-mode: nil; tab-width: 2; c-basic-offset: 2 -*- */
2 
3 /* libstaroffice
4 * Version: MPL 2.0 / LGPLv2+
5 *
6 * The contents of this file are subject to the Mozilla Public License Version
7 * 2.0 (the "License"); you may not use this file except in compliance with
8 * the License or as specified alternatively below. You may obtain a copy of
9 * the License at http://www.mozilla.org/MPL/
10 *
11 * Software distributed under the License is distributed on an "AS IS" basis,
12 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13 * for the specific language governing rights and limitations under the
14 * License.
15 *
16 * Major Contributor(s):
17 * Copyright (C) 2002 William Lachance (wrlach@gmail.com)
18 * Copyright (C) 2002,2004 Marc Maurer (uwog@uwog.net)
19 * Copyright (C) 2004-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
20 * Copyright (C) 2006, 2007 Andrew Ziem
21 * Copyright (C) 2011, 2012 Alonso Laurent (alonso@loria.fr)
22 *
23 *
24 * All Rights Reserved.
25 *
26 * For minor contributions see the git repository.
27 *
28 * Alternatively, the contents of this file may be used under the terms of
29 * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
30 * in which case the provisions of the LGPLv2+ are applicable
31 * instead of those above.
32 */
33 
34 /*
35  * Structure to store and construct a chart
36  *
37  */
38 
39 #ifndef STOFF_CHART
40 # define STOFF_CHART
41 
42 #include <iostream>
43 #include <vector>
44 #include <map>
45 
47 
48 #include "STOFFEntry.hxx"
49 #include "STOFFFont.hxx"
50 #include "STOFFGraphicStyle.hxx"
51 
52 namespace STOFFChartInternal
53 {
54 class SubDocument;
55 }
58 {
60 public:
62  struct Position {
64  explicit Position(STOFFVec2i pos=STOFFVec2i(-1,-1), librevenge::RVNGString const &sheetName="")
65  : m_pos(pos)
66  , m_sheetName(sheetName)
67  {
68  }
70  bool valid() const
71  {
72  return m_pos[0]>=0 && m_pos[1]>=0 && !m_sheetName.empty();
73  }
75  bool valid(Position const &maxPos) const
76  {
77  return valid() && maxPos.valid() && maxPos.m_pos[0]>=m_pos[0] && maxPos.m_pos[1]>=m_pos[1];
78  }
80  librevenge::RVNGString getCellName() const;
82  friend std::ostream &operator<<(std::ostream &o, Position const &pos);
84  bool operator==(Position &pos) const
85  {
86  return m_pos==pos.m_pos && m_sheetName==pos.m_sheetName;
87  }
89  bool operator!=(Position &pos) const
90  {
91  return !(operator==(pos));
92  }
96  librevenge::RVNGString m_sheetName;
97  };
98  struct Axis {
102  Axis();
104  ~Axis();
106  void addContentTo(int coord, librevenge::RVNGPropertyList &propList) const;
108  void addStyleTo(librevenge::RVNGPropertyList &propList) const;
110  friend std::ostream &operator<<(std::ostream &o, Axis const &axis);
123 
129  librevenge::RVNGString m_title;
131  librevenge::RVNGString m_subTitle;
134  };
136  struct Legend {
139  : m_show(false)
140  , m_autoPosition(true)
142  , m_position(0,0)
143  , m_font()
144  , m_style()
145  {
146  }
148  void addContentTo(librevenge::RVNGPropertyList &propList) const;
150  void addStyleTo(librevenge::RVNGPropertyList &propList) const;
152  friend std::ostream &operator<<(std::ostream &o, Legend const &legend);
154  bool m_show;
165  };
167  struct Serie {
171  enum PointType {
176  };
178  Serie();
180  virtual ~Serie();
182  bool is1DStyle() const
183  {
185  }
187  bool valid() const
188  {
189  return m_ranges[0].valid(m_ranges[0]);
190  }
192  void addContentTo(librevenge::RVNGPropertyList &propList) const;
194  void addStyleTo(librevenge::RVNGPropertyList &propList) const;
196  static std::string getSerieTypeName(Type type);
198  friend std::ostream &operator<<(std::ostream &o, Serie const &series);
212  librevenge::RVNGString m_legendText;
217  };
219  struct TextZone {
224 
226  explicit TextZone(Type type);
228  ~TextZone();
230  bool valid() const
231  {
232  if (!m_show) return false;
233  if (m_contentType==C_Cell)
234  return m_cell.valid();
235  if (m_contentType!=C_Text)
236  return false;
237  for (auto &e : m_textEntryList) {
238  if (e.valid()) return true;
239  }
240  return false;
241  }
243  void addContentTo(librevenge::RVNGPropertyList &propList) const;
245  void addStyleTo(librevenge::RVNGPropertyList &propList) const;
247  friend std::ostream &operator<<(std::ostream &o, TextZone const &zone);
253  bool m_show;
259  std::vector<STOFFEntry> m_textEntryList;
264  };
265 
267  STOFFChart(STOFFVec2f const &dim=STOFFVec2f());
269  virtual ~STOFFChart();
271  void sendChart(STOFFSpreadsheetListenerPtr &listener, librevenge::RVNGSpreadsheetInterface *interface);
273  virtual void sendContent(TextZone const &zone, STOFFListenerPtr &listener) const =0;
274 
276  void setGridColor(STOFFColor const &color)
277  {
278  m_gridColor=color;
279  }
281  Axis &getAxis(int coord);
283  Axis const &getAxis(int coord) const;
284 
286  Legend const &getLegend() const
287  {
288  return m_legend;
289  }
292  {
293  return m_legend;
294  }
295 
297  Serie *getSerie(int id, bool create);
299  std::map<int, Serie> const &getIdSerieMap() const
300  {
301  return m_serieMap;
302  }
304  TextZone *getTextZone(TextZone::Type type, bool create=false);
305 
306 protected:
308  void sendTextZoneContent(TextZone::Type type, STOFFListenerPtr &listener) const;
309 
310 public:
322  bool m_is3D;
325 
326  // main
327 
331  librevenge::RVNGString m_name;
332 
333  // plot area
334 
339 
340  // legend
341 
344 
349 
350 protected:
358  std::map<int, Serie> m_serieMap;
360  std::map<TextZone::Type, TextZone> m_textZoneMap;
361 private:
362  explicit STOFFChart(STOFFChart const &orig) = delete;
363  STOFFChart &operator=(STOFFChart const &orig) = delete;
364 };
365 
366 #endif
367 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
bool valid() const
returns true if the textbox is valid
Definition: STOFFChart.hxx:230
Legend const & getLegend() const
returns the legend
Definition: STOFFChart.hxx:286
STOFFVec2f m_position
the position in points
Definition: STOFFChart.hxx:160
void addContentTo(librevenge::RVNGPropertyList &propList) const
add content to the propList
Definition: STOFFChart.cxx:617
Position m_labelRanges[2]
the label ranges if defined(unused)
Definition: STOFFChart.hxx:208
void addStyleTo(librevenge::RVNGPropertyList &propList) const
add to the propList
Definition: STOFFChart.cxx:814
Definition: STOFFChart.hxx:169
Definition: STOFFChart.hxx:174
STOFFGraphicStyle m_style
the graphic style
Definition: STOFFChart.hxx:164
a cell position
Definition: STOFFChart.hxx:62
Definition: STOFFChart.hxx:169
ContentType m_contentType
the content type
Definition: STOFFChart.hxx:251
void setGridColor(STOFFColor const &color)
set the grid color
Definition: STOFFChart.hxx:276
Definition: STOFFChart.hxx:172
Definition: STOFFChart.hxx:169
Type m_type
the sequence type
Definition: STOFFChart.hxx:112
Definition: STOFFChart.hxx:172
STOFFGraphicStyle m_floorStyle
floor
Definition: STOFFChart.hxx:346
PointType m_pointType
the point type
Definition: STOFFChart.hxx:216
Definition: STOFFChart.hxx:175
Definition: STOFFChart.hxx:223
Definition: STOFFChart.hxx:173
Position m_titleRange
the title cell range
Definition: STOFFChart.hxx:127
Position m_labelRanges[2]
the label range if defined
Definition: STOFFChart.hxx:122
std::map< int, Serie > const & getIdSerieMap() const
returns the list of defined series
Definition: STOFFChart.hxx:299
void addStyleTo(librevenge::RVNGPropertyList &propList) const
add style to the propList
Definition: STOFFChart.cxx:452
librevenge::RVNGString m_legendText
the legend name if defined
Definition: STOFFChart.hxx:212
Legend m_legend
the legend
Definition: STOFFChart.hxx:356
Definition: STOFFChart.hxx:169
Definition: libstaroffice_internal.hxx:180
Type
the series type
Definition: STOFFChart.hxx:169
Serie::Type m_type
the chart type (if no series)
Definition: STOFFChart.hxx:314
Definition: STOFFChart.hxx:169
Definition: STOFFChart.hxx:173
STOFFVec2f m_scaling
the minimum, maximum scaling(if manual)
Definition: STOFFChart.hxx:116
Definition: STOFFChart.hxx:169
a text zone a chart
Definition: STOFFChart.hxx:219
STOFFFont m_font
the font
Definition: STOFFChart.hxx:162
void addContentTo(librevenge::RVNGPropertyList &propList) const
add content to the propList
Definition: STOFFChart.cxx:509
static std::string getSerieTypeName(Type type)
returns a string corresponding to a series type
Definition: STOFFChart.cxx:582
Definition: STOFFChart.hxx:169
Serie()
constructor
Definition: STOFFChart.cxx:567
Definition: STOFFChart.hxx:173
Definition: STOFFChart.hxx:169
Definition: STOFFChart.hxx:169
bool m_dataVertical
a flag to know if the data are vertical (for bar)
Definition: STOFFChart.hxx:320
bool m_useSecondaryY
use or not the secondary y axis
Definition: STOFFChart.hxx:204
bool m_automaticScaling
automatic scaling (or manual)
Definition: STOFFChart.hxx:114
bool m_showTitle
show or not the title/subtitle
Definition: STOFFChart.hxx:125
Definition: STOFFChart.hxx:174
STOFFGraphicStyle m_plotAreaStyle
the ploat area style
Definition: STOFFChart.hxx:338
STOFFVec2i m_pos
the cell column and row
Definition: STOFFChart.hxx:94
Definition: STOFFChart.hxx:169
ContentType
the text content type
Definition: STOFFChart.hxx:223
Definition: STOFFChart.hxx:98
Definition: STOFFChart.hxx:169
a legend in a chart
Definition: STOFFChart.hxx:136
TextZone(Type type)
constructor
Definition: STOFFChart.cxx:760
librevenge::RVNGString m_sheetName
the cell sheet name
Definition: STOFFChart.hxx:96
PointType
the point type
Definition: STOFFChart.hxx:171
librevenge::RVNGString m_name
the chart name
Definition: STOFFChart.hxx:331
Definition: STOFFChart.hxx:174
Axis()
constructor
Definition: STOFFChart.cxx:378
std::vector< STOFFEntry > m_textEntryList
the text entry (or the list of text entry)
Definition: STOFFChart.hxx:259
Definition: STOFFChart.hxx:221
librevenge::RVNGString m_title
the title label
Definition: STOFFChart.hxx:129
Definition: STOFFChart.hxx:175
STOFFVec2f m_dimension
the chart dimension in point
Definition: STOFFChart.hxx:312
STOFFFont m_font
the label font
Definition: STOFFChart.hxx:206
bool is1DStyle() const
return true if the serie style is 1D
Definition: STOFFChart.hxx:182
Definition: STOFFChart.hxx:173
STOFFGraphicStyle m_style
the graphic style
Definition: STOFFChart.hxx:214
Legend()
constructor
Definition: STOFFChart.hxx:138
Legend & getLegend()
returns the legend
Definition: STOFFChart.hxx:291
Type
the axis content
Definition: STOFFChart.hxx:100
STOFFGraphicStyle m_style
the graphic style
Definition: STOFFChart.hxx:263
bool valid(Position const &maxPos) const
return true if the position is valid
Definition: STOFFChart.hxx:75
friend std::ostream & operator<<(std::ostream &o, Position const &pos)
operator<<
Definition: STOFFChart.cxx:366
friend std::ostream & operator<<(std::ostream &o, Legend const &legend)
operator<<
Definition: STOFFChart.cxx:538
Definition: STOFFChart.hxx:174
std::shared_ptr< STOFFSpreadsheetListener > STOFFSpreadsheetListenerPtr
a smart pointer of STOFFSpreadsheetListener
Definition: libstaroffice_internal.hxx:493
Position m_ranges[2]
the data range
Definition: STOFFChart.hxx:202
librevenge::RVNGString getCellName() const
return the cell name
Definition: STOFFChart.cxx:353
bool operator!=(Position &pos) const
operator!=
Definition: STOFFChart.hxx:89
Position m_cell
the cell position ( or title and subtitle)
Definition: STOFFChart.hxx:257
bool m_dataStacked
a flag to know if the data are stacked or not
Definition: STOFFChart.hxx:316
a class used to store a chart associated to a spreadsheet ....
Definition: STOFFChart.hxx:57
STOFFChart & operator=(STOFFChart const &orig)=delete
bool m_is3D
a flag to know if the graphic is 3D
Definition: STOFFChart.hxx:322
Axis & getAxis(int coord)
return an axis (corresponding to a coord)
Definition: STOFFChart.cxx:149
STOFFGraphicStyle m_style
the chart style
Definition: STOFFChart.hxx:329
Definition: STOFFChart.hxx:100
bool valid() const
return true if the serie is valid
Definition: STOFFChart.hxx:187
~Axis()
destructor
Definition: STOFFChart.cxx:393
Type m_type
the zone type
Definition: STOFFChart.hxx:249
Internal: the subdocument of a STOFFChart.
Definition: STOFFChart.cxx:60
bool m_dataPercentStacked
a flag to know if the data are percent stacked or not
Definition: STOFFChart.hxx:318
std::map< int, Serie > m_serieMap
the list of series
Definition: STOFFChart.hxx:358
Axis m_axis[5]
the x,y,y-second,z and a bad axis
Definition: STOFFChart.hxx:354
void addContentTo(librevenge::RVNGPropertyList &propList) const
add content to the propList
Definition: STOFFChart.cxx:777
Type m_type
the type
Definition: STOFFChart.hxx:200
namespace used to regroup all libwpd functions, enumerations which we have redefined for internal usa...
Definition: libstaroffice_internal.cxx:50
friend std::ostream & operator<<(std::ostream &o, Serie const &series)
operator<<
Definition: STOFFChart.cxx:687
STOFFGraphicStyle m_wallStyle
wall
Definition: STOFFChart.hxx:348
Definition: STOFFChart.hxx:172
STOFFBox2f m_legendPosition
the legend dimension in percent
Definition: STOFFChart.hxx:343
STOFFChart(STOFFVec2f const &dim=STOFFVec2f())
the constructor
Definition: STOFFChart.cxx:117
bool m_is3DDeep
a flag to know if real 3D or 2D-extended
Definition: STOFFChart.hxx:324
STOFFFont m_font
the zone format
Definition: STOFFChart.hxx:261
virtual void sendContent(TextZone const &zone, STOFFListenerPtr &listener) const =0
send the zone content (called when the zone is of text type)
friend std::ostream & operator<<(std::ostream &o, Axis const &axis)
operator<<
Definition: STOFFChart.cxx:466
friend std::ostream & operator<<(std::ostream &o, TextZone const &zone)
operator<<
Definition: STOFFChart.cxx:820
void sendTextZoneContent(TextZone::Type type, STOFFListenerPtr &listener) const
sends a textzone content
Definition: STOFFChart.cxx:187
STOFFVec2< int > STOFFVec2i
STOFFVec2 of int.
Definition: libstaroffice_internal.hxx:763
bool m_showGrid
show or not the grid
Definition: STOFFChart.hxx:118
Definition: STOFFChart.hxx:169
std::map< TextZone::Type, TextZone > m_textZoneMap
a map text zone type to text zone
Definition: STOFFChart.hxx:360
~TextZone()
destructor
Definition: STOFFChart.cxx:773
Definition: STOFFChart.hxx:100
bool m_show
true if the zone is visible
Definition: STOFFChart.hxx:253
a serie in a chart
Definition: STOFFChart.hxx:167
the class to store a color
Definition: libstaroffice_internal.hxx:189
void addContentTo(int coord, librevenge::RVNGPropertyList &propList) const
add content to the propList
Definition: STOFFChart.cxx:397
Class to store font.
Definition: STOFFFont.hxx:43
Position m_legendRange
the legend range if defined
Definition: STOFFChart.hxx:210
bool m_show
show or not the legend
Definition: STOFFChart.hxx:154
Definition: STOFFChart.hxx:221
librevenge::RVNGString m_subTitle
the subtitle label
Definition: STOFFChart.hxx:131
Definition: STOFFChart.hxx:100
Definition: STOFFChart.hxx:172
virtual ~STOFFChart()
the destructor
Definition: STOFFChart.cxx:145
STOFFColor m_gridColor
the grid color
Definition: STOFFChart.hxx:352
void addStyleTo(librevenge::RVNGPropertyList &propList) const
add style to the propList
Definition: STOFFChart.cxx:666
bool m_autoPosition
automatic position
Definition: STOFFChart.hxx:156
TextZone * getTextZone(TextZone::Type type, bool create=false)
returns a textzone content
Definition: STOFFChart.cxx:177
void addStyleTo(librevenge::RVNGPropertyList &propList) const
add style to the propList
Definition: STOFFChart.cxx:531
Definition: STOFFChart.hxx:223
STOFFVec2f m_position
the position in the zone
Definition: STOFFChart.hxx:255
std::shared_ptr< STOFFListener > STOFFListenerPtr
a smart pointer of STOFFListener
Definition: libstaroffice_internal.hxx:487
virtual ~Serie()
destructor
Definition: STOFFChart.cxx:578
bool valid() const
return true if the position is valid
Definition: STOFFChart.hxx:70
STOFFBox2f m_plotAreaPosition
the plot area dimension in percent
Definition: STOFFChart.hxx:336
STOFFVec2< float > STOFFVec2f
STOFFVec2 of float.
Definition: libstaroffice_internal.hxx:767
Position(STOFFVec2i pos=STOFFVec2i(-1,-1), librevenge::RVNGString const &sheetName="")
constructor
Definition: STOFFChart.hxx:64
Definition: STOFFChart.hxx:221
STOFFGraphicStyle m_style
the graphic style
Definition: STOFFChart.hxx:133
bool operator==(Position &pos) const
operator==
Definition: STOFFChart.hxx:84
int m_relativePosition
the automatic position libstoff::LeftBit|...
Definition: STOFFChart.hxx:158
Type
the text type
Definition: STOFFChart.hxx:221
Serie * getSerie(int id, bool create)
return a serie
Definition: STOFFChart.cxx:167
Definition: STOFFChart.hxx:100
Class to store a graphic style.
Definition: STOFFGraphicStyle.hxx:44
void sendChart(STOFFSpreadsheetListenerPtr &listener, librevenge::RVNGSpreadsheetInterface *interface)
send the chart to the listener
Definition: STOFFChart.cxx:196
Definition: STOFFChart.hxx:174
Definition: STOFFChart.hxx:173
Definition: STOFFChart.hxx:100
Definition: STOFFChart.hxx:172
Internal: the structures of a STOFFChart.
Definition: STOFFChart.cxx:56
bool m_showLabel
show or not the label
Definition: STOFFChart.hxx:120

Generated on Sun Mar 24 2019 23:33:12 for libstaroffice by doxygen 1.8.15