diff options
Diffstat (limited to 'libkdeedu/kdeeduplot/kplotobject.h')
-rw-r--r-- | libkdeedu/kdeeduplot/kplotobject.h | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/libkdeedu/kdeeduplot/kplotobject.h b/libkdeedu/kdeeduplot/kplotobject.h new file mode 100644 index 00000000..52d79540 --- /dev/null +++ b/libkdeedu/kdeeduplot/kplotobject.h @@ -0,0 +1,205 @@ +/*************************************************************************** + kplotobject.h - A list of points to be plotted + ------------------- + 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 KPLOTOBJECT_H +#define KPLOTOBJECT_H + + +class QString; +class QPainter; + +#include <kdemacros.h> + +/**class DRect + *@short equivalent of QRect with double x,y coordinates + *@author Jason Harris + *@version 1.0 + */ +class KDE_EXPORT DRect { +public: + DRect() { DRect( 0.0, 0.0, 1.0, 1.0 ); } + DRect( double x, double y, double w, double h ) { X = x; Y = y; W = w; H = h; } + ~DRect() {} + + double x() const { return X; } + double y() const { return Y; } + double x2() const { return X + W; } + double y2() const { return Y + H; } + double width() const { return W; } + double height() const { return H; } + + void setX( double x ) { X = x; } + void setY( double y ) { Y = y; } + void setWidth( double w ) { W = w; } + void setHeight( double h ) { H = h; } + +private: + double X,Y,W,H; +}; + +/**class DPoint + *@short equivalent of QPoint with double x,y coordinates + *@author Jason Harris + *@version 1.0 + */ +class KDE_EXPORT DPoint { +public: + DPoint() { DPoint( 0.0, 0.0 ); } + DPoint( double x, double y ) { setX( x ); setY( y ); } + ~DPoint() {} + + double x() const { return X; } + double y() const { return Y; } + + QPoint qpoint( QRect pb, DRect db ) { + int px = pb.left() + int( pb.width()*( x() - db.x() )/db.width() ); + int py = pb.top() + int( pb.height()*( db.y2() - y() )/db.height() ); + return QPoint( px, py ); + } + + void setX( double x ) { X = x; } + void setY( double y ) { Y = y; } + +private: + double X, Y; +}; + +/**@class KPlotObject + *@short Encapsulates an object to be plotted in a KPlotWidget. + *@author Jason Harris + *@version 1.0 + *Each KPlotObject consists of a list of QPoints, an object type, a color, a size, + *and a QString name. An additional integer (param) specifies something further + *about the object's appearance, depending on its type. There is a draw function + *for plotting the object on a KPlotWidget's QPainter. + */ +class KDE_EXPORT KPlotObject{ +public: +/**@enum PTYPE + *The Type classification of the KPlotObject + */ + enum PTYPE { POINTS=0, CURVE=1, LABEL=2, POLYGON=3, UNKNOWN_TYPE }; + +/**@enum PPARAM + *Parameter specifying the kind of points + */ + enum PPARAM { DOT=0, CIRCLE=1, SQUARE=2, LETTER=3, UNKNOWN_POINT }; + +/**@enum CPARAM + *Parameter specifying the kind of line. These are numerically equal to + *the Qt::PenStyle enum values. + */ + enum CPARAM { NO_LINE=0, SOLID=1, DASHED=2, DOTTED=3, DASHDOTTED=4, DASHDOTDOTTED=5, UNKNOWN_CURVE }; + +/**Default constructor. Create a POINTS-type object with an empty list of points. + */ + KPlotObject(); + +/**Constructor. Create a KPlotObject according to the arguments. + */ + KPlotObject( const QString &name, const QString &color, PTYPE otype, unsigned int size=2, unsigned int param=0 ); + +/**Destructor (empty) + */ + ~KPlotObject(); + +/**@return the KPlotObject's Name + */ + QString name() const { return Name; } + +/**@short set the KPlotObject's Name + *@param n the new name + */ + void setName( const QString &n ) { Name = n; } + +/**@return the KPlotObject's Color + */ + QString color() const { return Color; } + +/**@short set the KPlotObject's Color + *@param c the new color + */ + void setColor( const QString &c ) { Color = c; } + +/**@return the KPlotObject's Type + */ + PTYPE type() const { return Type; } + +/**@short set the KPlotObject's Type + *@param t the new type + */ + void setType( PTYPE t ) { Type = t; } + +/**@return the KPlotObject's Size + */ + unsigned int size() const { return Size; } + +/**@short set the KPlotObject's Size + *@param s the new size + */ + void setSize( unsigned int s ) { Size = s; } + +/**@return the KPlotObject's type-specific Parameter + *Parameter is an unsigned int because it can either be a PPARAM or a CPARAM enum. + */ + unsigned int param() const { return Parameter; } + +/**@short set the KPlotObject's type-specific Parameter + *@param p the new parameter + *Parameter is an unsigned int because it can either be a PPARAM or a CPARAM enum. + */ + void setParam( unsigned int p ) { Parameter = p; } + +/**@return a pointer to the DPoint at position i + *@param i the index of the desired point. + */ + DPoint* point( unsigned int i ) { return pList.at(i); } + + QPtrList<DPoint>* points() { return &pList; } + +/**@short Add a point to the object's list. + *@param p the DPoint to add. + */ + void addPoint( const DPoint &p ) { pList.append( new DPoint( p.x(), p.y() ) ); } + +/**@short Add a point to the object's list. This is an overloaded function, + *provided for convenience. It behaves essentially like the above function. + *@param p pointer to the DPoint to add. + */ + void addPoint( DPoint *p ) { pList.append( p ); } + +/**@short remove the QPoint at position index from the list of points + *@param index the index of the point to be removed. + */ + void removePoint( unsigned int index ); + +/**@return the number of QPoints currently in the list + */ + unsigned int count() const { return pList.count(); } + +/**@short clear the Object's points list + */ + void clearPoints() { pList.clear(); } + +private: + QPtrList<DPoint> pList; + PTYPE Type; + unsigned int Size, Parameter; + QString Color, Name; +}; + +#endif |