libkpl  4.1
A Library for Graphical Presentation of Data Sets and Functions
frameitem.h
1 /***************************************************************************
2  frameitem.h - description
3  -------------------
4 
5  This file is a part of kpl - a program for graphical presentation of
6  data sets and functions.
7 
8  begin : Sun Aug 29 1999
9  copyright : (C) 2015 by Werner Stille
10  email : stille@uni-freiburg.de
11  ***************************************************************************/
12 
13 /***************************************************************************
14  * *
15  * This program is free software; you can redistribute it and/or modify *
16  * it under the terms of the GNU General Public License as published by *
17  * the Free Software Foundation; either version 2 of the License, or *
18  * (at your option) any later version. *
19  * *
20  ***************************************************************************/
21 
22 #ifndef FRAMEITEM_H
23 #define FRAMEITEM_H
24 
25 #include <QGraphicsRectItem>
26 #include "textitem.h"
27 
32 class KDE_EXPORT FrameItem : public KplItem, public QGraphicsRectItem
33 {
34 public:
36  enum GridMode {
38  Axes,
40  Grid,
41  GridWithLabels
42  };
44  enum {
45  Type = UserType + Frame
47  };
84  FrameItem(double x0 = 4, double y0 = 3, double width = 15,
85  double height = 10, unsigned colorFrame = 0,
86  unsigned colorGrid = 0, bool logX = false, bool logY = false,
87  GridMode gridMode = AxesWithLabels, double xMax = 15,
88  double yMax = 10, const QString& textX = "",
89  const QString& textY = "", const QString& header = "",
90  double relSize = 1, int numDigX = -1, int numDigY = -1,
91  int minTicX = 5, int minTicY = 2, int expX = 0, int expY = 0,
92  double xMin = 0, double yMin = 0, double xTic = 5, double yTic = 2,
93  bool collapsed = false, bool visible = true, double xOffset = 0,
94  double yOffset = 0, bool xBottom = true, bool xTop = false,
95  bool yLeft = true, bool yRight = false);
100  FrameItem(const FrameItem& a);
112  FrameItem(const KConfigGroup* plo, double x0 = 4, double y0 = 3,
113  double width = 15, double height = 10, unsigned colorFrame = 0,
114  unsigned colorGrid = 0, GridMode gridMode = AxesWithLabels);
116  virtual ~FrameItem();
131  static void autoScale(double& xMin, double& xMax, double& tick, int& minTic,
132  int& numDig, double xmi, double xma, double f,
133  double c, bool log);
143  void autoScale(double xmi, double xma, double fx, double ymi, double yma,
144  double fy);
149  void autoScale(bool autoNorm = true);
151  virtual QRectF boundingRect() const;
160  bool calcAutoScale(bool autoNorm, const QList<QGraphicsItem*>& items,
161  double& fx, double& fy);
163  inline QRectF clipRect() const { return cRect; };
165  inline unsigned colorFrame() const { return m_colorFrame; };
167  inline unsigned colorGrid() const { return m_colorGrid; };
169  inline int expX() const { return m_expX; };
171  inline int expY() const { return m_expY; };
173  inline GridMode gridMode() const { return m_gridMode; };
175  inline QString header() const { return m_header; };
177  inline double height() const { return m_height; };
179  inline bool collapsed() const { return m_collapsed; };
181  inline bool logX() const { return m_logX; };
183  inline bool logY() const { return m_logY; };
189  QPointF mapFromUser(const QPointF& p) const;
195  QPointF mapToUser(const QPointF& p) const;
201  QRectF mapToUser(const QRectF& rect) const;
203  inline int minTicX() const { return m_minTicX; };
205  inline int minTicY() const { return m_minTicY; };
207  inline double normX() const { return m_normX; };
209  inline double normY() const { return m_normY; };
211  inline int numDigX() const { return m_numDigX; };
213  inline int numDigY() const { return m_numDigY; };
215  virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option,
216  QWidget* widget = 0);
218  QPointF rectPos() const;
223  inline void setColorFrame(unsigned color) { m_colorFrame = color; };
228  inline void setColorGrid(unsigned color) { m_colorGrid = color; };
233  inline void setExpX(int expX) { m_expX = expX; m_normX = pow(10, expX); };
238  inline void setExpY(int expY) { m_expY = expY; m_normY = pow(10, expY); };
243  inline void setGridMode(GridMode gridMode) { m_gridMode = gridMode; };
248  inline void setHeight(double height) { m_height = height; };
253  inline void setLogX(bool logX) { m_logX = logX; };
258  inline void setLogY(bool logY) { m_logY = logY; };
263  inline void setMinTicX(int minTicX) { m_minTicX = minTicX; };
268  inline void setMinTicY(int minTicY) { m_minTicY = minTicY; };
273  inline void setNumDigX(int numDigX) { m_numDigX = numDigX; };
278  inline void setNumDigY(int numDigY) { m_numDigY = numDigY; };
283  void setProperties(const QTransform& m);
288  inline void setHeader(const QString& text) { m_header = text; };
293  inline void setTextX(const QString& text) { m_textX = text; };
298  inline void setTextY(const QString& text) { m_textY = text; };
303  inline void setWidth(double width) { m_width = width; };
308  inline void setX0(double x0) { m_x0 = x0; };
313  inline void setXBottom(bool xBottom) { m_xBottom = xBottom; };
318  inline void setXMax(double xMax) { m_xMax = xMax; };
323  inline void setXMin(double xMin) { m_xMin = xMin; };
328  inline void setXOffset(double xOffset) { m_xOffset = xOffset; };
333  inline void setXTic(double xTic) { m_xTic = xTic; };
338  inline void setXTop(bool xTop) { m_xTop = xTop; };
343  inline void setY0(double y0) { m_y0 = y0; };
348  inline void setYLeft(bool yLeft) { m_yLeft = yLeft; };
353  inline void setYMax(double yMax) { m_yMax = yMax; };
358  inline void setYMin(double yMin) { m_yMin = yMin; };
363  inline void setYOffset(double yOffset) { m_yOffset = yOffset; };
368  inline void setYRight(bool yRight) { m_yRight = yRight; };
373  inline void setYTic(double yTic) { m_yTic = yTic; };
375  QPointF steps() const;
377  inline QString textX() const { return m_textX; };
379  inline QString textY() const { return m_textY; };
381  virtual int type() const { return Type; };
383  inline void toggleCollapsed() { m_collapsed = !m_collapsed; };
385  void update();
390  void updatePos(QPointF p);
397  static inline bool valid(double v, bool log = false)
398  { return (v == v) && (fabs(v) <= 1e300) && ((!log) || (v > 0)); };
405  bool valid(double x, double y) const;
407  inline double width() const { return m_width; };
412  void writePlo(KConfigGroup* plo) const;
414  inline double x0() const { return m_x0; };
416  inline bool xBottom() const { return m_xBottom; };
418  inline double xMax() const { return m_xMax; };
420  inline double xMin() const { return m_xMin; };
422  inline double xOffset() const { return m_xOffset; };
424  inline double xTic() const { return m_xTic; };
426  inline bool xTop() const { return m_xTop; };
427  inline double y0() const { return m_y0; };
429  inline bool yLeft() const { return m_yLeft; };
431  inline bool yRight() const { return m_yRight; };
433  inline double yMax() const { return m_yMax; };
435  inline double yMin() const { return m_yMin; };
437  inline double yOffset() const { return m_yOffset; };
439  inline double yTic() const { return m_yTic; };
440 
441 protected:
451  void drawText(QPainter* painter, const QString& text, double x, double y,
452  TextItem::Alignment alignment, double dir = 0) const;
459  double incLog(double& x, double f) const;
461  virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent* event);
470  int number(double v, int numDig, QString& label) const;
475  void paintCond(QPainter* painter) const;
477  void setProperties();
484  double tick(double tic, bool log) const;
485  bool m_logX, m_logY, m_xBottom, m_xTop, m_yLeft, m_yRight, m_collapsed;
486  int m_numDigX, m_numDigY, m_minTicX, m_minTicY, m_expX, m_expY;
487  GridMode m_gridMode;
488  unsigned m_colorFrame, m_colorGrid;
489  double m_x0, m_y0, m_width, m_height, m_xMin, m_xMax, m_yMin, m_yMax, m_xTic,
490  m_yTic, m_xOffset, m_yOffset, m_normX, m_normY, xminl, xmaxl, yminl, ymaxl;
491  QString m_textX, m_textY, m_header;
492  mutable QRectF bRect;
493  QRectF cRect;
494  QTransform md, m_inv, m_matrix;
495 };
496 
497 #endif
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
void setLogX(bool logX)
Sets logarithmic mode of x axis.
Definition: frameitem.h:253
double yMax() const
Returns y value of upper data window margin in user units.
Definition: frameitem.h:433
void setYMin(double yMin)
Sets lower y data limit.
Definition: frameitem.h:358
Kpl item class.
Definition: kplitem.h:43
void setExpY(int expY)
Sets exponent of y normalization factor.
Definition: frameitem.h:238
void setXTop(bool xTop)
Sets top side label mode.
Definition: frameitem.h:338
Axes with tics and without labels.
Definition: frameitem.h:38
int expX() const
Returns logarithm of normalization factor for x axis.
Definition: frameitem.h:169
GridMode
Grid mode.
Definition: frameitem.h:36
unsigned colorFrame() const
Returns color for frame and labels.
Definition: frameitem.h:165
int numDigX() const
Returns number of digits for x axis.
Definition: frameitem.h:211
void setYLeft(bool yLeft)
Sets left side label mode.
Definition: frameitem.h:348
virtual int type() const
Returns specific QGraphicsItem type number.
Definition: frameitem.h:381
Alignment
Text alignment.
Definition: textitem.h:33
QString header() const
Returns heading text.
Definition: frameitem.h:175
double yOffset() const
Returns offset for first major y tick.
Definition: frameitem.h:437
void setXBottom(bool xBottom)
Sets bottom side label mode.
Definition: frameitem.h:313
void setY0(double y0)
Sets bottom page margin.
Definition: frameitem.h:343
double normY() const
Returns normalization factor for y values.
Definition: frameitem.h:209
void setColorFrame(unsigned color)
Sets color for frame and labels.
Definition: frameitem.h:223
void setYMax(double yMax)
Sets upper y data limit.
Definition: frameitem.h:353
void setXOffset(double xOffset)
Sets x offset.
Definition: frameitem.h:328
void setWidth(double width)
Sets width.
Definition: frameitem.h:303
Grid without labels.
Definition: frameitem.h:40
void setTextX(const QString &text)
Sets x axis text.
Definition: frameitem.h:293
void setHeader(const QString &text)
Sets heading text.
Definition: frameitem.h:288
double yTic() const
Returns distance between major tics of y axis.
Definition: frameitem.h:439
void update(const QRectF &rect)
bool logX() const
Returns true for logarithmic x axis.
Definition: frameitem.h:181
double x0() const
Returns left page margin in cm.
Definition: frameitem.h:414
void setYOffset(double yOffset)
Sets y offset.
Definition: frameitem.h:363
virtual QRectF boundingRect() const
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
double width() const
Returns width in cm.
Definition: frameitem.h:407
double xMax() const
Returns x value of right data window margin in user units.
Definition: frameitem.h:418
void setColorGrid(unsigned color)
Sets color for grids and tics.
Definition: frameitem.h:228
void setMinTicY(int minTicY)
Sets number of intervals between major tics of y axis.
Definition: frameitem.h:268
double yMin() const
Returns y value of lower data window margin in user units.
Definition: frameitem.h:435
double xMin() const
Returns x value of left data window margin in user units.
Definition: frameitem.h:420
void writePlo(KConfigGroup *plo, bool visible=true) const
Writes into plot file.
void toggleCollapsed()
Toggles collapse state.
Definition: frameitem.h:383
double height() const
Returns height in cm.
Definition: frameitem.h:177
void setTextY(const QString &text)
Sets y axis text.
Definition: frameitem.h:298
void setNumDigY(int numDigY)
Sets number of digits for y axis.
Definition: frameitem.h:278
double xTic() const
Returns distance between major tics of x axis.
Definition: frameitem.h:424
Only rectangular frame.
Definition: frameitem.h:37
void setHeight(double height)
Sets height.
Definition: frameitem.h:248
bool xBottom() const
Returns true for x axis labels on bottom side.
Definition: frameitem.h:416
QRectF clipRect() const
Returns clipping rectangle.
Definition: frameitem.h:163
void setLogY(bool logY)
Sets logarithmic mode of y axis.
Definition: frameitem.h:258
int minTicX() const
Returns number of intervals between major tics of x axis.
Definition: frameitem.h:203
void setExpX(int expX)
Sets exponent of x normalization factor.
Definition: frameitem.h:233
QString textX() const
Returns x axis text.
Definition: frameitem.h:377
bool collapsed() const
Returns collapse state for list view.
Definition: frameitem.h:179
Axes with tics and labels.
Definition: frameitem.h:39
void setMinTicX(int minTicX)
Sets number of intervals between major tics of x axis.
Definition: frameitem.h:263
bool logY() const
Returns true for logarithmic y axis.
Definition: frameitem.h:183
int minTicY() const
Returns number of intervals between major tics of y axis.
Definition: frameitem.h:205
void setXMax(double xMax)
Sets upper x data limit.
Definition: frameitem.h:318
unsigned colorGrid() const
Returns color for grids and tics.
Definition: frameitem.h:167
void setXMin(double xMin)
Sets lower x data limit.
Definition: frameitem.h:323
void setX0(double x0)
Sets left page margin.
Definition: frameitem.h:308
void setNumDigX(int numDigX)
Sets number of digits for x axis.
Definition: frameitem.h:273
bool yRight() const
Returns true for y axis labels on right side.
Definition: frameitem.h:431
bool yLeft() const
Returns true for y axis labels on left side.
Definition: frameitem.h:429
double normX() const
Returns normalization factor for x values.
Definition: frameitem.h:207
void setYRight(bool yRight)
Sets right side label mode.
Definition: frameitem.h:368
int numDigY() const
Returns number of digits for y axis.
Definition: frameitem.h:213
double xOffset() const
Returns offset for first major x tick.
Definition: frameitem.h:422
static bool valid(double v, bool log=false)
Checks a double value for validity.
Definition: frameitem.h:397
int expY() const
Returns logarithm of normalization factor for y axis.
Definition: frameitem.h:171
void setYTic(double yTic)
Sets y tick distance.
Definition: frameitem.h:373
bool xTop() const
Returns true for x axis labels on top side.
Definition: frameitem.h:426
QString textY() const
Returns y axis text.
Definition: frameitem.h:379
void setXTic(double xTic)
Sets x tick distance.
Definition: frameitem.h:333
Frame item class.
Definition: frameitem.h:32
void setGridMode(GridMode gridMode)
Sets grid mode.
Definition: frameitem.h:243
GridMode gridMode() const
Returns grid mode.
Definition: frameitem.h:173