Warning, file /frameworks/kquickcharts/src/decorations/GridLines.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002  * This file is part of KQuickCharts
0003  * SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
0004  *
0005  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006  */
0007 
0008 #ifndef GRIDLINES_H
0009 #define GRIDLINES_H
0010 
0011 #include <memory>
0012 
0013 #include <QQuickItem>
0014 
0015 class GridLines;
0016 class LineGridNode;
0017 class XYChart;
0018 
0019 class LinePropertiesGroup : public QObject
0020 {
0021     Q_OBJECT
0022     Q_PROPERTY(bool visible READ visible WRITE setVisible NOTIFY propertiesChanged)
0023     Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY propertiesChanged)
0024     Q_PROPERTY(float lineWidth READ lineWidth WRITE setLineWidth NOTIFY propertiesChanged)
0025     Q_PROPERTY(int frequency READ frequency WRITE setFrequency NOTIFY propertiesChanged)
0026     Q_PROPERTY(int count READ count WRITE setCount NOTIFY propertiesChanged)
0027 
0028 public:
0029     explicit LinePropertiesGroup(GridLines *parent);
0030 
0031     bool visible() const;
0032     void setVisible(bool newVisible);
0033 
0034     QColor color() const;
0035     void setColor(const QColor &newColor);
0036 
0037     float lineWidth() const;
0038     void setLineWidth(float newLineWidth);
0039 
0040     int frequency() const;
0041     void setFrequency(int newFrequency);
0042 
0043     int count() const;
0044     void setCount(int newCount);
0045 
0046     Q_SIGNAL void propertiesChanged();
0047 
0048 private:
0049     GridLines *m_parent = nullptr;
0050     bool m_visible = true;
0051     QColor m_color = Qt::black;
0052     float m_lineWidth = 1.0;
0053     int m_frequency = 2;
0054     int m_count = -1;
0055 };
0056 
0057 /**
0058  * An item that renders a set of lines to make a grid for a chart.
0059  */
0060 class GridLines : public QQuickItem
0061 {
0062     Q_OBJECT
0063 
0064     Q_PROPERTY(GridLines::Direction direction READ direction WRITE setDirection NOTIFY directionChanged)
0065     Q_PROPERTY(XYChart *chart READ chart WRITE setChart NOTIFY chartChanged)
0066     Q_PROPERTY(float spacing READ spacing WRITE setSpacing NOTIFY spacingChanged)
0067     Q_PROPERTY(LinePropertiesGroup *major READ majorGroup CONSTANT)
0068     Q_PROPERTY(LinePropertiesGroup *minor READ minorGroup CONSTANT)
0069 
0070 public:
0071     enum class Direction { Horizontal, Vertical };
0072     Q_ENUM(Direction)
0073     /**
0074      * Default constructor
0075      */
0076     explicit GridLines(QQuickItem *parent = nullptr);
0077 
0078     Direction direction() const;
0079     void setDirection(GridLines::Direction newDirection);
0080     Q_SIGNAL void directionChanged();
0081 
0082     XYChart *chart() const;
0083     void setChart(XYChart *newChart);
0084     Q_SIGNAL void chartChanged();
0085 
0086     float spacing() const;
0087     void setSpacing(float newSpacing);
0088     Q_SIGNAL void spacingChanged();
0089 
0090     LinePropertiesGroup *majorGroup() const;
0091     LinePropertiesGroup *minorGroup() const;
0092 
0093 private:
0094     QSGNode *updatePaintNode(QSGNode *node, QQuickItem::UpdatePaintNodeData *) override;
0095     void updateLines(LineGridNode *node, LinePropertiesGroup *properties);
0096 
0097     GridLines::Direction m_direction = Direction::Horizontal;
0098     XYChart *m_chart = nullptr;
0099     float m_spacing = 10.0;
0100 
0101     std::unique_ptr<LinePropertiesGroup> m_major;
0102     std::unique_ptr<LinePropertiesGroup> m_minor;
0103 };
0104 
0105 #endif // GRIDLINES_H