File indexing completed on 2024-04-28 03:56:45
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 QML_ELEMENT 0023 QML_UNCREATABLE("Grouped Property") 0024 0025 public: 0026 explicit LinePropertiesGroup(GridLines *parent); 0027 0028 Q_PROPERTY(bool visible READ visible WRITE setVisible NOTIFY propertiesChanged) 0029 bool visible() const; 0030 void setVisible(bool newVisible); 0031 0032 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY propertiesChanged) 0033 QColor color() const; 0034 void setColor(const QColor &newColor); 0035 0036 Q_PROPERTY(float lineWidth READ lineWidth WRITE setLineWidth NOTIFY propertiesChanged) 0037 float lineWidth() const; 0038 void setLineWidth(float newLineWidth); 0039 0040 Q_PROPERTY(int frequency READ frequency WRITE setFrequency NOTIFY propertiesChanged) 0041 int frequency() const; 0042 void setFrequency(int newFrequency); 0043 0044 Q_PROPERTY(int count READ count WRITE setCount NOTIFY propertiesChanged) 0045 int count() const; 0046 void setCount(int newCount); 0047 0048 Q_SIGNAL void propertiesChanged(); 0049 0050 private: 0051 GridLines *m_parent = nullptr; 0052 bool m_visible = true; 0053 QColor m_color = Qt::black; 0054 float m_lineWidth = 1.0; 0055 int m_frequency = 2; 0056 int m_count = -1; 0057 }; 0058 0059 /** 0060 * An item that renders a set of lines to make a grid for a chart. 0061 */ 0062 class GridLines : public QQuickItem 0063 { 0064 Q_OBJECT 0065 QML_ELEMENT 0066 0067 public: 0068 enum class Direction { Horizontal, Vertical }; 0069 Q_ENUM(Direction) 0070 /** 0071 * Default constructor 0072 */ 0073 explicit GridLines(QQuickItem *parent = nullptr); 0074 0075 Q_PROPERTY(GridLines::Direction direction READ direction WRITE setDirection NOTIFY directionChanged) 0076 Direction direction() const; 0077 void setDirection(GridLines::Direction newDirection); 0078 Q_SIGNAL void directionChanged(); 0079 0080 Q_PROPERTY(XYChart *chart READ chart WRITE setChart NOTIFY chartChanged) 0081 XYChart *chart() const; 0082 void setChart(XYChart *newChart); 0083 Q_SIGNAL void chartChanged(); 0084 0085 Q_PROPERTY(float spacing READ spacing WRITE setSpacing NOTIFY spacingChanged) 0086 float spacing() const; 0087 void setSpacing(float newSpacing); 0088 Q_SIGNAL void spacingChanged(); 0089 0090 Q_PROPERTY(LinePropertiesGroup *major READ majorGroup CONSTANT) 0091 LinePropertiesGroup *majorGroup() const; 0092 0093 Q_PROPERTY(LinePropertiesGroup *minor READ minorGroup CONSTANT) 0094 LinePropertiesGroup *minorGroup() const; 0095 0096 private: 0097 QSGNode *updatePaintNode(QSGNode *node, QQuickItem::UpdatePaintNodeData *) override; 0098 void updateLines(LineGridNode *node, LinePropertiesGroup *properties); 0099 0100 GridLines::Direction m_direction = Direction::Horizontal; 0101 XYChart *m_chart = nullptr; 0102 float m_spacing = 10.0; 0103 0104 std::unique_ptr<LinePropertiesGroup> m_major; 0105 std::unique_ptr<LinePropertiesGroup> m_minor; 0106 }; 0107 0108 #endif // GRIDLINES_H