File indexing completed on 2024-05-05 12:21:22
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