|
|
//*************************************************************************** /* * TOra - An Oracle Toolkit for DBA's and developers * Copyright (C) 2003 Quest Software, Inc * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; only version 2 of * the License is valid for this program. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * As a special exception, you have permission to link this program * with the Oracle Client libraries and distribute executables, as long * as you follow the requirements of the GNU GPL in regard to all of the * software in the executable aside from Oracle client libraries. * * Specifically you are not permitted to link this program with the * Qt/UNIX, Qt/Windows or Qt Non Commercial products of TrollTech. * And you are not permitted to distribute binaries compiled against * these libraries without written consent from Quest Software, Inc. * Observe that this does not disallow linking to the Qt Free Edition. * * All trademarks belong to their respective owners. * ****************************************************************************/ #ifndef TOPIECHART_H #define TOPIECHART_H #include <list> #include <qwidget.h> class QPopupMenu; /** A widget that displays a piechart. */ class toPieChart : public QWidget { Q_OBJECT std::list<double> Values; std::list<QString> Labels; QString Postfix; bool Legend; bool DisplayPercent; QString Title; QPopupMenu *Menu; QRect ChartRect; std::list<int> Angels; protected: virtual void mouseDoubleClickEvent(QMouseEvent *e); virtual void mousePressEvent(QMouseEvent *e); public: /** Create a new piechart. * @param parent Parent widget. * @param name Name of widget. * @param f Widget flags. */ toPieChart(QWidget *parent=NULL,const char *name=NULL,WFlags f=0); /** Create a copy of a piechart. * @param pie Pie chart to copy. * @param parent Parent widget. * @param name Name of widget. * @param f Widget flags. */ toPieChart(toPieChart *pie,QWidget *parent=NULL,const char *name=NULL,WFlags f=0); /** Set the postfix text to append the current values when they are displayed in the * pie. * @param post Postfix string, no space will be added after the value before the string * so if you want the space you need to specify it first in this string. */ void setPostfix(const QString &post) { Postfix=post; update(); } /** Get the postfix string. * @return Current postfix string. */ const QString &postfix(void) const { return Postfix; } /** Set title of the chart. Set to empty string to not display title. * @param title Title of chart. */ void setTitle(const QString &title=QString::null) { Title=title; update(); } /** Get title of chart. * @return Title of chart. */ const QString &title(void) { return Title; } /** Display piecharts in percent instead of actual values * @param pct Wether or not to display percent only. */ void setDisplayPercent(bool pct) { DisplayPercent=pct; update(); } /** Check if only percent is displayed * @return True if only percent is displayed. */ bool displayPercent(void) const { return DisplayPercent; } /** Specify if legend should be displayed to the right of the graph, default is on. * @param on Whether to display graph or not. */ void showLegend(bool on) { Legend=on; update(); } /** Check if legend is displayed or not. * @return If legend is displayed or not. */ bool legend(void) const { return Legend; } /** Set value list of piechart. * @param values List of values to display. * @param labels List of labels, if label is empty it will not appear in legend. */ void setValues(std::list<double> &values,std::list<QString> &labels); /** Add a value to the piechart. * @param value New value to add. * @param label Label of this new value. */ void addValue(double value,const QString &label) { Values.insert(Values.end(),value); Labels.insert(Labels.end(),label); update(); } /** Get list of values. * @return Values in piechart. */ std::list<double> &values(void) { return Values; } /** Get labels of piechart. * @return List of labels. */ std::list<QString> &labels(void) { return Labels; } /** Find the label if any of a point in the chart. */ QString findLabel(QPoint p); /** Get rectangle that the chart is contained in. */ QRect chartRectangle() { return ChartRect; } signals: void newValues(std::list<double> &values,std::list<QString> &labels); public slots: /** Print the chart */ void editPrint(void); /** Open in new window */ void openCopy(void); protected: /** Paint chart in a given rectangle. */ virtual void paintChart(QPainter *p,QRect rect); /** Reimplemented for internal reasons. */ virtual void paintEvent(QPaintEvent *e); }; #endif