libkpl  6.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) 2024 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 = QString(),
90 const QString& textY = QString(),
91 const QString& header = QString(), double relSize = 1,
92 int numDigX = -1, int numDigY = -1, int minTicX = 5,
93 int minTicY = 2, int expX = 0, int expY = 0, double xMin = 0,
94 double yMin = 0, double xTic = 5, double yTic = 2,
95 bool collapsed = false, bool visible = true, double xOffset = 0,
96 double yOffset = 0, bool xBottom = true, bool xTop = false,
97 bool yLeft = true, bool yRight = false);
114 FrameItem(const KConfigGroup* plo, double x0 = 4, double y0 = 3,
115 double width = 15, double height = 10, unsigned colorFrame = 0,
116 unsigned colorGrid = 0, GridMode gridMode = AxesWithLabels);
118 virtual ~FrameItem();
133 static void autoScale(double& xMin, double& xMax, double& tick, int& minTic,
134 int& numDig, double xmi, double xma, double f,
135 double c, bool log);
145 void autoScale(double xmi, double xma, double fx, double ymi, double yma,
146 double fy);
151 void autoScale(bool autoNorm = true);
153 virtual QRectF boundingRect() const override;
162 bool calcAutoScale(bool autoNorm, const QList<QGraphicsItem*>& items,
163 double& fx, double& fy);
165 inline QRectF clipRect() const { return cRect; };
167 inline unsigned colorFrame() const { return m_colorFrame; };
169 inline unsigned colorGrid() const { return m_colorGrid; };
171 inline int expX() const { return m_expX; };
173 inline int expY() const { return m_expY; };
175 inline GridMode gridMode() const { return m_gridMode; };
177 inline QString header() const { return m_header; };
179 inline double height() const { return m_height; };
181 inline bool collapsed() const { return m_collapsed; };
183 inline bool logX() const { return m_logX; };
185 inline bool logY() const { return m_logY; };
191 QPointF mapFromUser(const QPointF& p) const;
197 QPointF mapToUser(const QPointF& p) const;
203 QRectF mapToUser(const QRectF& rect) const;
205 inline int minTicX() const { return m_minTicX; };
207 inline int minTicY() const { return m_minTicY; };
209 inline double normX() const { return m_normX; };
211 inline double normY() const { return m_normY; };
213 inline int numDigX() const { return m_numDigX; };
215 inline int numDigY() const { return m_numDigY; };
217 virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option,
218 QWidget* widget = nullptr) override;
220 QPointF rectPos() const;
225 inline void setColorFrame(unsigned color) { m_colorFrame = color; };
230 inline void setColorGrid(unsigned color) { m_colorGrid = color; };
235 inline void setExpX(int expX) { m_expX = expX; m_normX = pow(10, expX); };
240 inline void setExpY(int expY) { m_expY = expY; m_normY = pow(10, expY); };
245 inline void setGridMode(GridMode gridMode) { m_gridMode = gridMode; };
250 inline void setHeight(double height) { m_height = height; };
255 inline void setLogX(bool logX) { m_logX = logX; };
260 inline void setLogY(bool logY) { m_logY = logY; };
265 inline void setMinTicX(int minTicX) { m_minTicX = minTicX; };
270 inline void setMinTicY(int minTicY) { m_minTicY = minTicY; };
275 inline void setNumDigX(int numDigX) { m_numDigX = numDigX; };
280 inline void setNumDigY(int numDigY) { m_numDigY = numDigY; };
285 void setProperties(const QTransform& m);
290 inline void setHeader(const QString& text) { m_header = text; };
295 inline void setTextX(const QString& text) { m_textX = text; };
300 inline void setTextY(const QString& text) { m_textY = text; };
305 inline void setWidth(double width) { m_width = width; };
310 inline void setX0(double x0) { m_x0 = x0; };
315 inline void setXBottom(bool xBottom) { m_xBottom = xBottom; };
320 inline void setXMax(double xMax) { m_xMax = xMax; };
325 inline void setXMin(double xMin) { m_xMin = xMin; };
330 inline void setXOffset(double xOffset) { m_xOffset = xOffset; };
335 inline void setXTic(double xTic) { m_xTic = xTic; };
340 inline void setXTop(bool xTop) { m_xTop = xTop; };
345 inline void setY0(double y0) { m_y0 = y0; };
350 inline void setYLeft(bool yLeft) { m_yLeft = yLeft; };
355 inline void setYMax(double yMax) { m_yMax = yMax; };
360 inline void setYMin(double yMin) { m_yMin = yMin; };
365 inline void setYOffset(double yOffset) { m_yOffset = yOffset; };
370 inline void setYRight(bool yRight) { m_yRight = yRight; };
375 inline void setYTic(double yTic) { m_yTic = yTic; };
377 QPointF steps() const;
379 inline QString textX() const { return m_textX; };
381 inline QString textY() const { return m_textY; };
383 virtual int type() const override { return Type; };
385 inline void toggleCollapsed() { m_collapsed = !m_collapsed; };
387 void update();
392 void updatePos(QPointF p);
399 static inline bool valid(double v, bool log = false)
400 { return (v == v) && (fabs(v) <= 1e300) && ((!log) || (v > 0)); };
407 bool valid(double x, double y) const;
409 inline double width() const { return m_width; };
414 void writePlo(KConfigGroup* plo) const;
416 inline double x0() const { return m_x0; };
418 inline bool xBottom() const { return m_xBottom; };
420 inline double xMax() const { return m_xMax; };
422 inline double xMin() const { return m_xMin; };
424 inline double xOffset() const { return m_xOffset; };
426 inline double xTic() const { return m_xTic; };
428 inline bool xTop() const { return m_xTop; };
429 inline double y0() const { return m_y0; };
431 inline bool yLeft() const { return m_yLeft; };
433 inline bool yRight() const { return m_yRight; };
435 inline double yMax() const { return m_yMax; };
437 inline double yMin() const { return m_yMin; };
439 inline double yOffset() const { return m_yOffset; };
441 inline double yTic() const { return m_yTic; };
442
443protected:
453 void drawText(QPainter* painter, const QString& text, double x, double y,
454 TextItem::Alignment alignment, double dir = 0) const;
461 double incLog(double& x, double f) const;
463 virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override;
472 int number(double v, int numDig, QString& label) const;
477 void paintCond(QPainter* painter) const;
486 double tick(double tic, bool log) const;
487 bool m_logX, m_logY, m_xBottom, m_xTop, m_yLeft, m_yRight, m_collapsed;
488 int m_numDigX, m_numDigY, m_minTicX, m_minTicY, m_expX, m_expY;
489 GridMode m_gridMode;
490 unsigned m_colorFrame, m_colorGrid;
491 double m_x0, m_y0, m_width, m_height, m_xMin, m_xMax, m_yMin, m_yMax, m_xTic,
492 m_yTic, m_xOffset, m_yOffset, m_normX, m_normY, xminl, xmaxl, yminl, ymaxl;
493 QString m_textX, m_textY, m_header;
494 mutable QRectF bRect;
495 QRectF cRect;
496 QTransform md, m_inv, m_matrix;
497};
498
499#endif
Frame item class.
Definition frameitem.h:34
void setYMax(double yMax)
Sets upper y data limit.
Definition frameitem.h:355
void setYMin(double yMin)
Sets lower y data limit.
Definition frameitem.h:360
double incLog(double &x, double f) const
Increment logarithm for next major axis tick.
virtual int type() const override
Returns specific QGraphicsItem type number.
Definition frameitem.h:383
bool valid(double x, double y) const
Checks coordinates for validity.
QString textY() const
Returns y axis text.
Definition frameitem.h:381
void setXOffset(double xOffset)
Sets x offset.
Definition frameitem.h:330
void updatePos(QPointF p)
Sets position.
virtual ~FrameItem()
Destructor.
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:209
int number(double v, int numDig, QString &label) const
Prepares number label.
void setWidth(double width)
Sets width.
Definition frameitem.h:305
double yMax() const
Returns y value of upper data window margin in user units.
Definition frameitem.h:435
bool collapsed() const
Returns collapse state for list view.
Definition frameitem.h:181
int minTicX() const
Returns number of intervals between major tics of x axis.
Definition frameitem.h:205
void setHeader(const QString &text)
Sets heading text.
Definition frameitem.h:290
int numDigY() const
Returns number of digits for y axis.
Definition frameitem.h:215
void setXBottom(bool xBottom)
Sets bottom side label mode.
Definition frameitem.h:315
virtual QRectF boundingRect() const override
Calculates bounding rectangle.
int expY() const
Returns logarithm of normalization factor for y axis.
Definition frameitem.h:173
void setColorFrame(unsigned color)
Sets color for frame and labels.
Definition frameitem.h:225
double width() const
Returns width in cm.
Definition frameitem.h:409
bool calcAutoScale(bool autoNorm, const QList< QGraphicsItem * > &items, double &fx, double &fy)
Calculates scaling parameters for a frame item and all its child items.
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
Updates position.
void setExpY(int expY)
Sets exponent of y normalization factor.
Definition frameitem.h:240
void setYTic(double yTic)
Sets y tick distance.
Definition frameitem.h:375
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:379
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=QString(), const QString &textY=QString(), const QString &header=QString(), 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 setYOffset(double yOffset)
Sets y offset.
Definition frameitem.h:365
void setXMin(double xMin)
Sets lower x data limit.
Definition frameitem.h:325
double normY() const
Returns normalization factor for y values.
Definition frameitem.h:211
double height() const
Returns height in cm.
Definition frameitem.h:179
void setTextY(const QString &text)
Sets y axis text.
Definition frameitem.h:300
void setNumDigY(int numDigY)
Sets number of digits for y axis.
Definition frameitem.h:280
int expX() const
Returns logarithm of normalization factor for x axis.
Definition frameitem.h:171
unsigned colorGrid() const
Returns color for grids and tics.
Definition frameitem.h:169
bool xTop() const
Returns true for x axis labels on top side.
Definition frameitem.h:428
void setXTop(bool xTop)
Sets top side label mode.
Definition frameitem.h:340
QString header() const
Returns heading text.
Definition frameitem.h:177
double yOffset() const
Returns offset for first major y tick.
Definition frameitem.h:439
void toggleCollapsed()
Toggles collapse state.
Definition frameitem.h:385
double xTic() const
Returns distance between major tics of x axis.
Definition frameitem.h:426
FrameItem(const FrameItem &a)
Copy constructor.
void setXTic(double xTic)
Sets x tick distance.
Definition frameitem.h:335
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:370
int numDigX() const
Returns number of digits for x axis.
Definition frameitem.h:213
double xMin() const
Returns x value of left data window margin in user units.
Definition frameitem.h:422
double x0() const
Returns left page margin in cm.
Definition frameitem.h:416
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:433
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:320
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:185
void setHeight(double height)
Sets height.
Definition frameitem.h:250
void setTextX(const QString &text)
Sets x axis text.
Definition frameitem.h:295
double yTic() const
Returns distance between major tics of y axis.
Definition frameitem.h:441
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:399
void setLogY(bool logY)
Sets logarithmic mode of y axis.
Definition frameitem.h:260
QPointF mapFromUser(const QPointF &p) const
Maps from user to pixel coordinates.
unsigned colorFrame() const
Returns color for frame and labels.
Definition frameitem.h:167
double yMin() const
Returns y value of lower data window margin in user units.
Definition frameitem.h:437
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:265
QPointF rectPos() const
Returns position in cm units.
bool yLeft() const
Returns true for y axis labels on left side.
Definition frameitem.h:431
void setYLeft(bool yLeft)
Sets left side label mode.
Definition frameitem.h:350
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget=nullptr) override
Paints item.
double xOffset() const
Returns offset for first major x tick.
Definition frameitem.h:424
int minTicY() const
Returns number of intervals between major tics of y axis.
Definition frameitem.h:207
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.
bool xBottom() const
Returns true for x axis labels on bottom side.
Definition frameitem.h:418
GridMode gridMode() const
Returns grid mode.
Definition frameitem.h:175
void setProperties(const QTransform &m)
Sets properties according to transformation matrix.
void setY0(double y0)
Sets bottom page margin.
Definition frameitem.h:345
void setGridMode(GridMode gridMode)
Sets grid mode.
Definition frameitem.h:245
bool logX() const
Returns true for logarithmic x axis.
Definition frameitem.h:183
void setColorGrid(unsigned color)
Sets color for grids and tics.
Definition frameitem.h:230
QRectF clipRect() const
Returns clipping rectangle.
Definition frameitem.h:165
void setMinTicY(int minTicY)
Sets number of intervals between major tics of y axis.
Definition frameitem.h:270
void setLogX(bool logX)
Sets logarithmic mode of x axis.
Definition frameitem.h:255
void setX0(double x0)
Sets left page margin.
Definition frameitem.h:310
double xMax() const
Returns x value of right data window margin in user units.
Definition frameitem.h:420
void setNumDigX(int numDigX)
Sets number of digits for x axis.
Definition frameitem.h:275
void setExpX(int expX)
Sets exponent of x normalization factor.
Definition frameitem.h:235
Kpl item class.
Definition kplitem.h:42
Alignment
Text alignment.
Definition textitem.h:35