libkpl  5.0
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) 2017 by Werner Stille
10 email : kpl@werner-stille.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 <math.h>
26#include <QGraphicsRectItem>
27#include "textitem.h"
28
33class Q_DECL_EXPORT FrameItem : public KplItem, public QGraphicsRectItem
34{
35public:
37 enum GridMode {
42 GridWithLabels
43 };
45 enum {
46 Type = UserType + Frame
48 };
85 FrameItem(double x0 = 4, double y0 = 3, double width = 15,
86 double height = 10, unsigned colorFrame = 0,
87 unsigned colorGrid = 0, bool logX = false, bool logY = false,
88 GridMode gridMode = AxesWithLabels, double xMax = 15,
89 double yMax = 10, const QString& textX = "",
90 const QString& textY = "", const QString& header = "",
91 double relSize = 1, int numDigX = -1, int numDigY = -1,
92 int minTicX = 5, int minTicY = 2, int expX = 0, int expY = 0,
93 double xMin = 0, double yMin = 0, double xTic = 5, double yTic = 2,
94 bool collapsed = false, bool visible = true, double xOffset = 0,
95 double yOffset = 0, bool xBottom = true, bool xTop = false,
96 bool yLeft = true, bool yRight = false);
113 FrameItem(const KConfigGroup* plo, double x0 = 4, double y0 = 3,
114 double width = 15, double height = 10, unsigned colorFrame = 0,
115 unsigned colorGrid = 0, GridMode gridMode = AxesWithLabels);
117 virtual ~FrameItem();
132 static void autoScale(double& xMin, double& xMax, double& tick, int& minTic,
133 int& numDig, double xmi, double xma, double f,
134 double c, bool log);
144 void autoScale(double xmi, double xma, double fx, double ymi, double yma,
145 double fy);
150 void autoScale(bool autoNorm = true);
152 virtual QRectF boundingRect() const;
161 bool calcAutoScale(bool autoNorm, const QList<QGraphicsItem*>& items,
162 double& fx, double& fy);
164 inline QRectF clipRect() const { return cRect; };
166 inline unsigned colorFrame() const { return m_colorFrame; };
168 inline unsigned colorGrid() const { return m_colorGrid; };
170 inline int expX() const { return m_expX; };
172 inline int expY() const { return m_expY; };
174 inline GridMode gridMode() const { return m_gridMode; };
176 inline QString header() const { return m_header; };
178 inline double height() const { return m_height; };
180 inline bool collapsed() const { return m_collapsed; };
182 inline bool logX() const { return m_logX; };
184 inline bool logY() const { return m_logY; };
190 QPointF mapFromUser(const QPointF& p) const;
196 QPointF mapToUser(const QPointF& p) const;
202 QRectF mapToUser(const QRectF& rect) const;
204 inline int minTicX() const { return m_minTicX; };
206 inline int minTicY() const { return m_minTicY; };
208 inline double normX() const { return m_normX; };
210 inline double normY() const { return m_normY; };
212 inline int numDigX() const { return m_numDigX; };
214 inline int numDigY() const { return m_numDigY; };
216 virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option,
217 QWidget* widget = 0);
219 QPointF rectPos() const;
224 inline void setColorFrame(unsigned color) { m_colorFrame = color; };
229 inline void setColorGrid(unsigned color) { m_colorGrid = color; };
234 inline void setExpX(int expX) { m_expX = expX; m_normX = pow(10, expX); };
239 inline void setExpY(int expY) { m_expY = expY; m_normY = pow(10, expY); };
244 inline void setGridMode(GridMode gridMode) { m_gridMode = gridMode; };
249 inline void setHeight(double height) { m_height = height; };
254 inline void setLogX(bool logX) { m_logX = logX; };
259 inline void setLogY(bool logY) { m_logY = logY; };
264 inline void setMinTicX(int minTicX) { m_minTicX = minTicX; };
269 inline void setMinTicY(int minTicY) { m_minTicY = minTicY; };
274 inline void setNumDigX(int numDigX) { m_numDigX = numDigX; };
279 inline void setNumDigY(int numDigY) { m_numDigY = numDigY; };
284 void setProperties(const QTransform& m);
289 inline void setHeader(const QString& text) { m_header = text; };
294 inline void setTextX(const QString& text) { m_textX = text; };
299 inline void setTextY(const QString& text) { m_textY = text; };
304 inline void setWidth(double width) { m_width = width; };
309 inline void setX0(double x0) { m_x0 = x0; };
314 inline void setXBottom(bool xBottom) { m_xBottom = xBottom; };
319 inline void setXMax(double xMax) { m_xMax = xMax; };
324 inline void setXMin(double xMin) { m_xMin = xMin; };
329 inline void setXOffset(double xOffset) { m_xOffset = xOffset; };
334 inline void setXTic(double xTic) { m_xTic = xTic; };
339 inline void setXTop(bool xTop) { m_xTop = xTop; };
344 inline void setY0(double y0) { m_y0 = y0; };
349 inline void setYLeft(bool yLeft) { m_yLeft = yLeft; };
354 inline void setYMax(double yMax) { m_yMax = yMax; };
359 inline void setYMin(double yMin) { m_yMin = yMin; };
364 inline void setYOffset(double yOffset) { m_yOffset = yOffset; };
369 inline void setYRight(bool yRight) { m_yRight = yRight; };
374 inline void setYTic(double yTic) { m_yTic = yTic; };
376 QPointF steps() const;
378 inline QString textX() const { return m_textX; };
380 inline QString textY() const { return m_textY; };
382 virtual int type() const { return Type; };
384 inline void toggleCollapsed() { m_collapsed = !m_collapsed; };
386 void update();
391 void updatePos(QPointF p);
398 static inline bool valid(double v, bool log = false)
399 { return (v == v) && (fabs(v) <= 1e300) && ((!log) || (v > 0)); };
406 bool valid(double x, double y) const;
408 inline double width() const { return m_width; };
413 void writePlo(KConfigGroup* plo) const;
415 inline double x0() const { return m_x0; };
417 inline bool xBottom() const { return m_xBottom; };
419 inline double xMax() const { return m_xMax; };
421 inline double xMin() const { return m_xMin; };
423 inline double xOffset() const { return m_xOffset; };
425 inline double xTic() const { return m_xTic; };
427 inline bool xTop() const { return m_xTop; };
428 inline double y0() const { return m_y0; };
430 inline bool yLeft() const { return m_yLeft; };
432 inline bool yRight() const { return m_yRight; };
434 inline double yMax() const { return m_yMax; };
436 inline double yMin() const { return m_yMin; };
438 inline double yOffset() const { return m_yOffset; };
440 inline double yTic() const { return m_yTic; };
441
442protected:
452 void drawText(QPainter* painter, const QString& text, double x, double y,
453 TextItem::Alignment alignment, double dir = 0) const;
460 double incLog(double& x, double f) const;
462 virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent* event);
471 int number(double v, int numDig, QString& label) const;
476 void paintCond(QPainter* painter) const;
485 double tick(double tic, bool log) const;
486 bool m_logX, m_logY, m_xBottom, m_xTop, m_yLeft, m_yRight, m_collapsed;
487 int m_numDigX, m_numDigY, m_minTicX, m_minTicY, m_expX, m_expY;
488 GridMode m_gridMode;
489 unsigned m_colorFrame, m_colorGrid;
490 double m_x0, m_y0, m_width, m_height, m_xMin, m_xMax, m_yMin, m_yMax, m_xTic,
491 m_yTic, m_xOffset, m_yOffset, m_normX, m_normY, xminl, xmaxl, yminl, ymaxl;
492 QString m_textX, m_textY, m_header;
493 mutable QRectF bRect;
494 QRectF cRect;
495 QTransform md, m_inv, m_matrix;
496};
497
498#endif
Frame item class.
Definition: frameitem.h:34
void setYMax(double yMax)
Sets upper y data limit.
Definition: frameitem.h:354
void setYMin(double yMin)
Sets lower y data limit.
Definition: frameitem.h:359
double incLog(double &x, double f) const
Increment logarithm for next major axis tick.
bool valid(double x, double y) const
Checks coordinates for validity.
QString textY() const
Returns y axis text.
Definition: frameitem.h:380
void setXOffset(double xOffset)
Sets x offset.
Definition: frameitem.h:329
void updatePos(QPointF p)
Sets position.
virtual ~FrameItem()
Destructor.
FrameItem(double x0=4, double y0=3, double width=15, double height=10, unsigned colorFrame=0, unsigned colorGrid=0, bool logX=false, bool logY=false, GridMode gridMode=AxesWithLabels, double xMax=15, double yMax=10, const QString &textX="", const QString &textY="", const QString &header="", double relSize=1, int numDigX=-1, int numDigY=-1, int minTicX=5, int minTicY=2, int expX=0, int expY=0, double xMin=0, double yMin=0, double xTic=5, double yTic=2, bool collapsed=false, bool visible=true, double xOffset=0, double yOffset=0, bool xBottom=true, bool xTop=false, bool yLeft=true, bool yRight=false)
Constructor.
void autoScale(double xmi, double xma, double fx, double ymi, double yma, double fy)
Calculates and sets the scaling parameters.
QPointF steps() const
Returns user units steps for one pixel steps.
double normX() const
Returns normalization factor for x values.
Definition: frameitem.h:208
int number(double v, int numDig, QString &label) const
Prepares number label.
void setWidth(double width)
Sets width.
Definition: frameitem.h:304
double yMax() const
Returns y value of upper data window margin in user units.
Definition: frameitem.h:434
bool collapsed() const
Returns collapse state for list view.
Definition: frameitem.h:180
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
Updates position.
int minTicX() const
Returns number of intervals between major tics of x axis.
Definition: frameitem.h:204
void setHeader(const QString &text)
Sets heading text.
Definition: frameitem.h:289
int numDigY() const
Returns number of digits for y axis.
Definition: frameitem.h:214
void setXBottom(bool xBottom)
Sets bottom side label mode.
Definition: frameitem.h:314
int expY() const
Returns logarithm of normalization factor for y axis.
Definition: frameitem.h:172
void setColorFrame(unsigned color)
Sets color for frame and labels.
Definition: frameitem.h:224
double width() const
Returns width in cm.
Definition: frameitem.h:408
bool calcAutoScale(bool autoNorm, const QList< QGraphicsItem * > &items, double &fx, double &fy)
Calculates scaling parameters for a frame item and all its child items.
void setExpY(int expY)
Sets exponent of y normalization factor.
Definition: frameitem.h:239
void setYTic(double yTic)
Sets y tick distance.
Definition: frameitem.h:374
GridMode
Grid mode.
Definition: frameitem.h:37
@ Axes
Axes with tics and without labels.
Definition: frameitem.h:39
@ AxesWithLabels
Axes with tics and labels.
Definition: frameitem.h:40
@ FrameOnly
Only rectangular frame.
Definition: frameitem.h:38
@ Grid
Grid without labels.
Definition: frameitem.h:41
QString textX() const
Returns x axis text.
Definition: frameitem.h:378
void setYOffset(double yOffset)
Sets y offset.
Definition: frameitem.h:364
void setXMin(double xMin)
Sets lower x data limit.
Definition: frameitem.h:324
double normY() const
Returns normalization factor for y values.
Definition: frameitem.h:210
double height() const
Returns height in cm.
Definition: frameitem.h:178
void setTextY(const QString &text)
Sets y axis text.
Definition: frameitem.h:299
void setNumDigY(int numDigY)
Sets number of digits for y axis.
Definition: frameitem.h:279
int expX() const
Returns logarithm of normalization factor for x axis.
Definition: frameitem.h:170
unsigned colorGrid() const
Returns color for grids and tics.
Definition: frameitem.h:168
bool xTop() const
Returns true for x axis labels on top side.
Definition: frameitem.h:427
void setXTop(bool xTop)
Sets top side label mode.
Definition: frameitem.h:339
QString header() const
Returns heading text.
Definition: frameitem.h:176
double yOffset() const
Returns offset for first major y tick.
Definition: frameitem.h:438
void toggleCollapsed()
Toggles collapse state.
Definition: frameitem.h:384
double xTic() const
Returns distance between major tics of x axis.
Definition: frameitem.h:425
FrameItem(const FrameItem &a)
Copy constructor.
void setXTic(double xTic)
Sets x tick distance.
Definition: frameitem.h:334
void drawText(QPainter *painter, const QString &text, double x, double y, TextItem::Alignment alignment, double dir=0) const
Plots text.
QPointF mapToUser(const QPointF &p) const
Maps from pixel to user coordinates.
void setYRight(bool yRight)
Sets right side label mode.
Definition: frameitem.h:369
int numDigX() const
Returns number of digits for x axis.
Definition: frameitem.h:212
double xMin() const
Returns x value of left data window margin in user units.
Definition: frameitem.h:421
double x0() const
Returns left page margin in cm.
Definition: frameitem.h:415
void autoScale(bool autoNorm=true)
Calculates and sets the scaling parameters.
bool yRight() const
Returns true for y axis labels on right side.
Definition: frameitem.h:432
static void autoScale(double &xMin, double &xMax, double &tick, int &minTic, int &numDig, double xmi, double xma, double f, double c, bool log)
Calculates scaling parameters.
void update()
Applies changes and forces redrawing.
void setXMax(double xMax)
Sets upper x data limit.
Definition: frameitem.h:319
void setProperties()
Sets properties according to transformation matrix.
QRectF mapToUser(const QRectF &rect) const
Maps from pixel to user coordinates.
bool logY() const
Returns true for logarithmic y axis.
Definition: frameitem.h:184
void setHeight(double height)
Sets height.
Definition: frameitem.h:249
void setTextX(const QString &text)
Sets x axis text.
Definition: frameitem.h:294
double yTic() const
Returns distance between major tics of y axis.
Definition: frameitem.h:440
double tick(double tic, bool log) const
Calculates actual distance between major tics.
void paintCond(QPainter *painter) const
Paints or calculates bounding area.
static bool valid(double v, bool log=false)
Checks a double value for validity.
Definition: frameitem.h:398
void setLogY(bool logY)
Sets logarithmic mode of y axis.
Definition: frameitem.h:259
QPointF mapFromUser(const QPointF &p) const
Maps from user to pixel coordinates.
virtual int type() const
Returns specific QGraphicsItem type number.
Definition: frameitem.h:382
unsigned colorFrame() const
Returns color for frame and labels.
Definition: frameitem.h:166
double yMin() const
Returns y value of lower data window margin in user units.
Definition: frameitem.h:436
void writePlo(KConfigGroup *plo) const
Writes into plot file.
void setMinTicX(int minTicX)
Sets number of intervals between major tics of x axis.
Definition: frameitem.h:264
QPointF rectPos() const
Returns position in cm units.
bool yLeft() const
Returns true for y axis labels on left side.
Definition: frameitem.h:430
void setYLeft(bool yLeft)
Sets left side label mode.
Definition: frameitem.h:349
double xOffset() const
Returns offset for first major x tick.
Definition: frameitem.h:423
int minTicY() const
Returns number of intervals between major tics of y axis.
Definition: frameitem.h:206
FrameItem(const KConfigGroup *plo, double x0=4, double y0=3, double width=15, double height=10, unsigned colorFrame=0, unsigned colorGrid=0, GridMode gridMode=AxesWithLabels)
Constructor.
virtual QRectF boundingRect() const
Calculates bounding rectangle.
bool xBottom() const
Returns true for x axis labels on bottom side.
Definition: frameitem.h:417
GridMode gridMode() const
Returns grid mode.
Definition: frameitem.h:174
void setProperties(const QTransform &m)
Sets properties according to transformation matrix.
void setY0(double y0)
Sets bottom page margin.
Definition: frameitem.h:344
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget=0)
Paints item.
void setGridMode(GridMode gridMode)
Sets grid mode.
Definition: frameitem.h:244
bool logX() const
Returns true for logarithmic x axis.
Definition: frameitem.h:182
void setColorGrid(unsigned color)
Sets color for grids and tics.
Definition: frameitem.h:229
QRectF clipRect() const
Returns clipping rectangle.
Definition: frameitem.h:164
void setMinTicY(int minTicY)
Sets number of intervals between major tics of y axis.
Definition: frameitem.h:269
void setLogX(bool logX)
Sets logarithmic mode of x axis.
Definition: frameitem.h:254
void setX0(double x0)
Sets left page margin.
Definition: frameitem.h:309
double xMax() const
Returns x value of right data window margin in user units.
Definition: frameitem.h:419
void setNumDigX(int numDigX)
Sets number of digits for x axis.
Definition: frameitem.h:274
void setExpX(int expX)
Sets exponent of x normalization factor.
Definition: frameitem.h:234
Kpl item class.
Definition: kplitem.h:42
Alignment
Text alignment.
Definition: textitem.h:33