summaryrefslogtreecommitdiffstats
path: root/libkdeedu/kdeeduplot/kplotwidget.h
diff options
context:
space:
mode:
Diffstat (limited to 'libkdeedu/kdeeduplot/kplotwidget.h')
-rw-r--r--libkdeedu/kdeeduplot/kplotwidget.h263
1 files changed, 263 insertions, 0 deletions
diff --git a/libkdeedu/kdeeduplot/kplotwidget.h b/libkdeedu/kdeeduplot/kplotwidget.h
new file mode 100644
index 00000000..b24e31bf
--- /dev/null
+++ b/libkdeedu/kdeeduplot/kplotwidget.h
@@ -0,0 +1,263 @@
+/***************************************************************************
+ kplotwidget.h - A generic data-plotting widget
+ -------------------
+ begin : Sun 18 May 2003
+ copyright : (C) 2003 by Jason Harris
+ email : kstars@30doradus.org
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef _KPLOTWIDGET_H_
+#define _KPLOTWIDGET_H_
+
+#include <qwidget.h>
+#include "kplotobject.h"
+#include "kplotaxis.h"
+
+#define BIGTICKSIZE 10
+#define SMALLTICKSIZE 4
+#define XPADDING 20
+#define YPADDING 20
+
+class QColor;
+class QPixmap;
+
+/**@class KPlotWidget
+ *@short Genric data plotting widget.
+ *@author Jason Harris
+ *@version 1.1
+ *Widget for drawing plots. Includes adjustable axes (KPlotAxis) with
+ *tickmarks and labels and a list of KPlotObjects to be drawn.
+ */
+
+class KDE_EXPORT KPlotWidget : public QWidget {
+ Q_OBJECT
+public:
+ /**@short Constructor. Sets the primary x and y limits in data units.
+ *@param x1 the minimum X value in data units
+ *@param x2 the maximum X value in data units
+ *@param y1 the minimum Y value in data units
+ *@param y2 the maximum Y value in data units
+ *@param parent the parent widget
+ *@param name name label for the KPlotWidget
+ */
+ KPlotWidget( double x1=0.0, double x2=1.0, double y1=0.0, double y2=1.0, QWidget *parent=0, const char* name=0 );
+
+ /**Destructor (empty)
+ */
+ virtual ~KPlotWidget();
+
+ /**@short Determine the placement of major and minor tickmarks,
+ *based on the current Limit settings
+ */
+ virtual void updateTickmarks();
+
+ /**@short Reset the data limits.
+ *@param x1 the minimum X value in data units
+ *@param x2 the maximum X value in data units
+ *@param y1 the minimum Y value in data units
+ *@param y2 the maximum Y value in data units
+ */
+ virtual void setLimits( double x1, double x2, double y1, double y2 );
+
+ /**@return the minimum X value in data units*/
+ virtual double x() const { return DataRect.x(); }
+
+ /**@return the maximum X value in data units*/
+ virtual double x2() const { return DataRect.x2(); }
+
+ /**@return the minimum Y value in data units*/
+ virtual double y() const { return DataRect.y(); }
+
+ /**@return the maximum Y value in data units*/
+ virtual double y2() const { return DataRect.y2(); }
+
+ /**@return the width in data units*/
+ virtual double dataWidth() const { return DataRect.width(); }
+
+ /**@return the height in data units*/
+ virtual double dataHeight() const { return DataRect.height(); }
+
+ /**@short Add an item to the list of KPlotObjects to be plotted.
+ *@param o pointer to the KPlotObject to be added
+ */
+ virtual void addObject( KPlotObject *o ) { ObjectList.append( o ); }
+
+ /**@short Remove all items from the list of KPlotObjects
+ */
+ virtual void clearObjectList() { ObjectList.clear(); update(); }
+
+ /**@short replace an item in the KPlotObject list.
+ *@param i the index of th item to be replaced
+ *@param o pointer to the replacement KPlotObject
+ */
+ virtual void replaceObject( int i, KPlotObject *o ) { ObjectList.replace( i, o ); }
+
+ /**@return the number of KPlotObjects in the list
+ */
+ virtual int objectCount() const { return ObjectList.count(); }
+
+ /**@return a pointer to a specific KPlotObject in the list
+ *@param i the index of the desired KPlotObject
+ */
+ virtual KPlotObject *object( int i ) { return ObjectList.at(i); }
+
+ /**@return the background color */
+ virtual QColor bgColor() const { return cBackground; }
+
+ /**@return the foreground color */
+ virtual QColor fgColor() const { return cForeground; }
+
+ /**@return the grid color */
+ virtual QColor gridColor() const { return cGrid; }
+
+ /**@short set the background color
+ *@param bg the new background color
+ */
+ virtual void setBGColor( const QColor &bg ) { cBackground = bg; setBackgroundColor( bg ); }
+
+ /**@short set the foreground color
+ *@param fg the new foreground color
+ */
+ virtual void setFGColor( const QColor &fg ) { cForeground = fg; }
+
+ /**@short set the grid color
+ *@param gc the new grid color
+ */
+ virtual void setGridColor( const QColor &gc ) { cGrid = gc; }
+
+ /**@short toggle whether plot axes are drawn.
+ *@param show if true, axes will be drawn.
+ *The axes are just a box outline around the plot.
+ */
+ virtual void setShowAxes( bool show ) { BottomAxis.setVisible(show); LeftAxis.setVisible(show); }
+ /**@short toggle whether tick marks are drawn along the axes.
+ *@param show if true, tick marks will be drawn.
+ */
+ virtual void setShowTickMarks( bool show ) { ShowTickMarks = show; }
+ /**@short toggle whether tick labels are drawn at major tickmarks.
+ *@param show if true, tick labels will be drawn.
+ */
+ virtual void setShowTickLabels( bool show ) { ShowTickLabels = show; }
+ /**@short toggle whether grid lines are drawn at major tickmarks.
+ *@param show if true, grid lines will be drawn.
+ */
+ virtual void setShowGrid( bool show ) { ShowGrid = show; }
+
+ /**@short (Deprecated) Sets the X-axis label
+ *@param xlabel a short string describing the data plotted on the x-axis.
+ *Set the label to an empty string to omit the axis label.
+ *This function is deprecated, set the label property in the BottomAxis directly.
+ */
+ virtual void setXAxisLabel( QString xlabel ) { BottomAxis.setLabel(xlabel); }
+ /**@short (Deprecated) Sets the Y-axis label
+ *@param ylabel a short string describing the data plotted on the y-axis.
+ *Set the label to an empty string to omit the axis label.
+ *This function is deprecated, set the label property in the LeftAxis directly.
+ */
+ virtual void setYAxisLabel( QString ylabel ) { LeftAxis.setLabel(ylabel); }
+
+ /**@returns the number of pixels to the left of the plot area. Padding values
+ *are set to -1 by default; if unchanged, this function will try to guess
+ *a good value, based on whether ticklabels and/or axis labels are to be drawn.
+ */
+ virtual int leftPadding() const;
+ /**@returns the number of pixels to the right of the plot area.
+ *Padding values are set to -1 by default; if unchanged, this function will try to guess
+ *a good value, based on whether ticklabels and/or axis labels are to be drawn.
+ */
+ virtual int rightPadding() const;
+ /**@returns the number of pixels above the plot area.
+ *Padding values are set to -1 by default; if unchanged, this function will try to guess
+ *a good value, based on whether ticklabels and/or axis labels are to be drawn.
+ */
+ virtual int topPadding() const;
+ /**@returns the number of pixels below the plot area.
+ *Padding values are set to -1 by default; if unchanged, this function will try to guess
+ *a good value, based on whether ticklabels and/or axis labels are to be drawn.
+ */
+ virtual int bottomPadding() const;
+
+ /**@short set the number of pixels to the left of the plot area.
+ *Set this to -1 to revert to automatic determination of padding values.
+ */
+ virtual void setLeftPadding( int pad ) { LeftPadding = pad; }
+ /**@short set the number of pixels to the right of the plot area.
+ *Set this to -1 to revert to automatic determination of padding values.
+ */
+ virtual void setRightPadding( int pad ) { RightPadding = pad; }
+ /**@short set the number of pixels above the plot area.
+ *Set this to -1 to revert to automatic determination of padding values.
+ */
+ virtual void setTopPadding( int pad ) { TopPadding = pad; }
+ /**@short set the number of pixels below the plot area.
+ *Set this to -1 to revert to automatic determination of padding values.
+ */
+ virtual void setBottomPadding( int pad ) { BottomPadding = pad; }
+
+ /**@short revert all four padding values to be automatically determined. */
+ virtual void setDefaultPadding() { LeftPadding = -1; RightPadding = -1; TopPadding = -1; BottomPadding = -1; }
+
+ /**@short The bottom X axis. */
+ KPlotAxis BottomAxis;
+ /**@short The left Y axis. */
+ KPlotAxis LeftAxis;
+
+protected:
+ /**@short the paint event handler, executed when update() or repaint() is called.
+ */
+ virtual void paintEvent( QPaintEvent* /* e */ );
+
+ /**@short the resize event handler, called when the widget is resized.
+ */
+ virtual void resizeEvent( QResizeEvent* /* e */ );
+
+ /**@short draws all of the objects onto the widget. Internal use only; one should simply call update()
+ *to draw the widget with axes and all objects.
+ *@param p pointer to the painter on which we are drawing
+ */
+ virtual void drawObjects( QPainter *p );
+
+ /**@short draws the plot axes and axis labels. Internal use only; one should simply call update()
+ *to draw the widget with axes and all objects.
+ *@param p pointer to the painter on which we are drawing
+ */
+ virtual void drawBox( QPainter *p );
+
+ /**@short modulus function for double variables.
+ *For example, dmod( 17.0, 7.0 ) returns 3.0
+ *@return the remainder after dividing b into a.
+ */
+ double dmod( double a, double b );
+
+ //The distance between major tickmarks in data units
+ double dXtick, dYtick;
+ //The number of major and minor tickmarks to be plotted in X and Y
+ int nmajX, nminX, nmajY, nminY;
+
+ //Limits of the plot area in pixel units
+ QRect PixRect;
+ //Limits of the plot area in data units
+ DRect DataRect;
+ //List of KPlotObjects
+ QPtrList<KPlotObject> ObjectList;
+
+ //Colors
+ QColor cBackground, cForeground, cGrid;
+ //draw options
+ bool ShowTickMarks, ShowTickLabels, ShowGrid;
+ //padding
+ int LeftPadding, RightPadding, TopPadding, BottomPadding;
+
+ QPixmap *buffer;
+};
+
+#endif