Warning, file /libraries/kqtquickcharts/src/linechartpainter.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 * Copyright 2014 Sebastian Gottfried <sebastiangottfried@web.de> 0003 * 0004 * This library is free software; you can redistribute it and/or 0005 * modify it under the terms of the GNU Lesser General Public 0006 * License as published by the Free Software Foundation; either 0007 * version 2.1 of the License, or (at your option) version 3, or any 0008 * later version accepted by the membership of KDE e.V. (or its 0009 * successor approved by the membership of KDE e.V.), which shall 0010 * act as a proxy defined in Section 6 of version 3 of the license. 0011 * 0012 * This library is distributed in the hope that it will be useful, 0013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0015 * Lesser General Public License for more details. 0016 * 0017 * You should have received a copy of the GNU Lesser General Public 0018 */ 0019 #include "linechartpainter.h" 0020 0021 #include <QAbstractTableModel> 0022 #include <QPainter> 0023 0024 #include "linechartcore.h" 0025 #include "dimension.h" 0026 #include "linechartbackgroundpainter.h" 0027 0028 LineChartPainter::LineChartPainter(QQuickItem* parent) : 0029 QQuickPaintedItem(parent), 0030 m_lineChartCore(nullptr), 0031 m_backgroundPainter(nullptr), 0032 m_dimension(-1) 0033 { 0034 setFlag(QQuickItem::ItemHasContents, true); 0035 } 0036 0037 LineChartCore* LineChartPainter::lineChartCore() const 0038 { 0039 return m_lineChartCore; 0040 } 0041 0042 void LineChartPainter::setLineChartCore(LineChartCore* lineChartCore) 0043 { 0044 if (lineChartCore != m_lineChartCore) 0045 { 0046 if (m_lineChartCore) 0047 { 0048 m_lineChartCore->disconnect(this); 0049 } 0050 0051 m_lineChartCore = lineChartCore; 0052 0053 if (m_lineChartCore) 0054 { 0055 connect(m_lineChartCore, &ChartCore::updated, this, &LineChartPainter::triggerUpdate); 0056 } 0057 0058 update(); 0059 emit lineChartCoreChanged(); 0060 } 0061 } 0062 0063 LineChartBackgroundPainter* LineChartPainter::backgroundPainter() const 0064 { 0065 return m_backgroundPainter; 0066 } 0067 0068 void LineChartPainter::setBackgroundPainter(LineChartBackgroundPainter* backgroundPainter) 0069 { 0070 if (backgroundPainter != m_backgroundPainter) 0071 { 0072 m_backgroundPainter = backgroundPainter; 0073 triggerUpdate(); 0074 emit backgroundPainterChanged(); 0075 } 0076 } 0077 0078 int LineChartPainter::dimension() const 0079 { 0080 return m_dimension; 0081 } 0082 0083 void LineChartPainter::setDimension(int dimension) 0084 { 0085 if (dimension != m_dimension) 0086 { 0087 m_dimension = dimension; 0088 triggerUpdate(); 0089 emit dimensionChanged(); 0090 } 0091 } 0092 0093 void LineChartPainter::paint(QPainter* painter) 0094 { 0095 if (!m_lineChartCore || !m_backgroundPainter || m_dimension == -1) 0096 return; 0097 0098 painter->setRenderHints(QPainter::Antialiasing, true); 0099 0100 Dimension* dimension = m_lineChartCore->dimensionsList().at(m_dimension); 0101 0102 QPolygonF line = m_backgroundPainter->linePolygons().at(m_dimension); 0103 0104 painter->setPen(QPen(QBrush(dimension->color()), 3)); 0105 painter->drawPolyline(line); 0106 } 0107 0108 void LineChartPainter::triggerUpdate() 0109 { 0110 if (!m_lineChartCore || !m_backgroundPainter || m_dimension == -1) 0111 return; 0112 0113 updateWidth(); 0114 update(); 0115 } 0116 0117 void LineChartPainter::updateWidth() 0118 { 0119 setWidth(backgroundPainter()->width()); 0120 }