QtiPlot  0.9.8.2
PieCurve.h
Go to the documentation of this file.
1 /***************************************************************************
2  File : PieCurve.h
3  Project : QtiPlot
4  --------------------------------------------------------------------
5  Copyright : (C) 2004 - 2010 by Ion Vasilief
6  Email (use @ for *) : ion_vasilief*yahoo.fr
7  Description : Pie plot class
8 
9  ***************************************************************************/
10 
11 /***************************************************************************
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * *
18  * This program is distributed in the hope that it will be useful, *
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
21  * GNU General Public License for more details. *
22  * *
23  * You should have received a copy of the GNU General Public License *
24  * along with this program; if not, write to the Free Software *
25  * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
26  * Boston, MA 02110-1301 USA *
27  * *
28  ***************************************************************************/
29 #include <qwt_plot.h>
30 #include "PlotCurve.h"
31 #include "LegendWidget.h"
32 
33 class PieLabel;
34 
36 class PieCurve: public DataCurve
37 {
38 public:
39  PieCurve(Table *t, const QString& name, int startRow, int endRow);
40  void clone(PieCurve* c);
41 
42  double viewAngle(){return d_view_angle;};
43  void setViewAngle(double a){d_view_angle = a;};
44 
45  double thickness(){return d_thickness;};
46  void setThickness(double t){d_thickness = t;};
47 
50 
53 
54  double startAzimuth(){return d_start_azimuth;};
55  void setStartAzimuth(double angle){d_start_azimuth = angle;};
56 
57  double labelsEdgeDistance(){return d_edge_dist;};
58  void setLabelsEdgeDistance(double d){d_edge_dist = d;};
59 
61  void setLabelsAutoFormat(bool on){d_auto_labeling = on;};
62 
63  bool labelsValuesFormat(){return d_values;};
64  void setLabelValuesFormat(bool on){d_values = on;};
65 
68 
69  bool labelCategories(){return d_categories;};
70  void setLabelCategories(bool on){d_categories = on;};
71 
74 
75  QColor color(int i) const;
76 
77  int radius(){return d_pie_ray;};
78  void setRadius(int size){d_pie_ray = size;};
79 
80  Qt::BrushStyle pattern(){return QwtPlotCurve::brush().style();};
81  void setBrushStyle(const Qt::BrushStyle& style);
82 
83  void setFirstColor(int index){d_first_color = index;};
84  int firstColor(){return d_first_color;};
85 
86  void loadData();
87  void initLabels();
88  void clearLabels();
89 
90  PieLabel* addLabel(PieLabel *l, bool clone = false);
91 
92  QList <PieLabel *> labelsList(){return d_texts_list;};
93 
94 private:
95  void draw(QPainter *painter,const QwtScaleMap &xMap,
96  const QwtScaleMap &yMap, int from, int to) const;
97  void drawSlices(QPainter *painter, const QwtScaleMap &xMap,
98  const QwtScaleMap &yMap, int from, int to) const;
99  void drawDisk(QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap) const;
100 
104  double d_view_angle;
105  double d_thickness;
107  double d_edge_dist;
110  bool d_values;
114  QList <PieLabel *> d_texts_list;
116  QVarLengthArray<int> d_table_rows;
117 };
118 
119 class PieLabel: public LegendWidget
120 {
121  Q_OBJECT
122 
123 public:
124  PieLabel(Graph *, PieCurve *pie = 0);
125 
126  QString customText();
127  void setCustomText(const QString& s){d_custom_text = s;};
128 
129  void setPieCurve(PieCurve *pie){d_pie_curve = pie;};
130 
131  QString saveToString();
132  static void restore(Graph *g, const QStringList& lst);
133 
134 private:
135  void closeEvent(QCloseEvent* e);
136 
138  QString d_custom_text;
139 };