Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
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 class Table;
00038
00040 class PlotCurve: public QwtPlotCurve
00041 {
00042
00043 public:
00044 PlotCurve(const QString& name = QString());
00045
00047 int type(){return d_type;};
00048 void setType(int t){d_type = t;};
00049
00053 int plotStyle(){return d_plot_style;};
00054 void setPlotStyle(int s){d_plot_style = s;};
00055
00056 double xOffset(){return d_x_offset;};
00057 void setXOffset(double dx){d_x_offset = dx;};
00058
00059 double yOffset(){return d_y_offset;};
00060 void setYOffset(double dy){d_y_offset = dy;};
00061
00062 bool sideLinesEnabled(){return d_side_lines;};
00063 void enableSideLines(bool on){d_side_lines = on;};
00064
00065 QString saveCurveLayout();
00066 void restoreCurveLayout(const QStringList& lst);
00067
00069 void setSkipSymbolsCount(int count);
00071 int skipSymbolsCount(){return d_skip_symbols;};
00072
00073 protected:
00074 virtual void drawCurve(QPainter *p, int style, const QwtScaleMap &xMap, const QwtScaleMap &yMap, int from, int to) const;
00075 void drawSideLines(QPainter *p, const QwtScaleMap &xMap, const QwtScaleMap &yMap, int from, int to) const;
00076
00077 virtual void drawSymbols(QPainter *p, const QwtSymbol &,
00078 const QwtScaleMap &xMap, const QwtScaleMap &yMap, int from, int to) const;
00079
00080 void drawSticks(QPainter *p,
00081 const QwtScaleMap &xMap, const QwtScaleMap &yMap, int from, int to) const;
00082
00083 QwtDoubleRect boundingRect() const;
00084
00085
00086 int d_type;
00087
00088 int d_plot_style;
00089 double d_x_offset, d_y_offset;
00090 bool d_side_lines;
00091 int d_skip_symbols;
00092 };
00093
00094 class DataCurve: public PlotCurve
00095 {
00096
00097 public:
00098
00099 struct DataRange
00100 {
00101 unsigned int from;
00102 unsigned int to;
00103 };
00104
00105 DataCurve(Table *t, const QString& xColName, const QString& name, int startRow = 0, int endRow = -1);
00106 void clone(DataCurve* c);
00107
00108 virtual QString saveToString();
00109 void restoreLabels(const QStringList& lst);
00110
00111 QString xColumnName(){return d_x_column;};
00112 void setXColumnName(const QString& name){d_x_column = name;};
00113
00114 bool hasLabels(){return !d_labels_list.isEmpty();};
00115 QString labelsColumnName(){return d_labels_column;};
00116 void setLabelsColumnName(const QString& name);
00117
00118 int labelsAlignment(){return d_labels_align;};
00119 void setLabelsAlignment(int flags);
00120
00121 int labelsXOffset(){return d_labels_x_offset;};
00122 int labelsYOffset(){return d_labels_y_offset;};
00123 void setLabelsOffset(int x, int y);
00124
00125 double labelsRotation(){return d_labels_angle;};
00126 void setLabelsRotation(double angle);
00127
00128 QFont labelsFont(){return d_labels_font;};
00129 void setLabelsFont(const QFont& font);
00130
00131 QColor labelsColor(){return d_labels_color;};
00132 void setLabelsColor(const QColor& c);
00133
00134 bool labelsWhiteOut(){return d_white_out_labels;};
00135 void setLabelsWhiteOut(bool whiteOut = true);
00136
00137 Table* table(){return d_table;};
00138
00139 int startRow(){return d_start_row;};
00140 int endRow(){return d_end_row;};
00141 void setRowRange(int startRow, int endRow);
00142
00143 bool isFullRange();
00144 void setFullRange();
00145
00146 virtual bool updateData(Table *t, const QString& colName);
00147 virtual void loadData();
00148 void enableSpeedMode();
00149
00151 int tableRow(int point);
00152
00153 void remove();
00154
00167 virtual QString plotAssociation();
00168 virtual void updateColumnNames(const QString& oldName, const QString& newName, bool updateTableName);
00169
00171 QList<DataCurve *> errorBarsList(){return d_error_bars;};
00173 void addErrorBars(DataCurve *c){if (c) d_error_bars << c;};
00175 void removeErrorBars(DataCurve *c);
00177 void clearErrorBars();
00179 void clearLabels();
00180
00181 void setVisible(bool on);
00182
00183 bool selectedLabels(const QPoint& pos);
00184 bool hasSelectedLabels();
00185 void setLabelsSelected(bool on = true);
00186
00187 void moveLabels(const QPoint& pos);
00188 void updateLabelsPosition();
00189
00190 protected:
00191 virtual void drawCurve(QPainter *p, int style, const QwtScaleMap &xMap, const QwtScaleMap &yMap, int from, int to) const;
00192
00193 bool validCurveType();
00194 void loadLabels();
00195
00197 QList <DataCurve *> d_error_bars;
00199 Table *d_table;
00201
00202
00203
00204 QString d_x_column;
00205
00206 int d_start_row;
00207 int d_end_row;
00208
00210 QString d_labels_column;
00211
00213 QList <PlotMarker *> d_labels_list;
00215 double d_click_pos_x, d_click_pos_y;
00216
00217 QColor d_labels_color;
00218 QFont d_labels_font;
00219 double d_labels_angle;
00220 bool d_white_out_labels;
00221 int d_labels_align, d_labels_x_offset, d_labels_y_offset;
00223 PlotMarker *d_selected_label;
00224 std::vector<DataRange> d_data_ranges;
00225 };
00226
00227 class PlotMarker: public QwtPlotMarker
00228 {
00229 public:
00230 PlotMarker(int index, double angle);
00231
00232 int index(){return d_index;};
00233 void setIndex(int i){d_index = i;};
00234
00235 double angle(){return d_angle;};
00236 void setAngle(double a){d_angle = a;};
00237
00238 double xLabelOffset(){return d_label_x_offset;};
00239 double yLabelOffset(){return d_label_y_offset;};
00240 void setLabelOffset(double xOffset, double yOffset){d_label_x_offset = xOffset; d_label_y_offset = yOffset;};
00241
00242 protected:
00244 void draw(QPainter *p, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRect &r) const;
00245
00246 int d_index;
00247 double d_angle;
00249 double d_label_x_offset;
00251 double d_label_y_offset;
00252 };
00253 #endif