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
40namespace WKSChartInternal
41{
42class SubDocument;
43}
46{
48public:
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 , m_sheetId(-1)
57 {
58 }
59
60 bool valid() const
61 {
62 return m_pos[0]>=0 && m_pos[1]>=0 && (!m_sheetName.empty() || m_sheetId>=0);
63 }
64
65 bool valid(Position const &maxPos) const
66 {
67 return valid() && maxPos.valid() && maxPos.m_pos[0]>=m_pos[0] && maxPos.m_pos[1]>=m_pos[1];
68 }
69
70 librevenge::RVNGString getCellName() const;
72 friend std::ostream &operator<<(std::ostream &o, Position const &pos);
74 bool operator==(Position const &pos) const
75 {
76 return m_pos==pos.m_pos && m_sheetName==pos.m_sheetName && m_sheetId==pos.m_sheetId;
77 }
78
79 bool operator!=(Position const &pos) const
80 {
81 return !(operator==(pos));
82 }
83
86 librevenge::RVNGString m_sheetName;
93 };
94
95 struct Axis
96 {
100 Axis();
102 ~Axis();
104 void addContentTo(int coord, librevenge::RVNGPropertyList &propList) const;
106 void addStyleTo(librevenge::RVNGPropertyList &propList) const;
108 friend std::ostream &operator<<(std::ostream &o, Axis const &axis);
121
127 librevenge::RVNGString m_title;
129 librevenge::RVNGString m_subTitle;
132 };
133
134 struct Legend
135 {
138 : m_show(false)
139 , m_autoPosition(true)
140 , m_relativePosition(WPSBorder::RightBit)
141 , m_position(0,0)
142 , m_font()
143 , m_style()
144 {
145 }
146
147 void addContentTo(librevenge::RVNGPropertyList &propList) const;
149 void addStyleTo(librevenge::RVNGPropertyList &propList) const;
151 friend std::ostream &operator<<(std::ostream &o, Legend const &legend);
153 bool m_show;
164 };
165
166 struct Serie
167 {
178
179 Serie();
180 Serie(Serie const &)=default;
181 Serie(Serie &&)=default;
182 Serie &operator=(Serie const &)=default;
183 Serie &operator=(Serie &&)=default;
185 virtual ~Serie();
187 bool is1DStyle() const
188 {
190 }
191
192 void setPrimaryColor(WPSColor const &color, float opacity = 1, bool force1D=false)
193 {
194 if (force1D || is1DStyle())
195 m_style.m_lineColor=color;
196 else
197 m_style.setSurfaceColor(color, opacity);
198 }
199
200 void setPrimaryPattern(WPSGraphicStyle::Pattern const &pattern, bool force1D=false);
202 void setSecondaryColor(WPSColor const &color)
203 {
204 if (!is1DStyle())
205 m_style.m_lineColor=color;
206 }
207
208 bool valid() const
209 {
210 return m_ranges[0].valid(m_ranges[0]);
211 }
212
213 void addContentTo(librevenge::RVNGPropertyList &propList) const;
215 void addStyleTo(librevenge::RVNGPropertyList &propList) const;
217 static std::string getSerieTypeName(Type type);
219 friend std::ostream &operator<<(std::ostream &o, Serie const &series);
233 librevenge::RVNGString m_legendText;
238 };
239
240 struct TextZone
241 {
246
248 explicit TextZone(Type type);
249 TextZone(TextZone const &)=default;
251 ~TextZone();
253 bool valid() const
254 {
255 if (!m_show) return false;
257 return m_cell.valid();
259 return false;
260 for (auto const &e : m_textEntryList)
261 {
262 if (e.valid()) return true;
263 }
264 return false;
265 }
266
267 void addContentTo(librevenge::RVNGPropertyList &propList) const;
269 void addStyleTo(librevenge::RVNGPropertyList &propList) const;
271 friend std::ostream &operator<<(std::ostream &o, TextZone const &zone);
277 bool m_show;
283 std::vector<WPSEntry> m_textEntryList;
288 };
289
291 explicit WKSChart(Vec2f const &dim=Vec2f());
293 virtual ~WKSChart();
295 void sendChart(WKSContentListenerPtr &listener, librevenge::RVNGSpreadsheetInterface *interface) const;
297 virtual void sendContent(TextZone const &zone, WPSListenerPtr &listener) const=0;
298
300 void setGridColor(WPSColor const &color)
301 {
302 m_gridColor=color;
303 }
304
305 Axis &getAxis(int coord);
307 Axis const &getAxis(int coord) const;
308
310 Legend const &getLegend() const
311 {
312 return m_legend;
313 }
314
316 {
317 return m_legend;
318 }
319
321 Serie *getSerie(int id, bool create);
323 std::map<int, Serie> const &getIdSerieMap() const
324 {
325 return m_serieMap;
326 }
327
328 TextZone *getTextZone(TextZone::Type type, bool create=false);
329
330protected:
332 void sendTextZoneContent(TextZone::Type type, WPSListenerPtr listener) const;
333
334public:
346 bool m_is3D;
349
350 // main
351
355 librevenge::RVNGString m_name;
356
357 // plot area
358
363
364 // legend
365
368
373
374protected:
382 std::map<int, Serie> m_serieMap;
384 std::map<TextZone::Type, TextZone> m_textZoneMap;
385private:
386 explicit WKSChart(WKSChart const &orig) = delete;
387 WKSChart &operator=(WKSChart const &orig) = delete;
388};
389
390#endif
391/* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */
Internal: the subdocument of a WKSChart.
Definition WKSChart.cpp:49
Vec2f m_dimension
the chart dimension in point
Definition WKSChart.h:336
Serie::Type m_type
the chart type (if no series)
Definition WKSChart.h:338
librevenge::RVNGString m_name
the chart name
Definition WKSChart.h:355
bool m_dataStacked
a flag to know if the data are stacked or not
Definition WKSChart.h:340
Legend m_legend
the legend
Definition WKSChart.h:380
std::map< TextZone::Type, TextZone > m_textZoneMap
a map text zone type to text zone
Definition WKSChart.h:384
std::map< int, Serie > m_serieMap
the list of series
Definition WKSChart.h:382
std::map< int, Serie > const & getIdSerieMap() const
returns the list of defined series
Definition WKSChart.h:323
WPSGraphicStyle m_style
the chart style
Definition WKSChart.h:353
virtual void sendContent(TextZone const &zone, WPSListenerPtr &listener) const =0
send the zone content (called when the zone is of text type)
WPSGraphicStyle m_plotAreaStyle
the ploat area style
Definition WKSChart.h:362
WPSBox2f m_legendPosition
the legend dimension in percent
Definition WKSChart.h:367
void sendTextZoneContent(TextZone::Type type, WPSListenerPtr listener) const
sends a textzone content
Definition WKSChart.cpp:176
Axis & getAxis(int coord)
return an axis (corresponding to a coord)
Definition WKSChart.cpp:136
WKSChart(WKSChart const &orig)=delete
virtual ~WKSChart()
the destructor
Definition WKSChart.cpp:132
Axis m_axis[5]
the x,y,y-second,z and a bad axis
Definition WKSChart.h:378
bool m_dataPercentStacked
a flag to know if the data are percent stacked or not
Definition WKSChart.h:342
void sendChart(WKSContentListenerPtr &listener, librevenge::RVNGSpreadsheetInterface *interface) const
send the chart to the listener
Definition WKSChart.cpp:186
bool m_is3DDeep
a flag to know if real 3D or 2D-extended
Definition WKSChart.h:348
WKSChart(Vec2f const &dim=Vec2f())
the constructor
Definition WKSChart.cpp:104
bool m_dataVertical
a flag to know if the data are vertical (for bar)
Definition WKSChart.h:344
WPSGraphicStyle m_wallStyle
wall
Definition WKSChart.h:372
void setGridColor(WPSColor const &color)
set the grid color
Definition WKSChart.h:300
WKSChart & operator=(WKSChart const &orig)=delete
WPSColor m_gridColor
the grid color
Definition WKSChart.h:376
Legend const & getLegend() const
returns the legend
Definition WKSChart.h:310
Legend & getLegend()
returns the legend
Definition WKSChart.h:315
WPSBox2f m_plotAreaPosition
the plot area dimension in percent
Definition WKSChart.h:360
WPSGraphicStyle m_floorStyle
floor
Definition WKSChart.h:370
bool m_is3D
a flag to know if the graphic is 3D
Definition WKSChart.h:346
Serie * getSerie(int id, bool create)
return a serie
Definition WKSChart.cpp:156
TextZone * getTextZone(TextZone::Type type, bool create=false)
returns a textzone content
Definition WKSChart.cpp:166
define the font properties
Definition WPSFont.h:37
a structure used to define a picture style
Definition WPSGraphicStyle.h:38
std::shared_ptr< WKSContentListener > WKSContentListenerPtr
shared pointer to WKSContentListener
Definition libwps_internal.h:114
Vec2< int > Vec2i
Vec2 of int.
Definition libwps_internal.h:702
Vec2< float > Vec2f
Vec2 of float.
Definition libwps_internal.h:704
WPSBox2< float > WPSBox2f
WPSBox2 of float.
Definition libwps_internal.h:890
std::shared_ptr< WPSListener > WPSListenerPtr
shared pointer to WPSListener
Definition libwps_internal.h:105
Internal: the structures of a WKSChart.
Definition WKSChart.cpp:45
a axis in a chart
Definition WKSChart.h:96
librevenge::RVNGString m_title
the title label
Definition WKSChart.h:127
bool m_showTitle
show or not the title/subtitle
Definition WKSChart.h:123
Position m_labelRanges[2]
the label range if defined
Definition WKSChart.h:120
WPSGraphicStyle m_style
the graphic style
Definition WKSChart.h:131
void addContentTo(int coord, librevenge::RVNGPropertyList &propList) const
add content to the propList
Definition WKSChart.cpp:398
void addStyleTo(librevenge::RVNGPropertyList &propList) const
add style to the propList
Definition WKSChart.cpp:457
friend std::ostream & operator<<(std::ostream &o, Axis const &axis)
operator<<
Definition WKSChart.cpp:472
~Axis()
destructor
Definition WKSChart.cpp:394
Vec2f m_scaling
the minimum, maximum scaling(if manual)
Definition WKSChart.h:114
bool m_showLabel
show or not the label
Definition WKSChart.h:118
Axis()
constructor
Definition WKSChart.cpp:379
Type m_type
the sequence type
Definition WKSChart.h:110
bool m_showGrid
show or not the grid
Definition WKSChart.h:116
librevenge::RVNGString m_subTitle
the subtitle label
Definition WKSChart.h:129
Type
the axis content
Definition WKSChart.h:98
@ A_Sequence_Skip_Empty
Definition WKSChart.h:98
@ A_None
Definition WKSChart.h:98
@ A_Numeric
Definition WKSChart.h:98
@ A_Sequence
Definition WKSChart.h:98
@ A_Logarithmic
Definition WKSChart.h:98
bool m_automaticScaling
automatic scaling (or manual)
Definition WKSChart.h:112
Position m_titleRange
the title cell range
Definition WKSChart.h:125
a legend in a chart
Definition WKSChart.h:135
int m_relativePosition
the automatic position libwps::LeftBit|...
Definition WKSChart.h:157
Legend()
constructor
Definition WKSChart.h:137
bool m_show
show or not the legend
Definition WKSChart.h:153
WPSGraphicStyle m_style
the graphic style
Definition WKSChart.h:163
WPSFont m_font
the font
Definition WKSChart.h:161
Vec2f m_position
the position in points
Definition WKSChart.h:159
friend std::ostream & operator<<(std::ostream &o, Legend const &legend)
operator<<
Definition WKSChart.cpp:547
bool m_autoPosition
automatic position
Definition WKSChart.h:155
void addContentTo(librevenge::RVNGPropertyList &propList) const
add content to the propList
Definition WKSChart.cpp:517
void addStyleTo(librevenge::RVNGPropertyList &propList) const
add style to the propList
Definition WKSChart.cpp:540
a cell position
Definition WKSChart.h:51
bool valid(Position const &maxPos) const
return true if the position is valid
Definition WKSChart.h:65
bool operator!=(Position const &pos) const
operator!=
Definition WKSChart.h:79
bool operator==(Position const &pos) const
operator==
Definition WKSChart.h:74
Position(Vec2i pos=Vec2i(-1,-1), librevenge::RVNGString const &sheetName="")
constructor
Definition WKSChart.h:53
librevenge::RVNGString getCellName() const
return the cell name
Definition WKSChart.cpp:354
Vec2i m_pos
the cell column and row
Definition WKSChart.h:84
int m_sheetId
the cell sheet id
Definition WKSChart.h:92
friend std::ostream & operator<<(std::ostream &o, Position const &pos)
operator<<
Definition WKSChart.cpp:368
bool valid() const
return true if the position is valid
Definition WKSChart.h:60
librevenge::RVNGString m_sheetName
the cell sheet name
Definition WKSChart.h:86
a serie in a chart
Definition WKSChart.h:167
friend std::ostream & operator<<(std::ostream &o, Serie const &series)
operator<<
Definition WKSChart.cpp:718
bool m_useSecondaryY
use or not the secondary y axis
Definition WKSChart.h:225
bool valid() const
return true if the serie is valid
Definition WKSChart.h:208
void addStyleTo(librevenge::RVNGPropertyList &propList) const
add style to the propList
Definition WKSChart.cpp:683
PointType
the point type
Definition WKSChart.h:172
@ P_Plus
Definition WKSChart.h:175
@ P_None
Definition WKSChart.h:173
@ P_Arrow_Up
Definition WKSChart.h:174
@ P_Vertical_Bar
Definition WKSChart.h:176
@ P_Arrow_Right
Definition WKSChart.h:174
@ P_Horizontal_Bar
Definition WKSChart.h:176
@ P_Star
Definition WKSChart.h:175
@ P_Arrow_Down
Definition WKSChart.h:173
@ P_Automatic
Definition WKSChart.h:173
@ P_X
Definition WKSChart.h:175
@ P_Square
Definition WKSChart.h:173
@ P_Asterisk
Definition WKSChart.h:175
@ P_Diamond
Definition WKSChart.h:173
@ P_Hourglass
Definition WKSChart.h:174
@ P_Circle
Definition WKSChart.h:175
@ P_Bow_Tie
Definition WKSChart.h:174
@ P_Arrow_Left
Definition WKSChart.h:174
Position m_legendRange
the legend range if defined
Definition WKSChart.h:231
Serie & operator=(Serie const &)=default
Serie & operator=(Serie &&)=default
librevenge::RVNGString m_legendText
the legend name if defined
Definition WKSChart.h:233
void setPrimaryColor(WPSColor const &color, float opacity=1, bool force1D=false)
set the primary color
Definition WKSChart.h:192
void setPrimaryPattern(WPSGraphicStyle::Pattern const &pattern, bool force1D=false)
set the primary pattern
Definition WKSChart.cpp:707
PointType m_pointType
the point type
Definition WKSChart.h:237
Type
the series type
Definition WKSChart.h:169
@ S_Column
Definition WKSChart.h:169
@ S_Circle
Definition WKSChart.h:169
@ S_Bar
Definition WKSChart.h:169
@ S_Area
Definition WKSChart.h:169
@ S_Ring
Definition WKSChart.h:169
@ S_Scatter
Definition WKSChart.h:169
@ S_Gantt
Definition WKSChart.h:169
@ S_Surface
Definition WKSChart.h:169
@ S_Line
Definition WKSChart.h:169
@ S_Stock
Definition WKSChart.h:169
@ S_Bubble
Definition WKSChart.h:169
@ S_Radar
Definition WKSChart.h:169
void setSecondaryColor(WPSColor const &color)
set the secondary color
Definition WKSChart.h:202
Serie()
constructor
Definition WKSChart.cpp:577
static std::string getSerieTypeName(Type type)
returns a string corresponding to a series type
Definition WKSChart.cpp:594
Serie(Serie const &)=default
bool is1DStyle() const
return true if the serie style is 1D
Definition WKSChart.h:187
Position m_ranges[2]
the data range
Definition WKSChart.h:223
virtual ~Serie()
destructor
Definition WKSChart.cpp:590
void addContentTo(librevenge::RVNGPropertyList &propList) const
add content to the propList
Definition WKSChart.cpp:630
WPSFont m_font
the label font
Definition WKSChart.h:227
Type m_type
the type
Definition WKSChart.h:221
Serie(Serie &&)=default
WPSGraphicStyle m_style
the graphic style
Definition WKSChart.h:235
Position m_labelRanges[2]
the label ranges if defined(unused)
Definition WKSChart.h:229
a text zone a chart
Definition WKSChart.h:241
void addStyleTo(librevenge::RVNGPropertyList &propList) const
add to the propList
Definition WKSChart.cpp:852
ContentType
the text content type
Definition WKSChart.h:245
@ C_Cell
Definition WKSChart.h:245
@ C_Text
Definition WKSChart.h:245
WPSFont m_font
the zone format
Definition WKSChart.h:285
bool m_show
true if the zone is visible
Definition WKSChart.h:277
friend std::ostream & operator<<(std::ostream &o, TextZone const &zone)
operator<<
Definition WKSChart.cpp:858
Type m_type
the zone type
Definition WKSChart.h:273
TextZone(TextZone const &)=default
ContentType m_contentType
the content type
Definition WKSChart.h:275
Position m_cell
the cell position ( or title and subtitle)
Definition WKSChart.h:281
void addContentTo(librevenge::RVNGPropertyList &propList) const
add content to the propList
Definition WKSChart.cpp:812
Type
the text type
Definition WKSChart.h:243
@ T_Title
Definition WKSChart.h:243
@ T_Footer
Definition WKSChart.h:243
@ T_SubTitle
Definition WKSChart.h:243
~TextZone()
destructor
Definition WKSChart.cpp:808
TextZone(Type type)
constructor
Definition WKSChart.cpp:795
WPSGraphicStyle m_style
the graphic style
Definition WKSChart.h:287
bool valid() const
returns true if the textbox is valid
Definition WKSChart.h:253
std::vector< WPSEntry > m_textEntryList
the text entry (or the list of text entry)
Definition WKSChart.h:283
Vec2f m_position
the position in the zone
Definition WKSChart.h:279
a border list
Definition libwps_internal.h:395
the class to store a color
Definition libwps_internal.h:281
a basic pattern used in a WPSGraphicStyle:
Definition WPSGraphicStyle.h:89

Generated on Sat Jul 19 2025 05:24:39 for libwps by doxygen 1.14.0