WKSChart.h
Go to the documentation of this file.
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) 2004 Marc Maurer (uwog@uwog.net)
12  * Copyright (C) 2004-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
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 /*
23  * Structure to store and construct a chart
24  *
25  */
26 
27 #ifndef WKS_CHART
28 # define WKS_CHART
29 
30 #include <iostream>
31 #include <vector>
32 #include <map>
33 
34 #include "libwps_internal.h"
35 
36 #include "WPSEntry.h"
37 #include "WPSFont.h"
38 #include "WPSGraphicStyle.h"
39 
40 namespace WKSChartInternal
41 {
42 class SubDocument;
43 }
45 class WKSChart
46 {
48 public:
50  struct Position
51  {
53  explicit Position(Vec2i pos=Vec2i(-1,-1), librevenge::RVNGString const &sheetName="")
54  : m_pos(pos)
55  , m_sheetName(sheetName)
56  {
57  }
59  bool valid() const
60  {
61  return m_pos[0]>=0 && m_pos[1]>=0 && !m_sheetName.empty();
62  }
64  bool valid(Position const &maxPos) const
65  {
66  return valid() && maxPos.valid() && maxPos.m_pos[0]>=m_pos[0] && maxPos.m_pos[1]>=m_pos[1];
67  }
69  librevenge::RVNGString getCellName() const;
71  friend std::ostream &operator<<(std::ostream &o, Position const &pos);
73  bool operator==(Position &pos) const
74  {
75  return m_pos==pos.m_pos && m_sheetName==pos.m_sheetName;
76  }
78  bool operator!=(Position &pos) const
79  {
80  return !(operator==(pos));
81  }
85  librevenge::RVNGString m_sheetName;
86  };
88  struct Axis
89  {
91  enum Type { A_None, A_Numeric, A_Logarithmic, A_Sequence, A_Sequence_Skip_Empty };
93  Axis();
95  ~Axis();
97  void addContentTo(int coord, librevenge::RVNGPropertyList &propList) const;
99  void addStyleTo(librevenge::RVNGPropertyList &propList) const;
101  friend std::ostream &operator<<(std::ostream &o, Axis const &axis);
113  Position m_labelRanges[2];
114 
120  librevenge::RVNGString m_title;
122  librevenge::RVNGString m_subTitle;
125  };
127  struct Legend
128  {
131  : m_show(false)
132  , m_autoPosition(true)
133  , m_relativePosition(WPSBorder::RightBit)
134  , m_position(0,0)
135  , m_font()
136  , m_style()
137  {
138  }
140  void addContentTo(librevenge::RVNGPropertyList &propList) const;
142  void addStyleTo(librevenge::RVNGPropertyList &propList) const;
144  friend std::ostream &operator<<(std::ostream &o, Legend const &legend);
146  bool m_show;
157  };
159  struct Serie
160  {
162  enum Type { S_Area, S_Bar, S_Bubble, S_Circle, S_Column, S_Gantt, S_Line, S_Radar, S_Ring, S_Scatter, S_Stock, S_Surface };
165  {
166  P_None=0, P_Automatic, P_Square, P_Diamond, P_Arrow_Down,
167  P_Arrow_Up, P_Arrow_Right, P_Arrow_Left, P_Bow_Tie, P_Hourglass,
168  P_Circle, P_Star, P_X, P_Plus, P_Asterisk,
169  P_Horizontal_Bar, P_Vertical_Bar
170  };
172  Serie();
174  virtual ~Serie();
176  bool is1DStyle() const
177  {
178  return m_type==S_Line || m_type==S_Radar || (m_type==S_Scatter && m_pointType==P_None);
179  }
181  void setPrimaryColor(WPSColor const &color, float opacity = 1, bool force1D=false)
182  {
183  if (force1D || is1DStyle())
184  m_style.m_lineColor=color;
185  else
186  m_style.setSurfaceColor(color, opacity);
187  }
189  void setPrimaryPattern(WPSGraphicStyle::Pattern const &pattern, bool force1D=false);
191  void setSecondaryColor(WPSColor const &color)
192  {
193  if (!is1DStyle())
194  m_style.m_lineColor=color;
195  }
197  bool valid() const
198  {
199  return m_ranges[0].valid(m_ranges[0]);
200  }
202  void addContentTo(librevenge::RVNGPropertyList &propList) const;
204  void addStyleTo(librevenge::RVNGPropertyList &propList) const;
206  static std::string getSerieTypeName(Type type);
208  friend std::ostream &operator<<(std::ostream &o, Serie const &series);
212  Position m_ranges[2];
218  Position m_labelRanges[2];
222  librevenge::RVNGString m_legendText;
227  };
229  struct TextZone
230  {
232  enum Type { T_Title, T_SubTitle, T_Footer };
234  enum ContentType { C_Cell, C_Text };
235 
237  explicit TextZone(Type type);
239  ~TextZone();
241  bool valid() const
242  {
243  if (!m_show) return false;
244  if (m_contentType==C_Cell)
245  return m_cell.valid();
246  if (m_contentType!=C_Text)
247  return false;
248  for (auto &e : m_textEntryList)
249  {
250  if (e.valid()) return true;
251  }
252  return false;
253  }
255  void addContentTo(librevenge::RVNGPropertyList &propList) const;
257  void addStyleTo(librevenge::RVNGPropertyList &propList) const;
259  friend std::ostream &operator<<(std::ostream &o, TextZone const &zone);
265  bool m_show;
271  std::vector<WPSEntry> m_textEntryList;
276  };
277 
279  explicit WKSChart(Vec2f const &dim=Vec2f());
281  virtual ~WKSChart();
283  void sendChart(WKSContentListenerPtr &listener, librevenge::RVNGSpreadsheetInterface *interface) const;
285  virtual void sendContent(TextZone const &zone, WPSListenerPtr &listener) const=0;
286 
288  void setGridColor(WPSColor const &color)
289  {
290  m_gridColor=color;
291  }
293  Axis &getAxis(int coord);
295  Axis const &getAxis(int coord) const;
296 
298  Legend const &getLegend() const
299  {
300  return m_legend;
301  }
304  {
305  return m_legend;
306  }
307 
309  Serie *getSerie(int id, bool create);
311  std::map<int, Serie> const &getIdSerieMap() const
312  {
313  return m_serieMap;
314  }
316  TextZone *getTextZone(TextZone::Type type, bool create=false);
317 
318 protected:
320  void sendTextZoneContent(TextZone::Type type, WPSListenerPtr listener) const;
321 
322 public:
334  bool m_is3D;
337 
338  // main
339 
343  librevenge::RVNGString m_name;
344 
345  // plot area
346 
351 
352  // legend
353 
356 
361 
362 protected:
366  Axis m_axis[5];
370  std::map<int, Serie> m_serieMap;
372  std::map<TextZone::Type, TextZone> m_textZoneMap;
373 private:
374  explicit WKSChart(WKSChart const &orig) = delete;
375  WKSChart &operator=(WKSChart const &orig) = delete;
376 };
377 
378 #endif
379 /* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */
std::string getCellName(Vec2i const &cellPos, Vec2b const &relative)
returns the cell name corresponding to a cell&#39;s position
Definition: libwps_internal.cpp:838
a cell position
Definition: WKSChart.h:50
std::shared_ptr< WPSListener > WPSListenerPtr
shared pointer to WPSListener
Definition: libwps_internal.h:105
Internal: the subdocument of a WKSChart.
Definition: WKSChart.cpp:48
Vec2< float > Vec2f
Vec2 of float.
Definition: libwps_internal.h:704
a border list
Definition: libwps_internal.h:394
bool operator==(Position &pos) const
operator==
Definition: WKSChart.h:73
a class used to store a chart associated to a spreadsheet ....
Definition: WKSChart.h:45
std::map< int, Serie > m_serieMap
the list of series
Definition: WKSChart.h:370
WPSGraphicStyle m_style
the graphic style
Definition: WKSChart.h:275
Type
the text type
Definition: WKSChart.h:232
librevenge::RVNGString m_sheetName
the cell sheet name
Definition: WKSChart.h:85
Type m_type
the zone type
Definition: WKSChart.h:261
WPSGraphicStyle m_floorStyle
floor
Definition: WKSChart.h:358
bool m_showTitle
show or not the title/subtitle
Definition: WKSChart.h:116
define the font properties
Definition: WPSFont.h:36
librevenge::RVNGString m_name
the chart name
Definition: WKSChart.h:343
Position(Vec2i pos=Vec2i(-1,-1), librevenge::RVNGString const &sheetName="")
constructor
Definition: WKSChart.h:53
Position m_titleRange
the title cell range
Definition: WKSChart.h:118
Legend m_legend
the legend
Definition: WKSChart.h:368
Position m_legendRange
the legend range if defined
Definition: WKSChart.h:220
bool valid(Position const &maxPos) const
return true if the position is valid
Definition: WKSChart.h:64
WPSGraphicStyle m_style
the graphic style
Definition: WKSChart.h:156
librevenge::RVNGString m_legendText
the legend name if defined
Definition: WKSChart.h:222
Vec2f m_scaling
the minimum, maximum scaling(if manual)
Definition: WKSChart.h:107
bool m_dataStacked
a flag to know if the data are stacked or not
Definition: WKSChart.h:328
WPSGraphicStyle m_wallStyle
wall
Definition: WKSChart.h:360
Definition: WKSChart.h:168
Internal: the structures of a WKSChart.
Definition: WKSChart.cpp:44
Legend & getLegend()
returns the legend
Definition: WKSChart.h:303
bool m_showGrid
show or not the grid
Definition: WKSChart.h:109
WPSGraphicStyle m_plotAreaStyle
the ploat area style
Definition: WKSChart.h:350
Definition: WKSChart.h:166
WPSGraphicStyle m_style
the graphic style
Definition: WKSChart.h:124
std::vector< WPSEntry > m_textEntryList
the text entry (or the list of text entry)
Definition: WKSChart.h:271
Position m_cell
the cell position ( or title and subtitle)
Definition: WKSChart.h:269
a axis in a chart
Definition: WKSChart.h:88
a structure used to define a picture style
Definition: WPSGraphicStyle.h:37
Legend()
constructor
Definition: WKSChart.h:130
Vec2i m_pos
the cell column and row
Definition: WKSChart.h:83
WPSGraphicStyle m_style
the chart style
Definition: WKSChart.h:341
bool valid() const
return true if the serie is valid
Definition: WKSChart.h:197
Vec2f m_dimension
the chart dimension in point
Definition: WKSChart.h:324
PointType
the point type
Definition: WKSChart.h:164
WPSFont m_font
the zone format
Definition: WKSChart.h:273
WPSFont m_font
the font
Definition: WKSChart.h:154
std::map< int, Serie > const & getIdSerieMap() const
returns the list of defined series
Definition: WKSChart.h:311
WPSFont m_font
the label font
Definition: WKSChart.h:216
Type m_type
the sequence type
Definition: WKSChart.h:103
bool m_show
true if the zone is visible
Definition: WKSChart.h:265
bool m_autoPosition
automatic position
Definition: WKSChart.h:148
librevenge::RVNGString m_subTitle
the subtitle label
Definition: WKSChart.h:122
bool m_is3D
a flag to know if the graphic is 3D
Definition: WKSChart.h:334
librevenge::RVNGString m_title
the title label
Definition: WKSChart.h:120
int m_relativePosition
the automatic position libwps::LeftBit|...
Definition: WKSChart.h:150
bool valid() const
returns true if the textbox is valid
Definition: WKSChart.h:241
bool is1DStyle() const
return true if the serie style is 1D
Definition: WKSChart.h:176
void setGridColor(WPSColor const &color)
set the grid color
Definition: WKSChart.h:288
ContentType
the text content type
Definition: WKSChart.h:234
Vec2< int > Vec2i
Vec2 of int.
Definition: libwps_internal.h:702
the class to store a color
Definition: libwps_internal.h:280
bool m_useSecondaryY
use or not the secondary y axis
Definition: WKSChart.h:214
Serie::Type m_type
the chart type (if no series)
Definition: WKSChart.h:326
Vec2f m_position
the position in points
Definition: WKSChart.h:152
Definition: WKSChart.h:167
WPSBox2f m_legendPosition
the legend dimension in percent
Definition: WKSChart.h:355
void setSecondaryColor(WPSColor const &color)
set the secondary color
Definition: WKSChart.h:191
bool m_automaticScaling
automatic scaling (or manual)
Definition: WKSChart.h:105
void setPrimaryColor(WPSColor const &color, float opacity=1, bool force1D=false)
set the primary color
Definition: WKSChart.h:181
WPSBox2f m_plotAreaPosition
the plot area dimension in percent
Definition: WKSChart.h:348
WPSColor m_gridColor
the grid color
Definition: WKSChart.h:364
bool m_show
show or not the legend
Definition: WKSChart.h:146
Legend const & getLegend() const
returns the legend
Definition: WKSChart.h:298
Vec2f m_position
the position in the zone
Definition: WKSChart.h:267
std::shared_ptr< WKSContentListener > WKSContentListenerPtr
shared pointer to WKSContentListener
Definition: libwps_internal.h:114
ContentType m_contentType
the content type
Definition: WKSChart.h:263
a legend in a chart
Definition: WKSChart.h:127
std::map< TextZone::Type, TextZone > m_textZoneMap
a map text zone type to text zone
Definition: WKSChart.h:372
bool m_dataVertical
a flag to know if the data are vertical (for bar)
Definition: WKSChart.h:332
WPSGraphicStyle m_style
the graphic style
Definition: WKSChart.h:224
std::ostream & operator<<(std::ostream &o, WPSColor const &c)
Definition: libwps_internal.cpp:401
a serie in a chart
Definition: WKSChart.h:159
a text zone a chart
Definition: WKSChart.h:229
bool m_is3DDeep
a flag to know if real 3D or 2D-extended
Definition: WKSChart.h:336
bool m_showLabel
show or not the label
Definition: WKSChart.h:111
Type
the series type
Definition: WKSChart.h:162
Type
the axis content
Definition: WKSChart.h:91
Type m_type
the type
Definition: WKSChart.h:210
bool operator!=(Position &pos) const
operator!=
Definition: WKSChart.h:78
PointType m_pointType
the point type
Definition: WKSChart.h:226
bool m_dataPercentStacked
a flag to know if the data are percent stacked or not
Definition: WKSChart.h:330
a basic pattern used in a WPSGraphicStyle:
Definition: WPSGraphicStyle.h:88
bool valid() const
return true if the position is valid
Definition: WKSChart.h:59

Generated on Mon May 21 2018 23:09:33 for libwps by doxygen 1.8.12