PlotCurve.h

Go to the documentation of this file.
00001 /***************************************************************************
00002     File                 : PlotCurve.h
00003     Project              : QtiPlot
00004     --------------------------------------------------------------------
00005     Copyright            : (C) 2007 by Ion Vasilief
00006     Email (use @ for *)  : ion_vasilief*yahoo.fr
00007     Description          : AbstractPlotCurve and DataCurve classes
00008 
00009  ***************************************************************************/
00010 
00011 /***************************************************************************
00012  *                                                                         *
00013  *  This program is free software; you can redistribute it and/or modify   *
00014  *  it under the terms of the GNU General Public License as published by   *
00015  *  the Free Software Foundation; either version 2 of the License, or      *
00016  *  (at your option) any later version.                                    *
00017  *                                                                         *
00018  *  This program is distributed in the hope that it will be useful,        *
00019  *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
00020  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
00021  *  GNU General Public License for more details.                           *
00022  *                                                                         *
00023  *   You should have received a copy of the GNU General Public License     *
00024  *   along with this program; if not, write to the Free Software           *
00025  *   Foundation, Inc., 51 Franklin Street, Fifth Floor,                    *
00026  *   Boston, MA  02110-1301  USA                                           *
00027  *                                                                         *
00028  ***************************************************************************/
00029 #ifndef PLOTCURVE_H
00030 #define PLOTCURVE_H
00031 
00032 #include <qwt_plot_curve.h>
00033 #include <qwt_plot_marker.h>
00034 #include "../Table.h"
00035 
00036 class PlotMarker;
00037 
00039 class PlotCurve: public QwtPlotCurve
00040 {
00041 
00042 public:
00043     PlotCurve(const QString& name = QString()): QwtPlotCurve(name), d_type(0), d_plot_style(0), d_x_offset(0.0), d_y_offset(0.0){};
00044 
00046     int type(){return d_type;};
00047     void setType(int t){d_type = t;};
00048     
00052     int plotStyle(){return d_plot_style;};
00053     void setPlotStyle(int s){d_plot_style = s;};
00054 
00055     double xOffset(){return d_x_offset;};
00056     void setXOffset(double dx){d_x_offset = dx;};
00057 
00058     double yOffset(){return d_y_offset;};
00059     void setYOffset(double dy){d_y_offset = dy;};
00060 
00061     QString saveCurveLayout();
00062     void restoreCurveLayout(const QStringList& lst);
00063 
00064 protected:
00065     // Rtti
00066     int d_type;
00067     // The plot style of the curve
00068     int d_plot_style;
00069     double d_x_offset, d_y_offset;
00070 };
00071 
00072 class DataCurve: public PlotCurve
00073 {
00074 public:
00075     DataCurve(Table *t, const QString& xColName, const QString& name, int startRow = 0, int endRow = -1);
00076     void clone(DataCurve* c);
00077 
00078     QString saveToString();
00079 
00080     QString xColumnName(){return d_x_column;};
00081     void setXColumnName(const QString& name){d_x_column = name;};
00082 
00083     bool hasLabels(){return !d_labels_list.isEmpty();};
00084     QString labelsColumnName(){return d_labels_column;};
00085     void setLabelsColumnName(const QString& name);
00086 
00087     int labelsAlignment(){return d_labels_align;};
00088     void setLabelsAlignment(int flags);
00089 
00090     int labelsXOffset(){return d_labels_x_offset;};
00091     int labelsYOffset(){return d_labels_y_offset;};
00092     void setLabelsOffset(int x, int y);
00093 
00094     double labelsRotation(){return d_labels_angle;};
00095     void setLabelsRotation(double angle);
00096 
00097     QFont labelsFont(){return d_labels_font;};
00098     void setLabelsFont(const QFont& font);
00099 
00100     QColor labelsColor(){return d_labels_color;};
00101     void setLabelsColor(const QColor& c);
00102 
00103     bool labelsWhiteOut(){return d_white_out_labels;};
00104     void setLabelsWhiteOut(bool whiteOut = true);
00105 
00106     Table* table(){return d_table;};
00107 
00108     int startRow(){return d_start_row;};
00109     int endRow(){return d_end_row;};
00110     void setRowRange(int startRow, int endRow);
00111 
00112     bool isFullRange();
00113     void setFullRange();
00114 
00115     virtual bool updateData(Table *t, const QString& colName);
00116     virtual void loadData();
00117 
00119     int tableRow(int point);
00120 
00121     void remove();
00122 
00135     virtual QString plotAssociation();
00136     virtual void updateColumnNames(const QString& oldName, const QString& newName, bool updateTableName);
00137 
00139     QList<DataCurve *> errorBarsList(){return d_error_bars;};
00141     void addErrorBars(DataCurve *c){if (c) d_error_bars << c;};
00143     void removeErrorBars(DataCurve *c);
00145     void clearErrorBars();
00147     void clearLabels();
00148 
00149     void setVisible(bool on);
00150 
00151     bool selectedLabels(const QPoint& pos);
00152     bool hasSelectedLabels();
00153     void setLabelsSelected(bool on = true);
00154 
00155     void moveLabels(const QPoint& pos);
00156     void updateLabelsPosition();
00157 
00158 protected:
00159     bool validCurveType();
00160     void loadLabels();
00161 
00163     QList <DataCurve *> d_error_bars;
00165     Table *d_table;
00167     /*
00168      *The column name used for Y values is stored in title().text().
00169      */
00170     QString d_x_column;
00171 
00172     int d_start_row;
00173     int d_end_row;
00174 
00176     QString d_labels_column;
00177 
00179     QList <PlotMarker *> d_labels_list;
00181     double d_click_pos_x, d_click_pos_y;
00182 
00183     QColor d_labels_color;
00184     QFont d_labels_font;
00185     double d_labels_angle;
00186     bool d_white_out_labels;
00187     int d_labels_align, d_labels_x_offset, d_labels_y_offset;
00189     PlotMarker *d_selected_label;
00190 };
00191 
00192 class PlotMarker: public QwtPlotMarker
00193 {
00194 public:
00195     PlotMarker(int index, double angle);
00196 
00197     int index(){return d_index;};
00198     void setIndex(int i){d_index = i;};
00199 
00200     double angle(){return d_angle;};
00201     void setAngle(double a){d_angle = a;};
00202 
00203     //QwtDoubleRect boundingRect() const;
00204 
00205 protected:
00207     void draw(QPainter *p, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRect &r) const;
00208 
00209     int d_index;
00210     double d_angle;
00211 };
00212 #endif

Generated on Sun Jun 15 21:32:18 2008 for QtiPlot by  doxygen 1.5.6