KChart

KChartWidget.h
1 /*
2  * Copyright (C) 2001-2015 Klaralvdalens Datakonsult AB. All rights reserved.
3  *
4  * This file is part of the KD Chart library.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License as
8  * published by the Free Software Foundation; either version 2 of
9  * the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <https://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef __KCHARTWIDGET_H__
21 #define __KCHARTWIDGET_H__
22 
23 #include "KChartGlobal.h"
24 
25 #include <QWidget>
26 
27 #include "KChartEnums.h"
28 #include "KChartHeaderFooter.h"
29 
30 QT_BEGIN_NAMESPACE
31 template <typename T> class QVector;
32 template <typename T1, typename T2> struct QPair;
33 QT_END_NAMESPACE
34 
35 namespace KChart {
36 
37  // some forward declarations
38  class AbstractDiagram;
39  class Chart;
40  class AbstractCoordinatePlane;
41  class TableModel;
42  class BarDiagram;
43  class LineDiagram;
44  class Plotter;
45  class PieDiagram;
46  class RingDiagram;
47  class PolarDiagram;
48  class Legend;
49  class Position;
50 
51  /**
52  * \class Widget KChartWidget.h
53  * \brief The KChart widget for usage without Interwiev.
54  *
55  * If you want to use KChart with Interview, use KChart::Chart instead.
56  */
57  class KCHART_EXPORT Widget : public QWidget
58  {
59  Q_OBJECT
60 
61  Q_DISABLE_COPY( Widget )
62  KCHART_DECLARE_PRIVATE_BASE_POLYMORPHIC_QWIDGET( Widget )
63 
64  public:
65  /**
66  * Standard Qt-style Constructor
67  *
68  * Creates a new widget with all data initialized empty.
69  *
70  * \param parent the widget parent; passed on to QWidget
71  */
72  explicit Widget( QWidget* parent = nullptr );
73 
74  /** Destructor. */
75  ~Widget();
76  /** Sets the data in the given column using a QVector of qreal for the Y values. */
77  void setDataset( int column, const QVector< qreal > & data, const QString& title = QString() );
78  /** Sets the data in the given column using a QVector of QPairs
79  * of qreal for the (X, Y) values. */
80  void setDataset( int column, const QVector< QPair< qreal, qreal > > & data, const QString& title = QString() );
81  /** Sets the Y value data for a given cell. */
82  void setDataCell( int row, int column, qreal data );
83  /** Sets the data for a given column using an (X, Y) QPair of qreals. */
84  void setDataCell( int row, int column, QPair< qreal, qreal > data );
85  /** Resets all data. */
86  void resetData();
87 
88  public Q_SLOTS:
89  /** Sets all global leadings (borders). */
90  void setGlobalLeading( int left, int top, int right, int bottom );
91  /** Sets the left leading (border). */
92  void setGlobalLeadingLeft( int leading );
93  /** Sets the top leading (border). */
94  void setGlobalLeadingTop( int leading );
95  /** Sets the right leading (border). */
96  void setGlobalLeadingRight( int leading );
97  /** Sets the bottom leading (border). */
98  void setGlobalLeadingBottom( int leading );
99 
100  public:
101  /** Returns the left leading (border). */
102  int globalLeadingLeft() const;
103  /** Returns the top leading (border). */
104  int globalLeadingTop() const;
105  /** Returns the right leading (border). */
106  int globalLeadingRight() const;
107  /** Returns the bottom leading (border). */
108  int globalLeadingBottom() const;
109 
110  /** Returns the first of all headers. */
111  HeaderFooter* firstHeaderFooter();
112  /** Returns a list with all headers. */
113  QList<HeaderFooter*> allHeadersFooters();
114 
115  /** Adds a new header/footer with the given text to the position. */
116  void addHeaderFooter( const QString& text,
117  HeaderFooter::HeaderFooterType type,
118  Position position );
119 
120  /**
121  * Adds the existing header / footer object \a header.
122  * \sa replaceHeaderFooter, takeHeaderFooter
123  */
124  void addHeaderFooter( HeaderFooter* header );
125 
126  /**
127  * Replaces the old header (or footer, resp.), or appends the
128  * new header or footer, it there is none yet.
129  *
130  * @param header The header or footer to be used instead of the old one.
131  * This parameter must not be zero, or the method will do nothing.
132  *
133  * @param oldHeader The header or footer to be removed by the new one. This
134  * header or footer will be deleted automatically. If the parameter is omitted,
135  * the very first header or footer will be replaced. In case, there was no
136  * header and no footer yet, the new header or footer will just be added.
137  *
138  * \note If you want to re-use the old header or footer, call takeHeaderFooter and
139  * addHeaderFooter, instead of using replaceHeaderFooter.
140  *
141  * \sa addHeaderFooter, takeHeaderFooter
142  */
143  void replaceHeaderFooter( HeaderFooter* header,
144  HeaderFooter* oldHeader = nullptr );
145 
146  /** Remove the header (or footer, resp.) from the widget,
147  * without deleting it.
148  * The chart no longer owns the header or footer, so it is
149  * the caller's responsibility to delete the header or footer.
150  *
151  * \sa addHeaderFooter, replaceHeaderFooter
152  */
153  void takeHeaderFooter( HeaderFooter* header );
154 
155  /** Returns the first of all legends. */
156  Legend* legend();
157  /** Returns a list with all legends. */
158  QList<Legend*> allLegends();
159 
160  /** Adds an empty legend on the given position. */
161  void addLegend( Position position );
162  /** Adds a new, already existing, legend. */
163  void addLegend (Legend* legend );
164 
165  void replaceLegend( Legend* legend, Legend* oldLegend = nullptr );
166  void takeLegend( Legend* legend );
167 
168 
169  /** Returns a pointer to the current diagram. */
170  AbstractDiagram* diagram();
171 
172  /** If the current diagram is a BarDiagram, it is returnd; otherwise 0 is returned.
173  * This function provides type-safe casting.
174  */
175  BarDiagram* barDiagram();
176  /** If the current diagram is a LineDiagram, it is returnd; otherwise 0 is returned.
177  * This function provides type-safe casting.
178  */
179  LineDiagram* lineDiagram();
180  /** If the current diagram is a LineDiagram, it is returnd; otherwise 0 is returned.
181  * This function provides type-safe casting.
182  *
183  * \note Do not use lineDiagram for multi-dimensional diagrams, but use plotter instead
184  *
185  * \sa plotter
186  */
187  Plotter* plotter();
188  /** If the current diagram is a Plotter, it is returnd; otherwise 0 is returned.
189  * This function provides type-safe casting.
190  */
191  PieDiagram* pieDiagram();
192  /** If the current diagram is a RingDiagram, it is returnd; otherwise 0 is returned.
193  * This function provides type-safe casting.
194  */
195  RingDiagram* ringDiagram();
196  /** If the current diagram is a PolarDiagram, it is returnd; otherwise 0 is returned.
197  * This function provides type-safe casting.
198  */
199  PolarDiagram* polarDiagram();
200 
201  /** Returns a pointer to the current coordinate plane. */
202  AbstractCoordinatePlane* coordinatePlane();
203 
204 
205  enum ChartType { NoType, Bar, Line, Plot, Pie, Ring, Polar };
206 
207  /** Returns the type of the chart. */
208  ChartType type() const;
209 
210  /** Sub type values, matching the values defines for the respective Diagram classes. */
211  enum SubType { Normal, Stacked, Percent, Rows };
212 
213  /** Returns the sub-type of the chart. */
214  SubType subType() const;
215 
216  public Q_SLOTS:
217  /** Sets the type of the chart. */
218  void setType( ChartType chartType, SubType subType=Normal );
219  /** \brief Sets the type of the chart without changing the main type.
220  *
221  * Make sure to use a sub-type that matches the main type,
222  * so e.g. setting sub-type Rows makes sense for Bar charts only,
223  * and it will be ignored for all other chart types.
224  *
225  * \sa KChart::BarDiagram::BarType, KChart::LineDiagram::LineType
226  * \sa KChart::PieDiagram::PieType, KChart::RingDiagram::RingType
227  * \sa KChart::PolarDiagram::PolarType
228  */
229  void setSubType( SubType subType );
230 
231  private:
232  /** Justifies the model, so that the given rows and columns fit into it. */
233  void justifyModelSize( int rows, int columns );
234  /** Checks whether the given width matches with the one used until now. */
235  bool checkDatasetWidth( int width );
236  };
237 }
238 
239 #endif // KChartWidget_H
Class only listed here to document inheritance of some KChart classes.
PieDiagram defines a common pie diagram.
Legend defines the interface for the legend drawing class.
Definition: KChartLegend.h:52
AbstractDiagram defines the interface for diagram classes.
Plotter defines a diagram type plotting two-dimensional data.
Definition: KChartPlotter.h:35
The KChart widget for usage without Interwiev.
Definition: KChartWidget.h:57
Defines a position, using compass terminology.
Contains KChart macros.
Base class common for all coordinate planes, CartesianCoordinatePlane, PolarCoordinatePlane, TernaryCoordinatePlane.
RingDiagram defines a common ring diagram.
SubType
Sub type values, matching the values defines for the respective Diagram classes.
Definition: KChartWidget.h:211
Definition of global enums.
BarDiagram defines a common bar diagram.
A header or footer displaying text above or below charts.
LineDiagram defines a common line diagram.
Global namespace.
PolarDiagram defines a common polar diagram.
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Sat Apr 10 2021 22:36:40 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.