Warning, file /libraries/kqtquickcharts/src/xychartpainter.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 2015 Jesper Hellesø Hansen <jesperhh@gmail.com> 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 "xychartpainter.h" 0020 0021 #include <QAbstractTableModel> 0022 #include <QPainter> 0023 0024 #include "xychartcore.h" 0025 #include "dimension.h" 0026 #include "xychartbackgroundpainter.h" 0027 0028 XYChartPainter::XYChartPainter(QQuickItem* parent) : 0029 QQuickPaintedItem(parent), 0030 m_xyChartCore(nullptr), 0031 m_backgroundPainter(nullptr), 0032 m_dimension(-1) 0033 { 0034 setFlag(QQuickItem::ItemHasContents, true); 0035 } 0036 0037 XYChartCore* XYChartPainter::xyChartCore() const 0038 { 0039 return m_xyChartCore; 0040 } 0041 0042 void XYChartPainter::setXYChartCore(XYChartCore* lineChartCore) 0043 { 0044 if (lineChartCore != m_xyChartCore) 0045 { 0046 if (m_xyChartCore) 0047 { 0048 m_xyChartCore->disconnect(this); 0049 } 0050 0051 m_xyChartCore = lineChartCore; 0052 0053 if (m_xyChartCore) 0054 { 0055 connect(m_xyChartCore, &ChartCore::updated, this, &XYChartPainter::triggerUpdate); 0056 } 0057 0058 update(); 0059 emit xyChartCoreChanged(); 0060 } 0061 } 0062 0063 XYChartBackgroundPainter* XYChartPainter::backgroundPainter() const 0064 { 0065 return m_backgroundPainter; 0066 } 0067 0068 void XYChartPainter::setBackgroundPainter(XYChartBackgroundPainter* backgroundPainter) 0069 { 0070 if (backgroundPainter != m_backgroundPainter) 0071 { 0072 m_backgroundPainter = backgroundPainter; 0073 triggerUpdate(); 0074 emit backgroundPainterChanged(); 0075 } 0076 } 0077 0078 int XYChartPainter::dimension() const 0079 { 0080 return m_dimension; 0081 } 0082 0083 void XYChartPainter::setDimension(int dimension) 0084 { 0085 if (dimension != m_dimension) 0086 { 0087 m_dimension = dimension; 0088 triggerUpdate(); 0089 emit dimensionChanged(); 0090 } 0091 } 0092 0093 void XYChartPainter::paint(QPainter* painter) 0094 { 0095 if (!m_xyChartCore || !m_backgroundPainter || m_dimension == -1) 0096 return; 0097 0098 painter->setRenderHints(QPainter::Antialiasing, true); 0099 0100 Dimension* dimension = m_xyChartCore->dimensionsList().at(m_dimension); 0101 0102 QPolygonF line = m_backgroundPainter->linePolygons().at(m_dimension); 0103 0104 switch (dimension->lineStyle()) 0105 { 0106 case Dimension::LineStyleSolid: 0107 painter->setPen(QPen(QBrush(dimension->color()), m_xyChartCore->lineWidth())); 0108 painter->drawPolyline(line); 0109 break; 0110 case Dimension::LineStyleDash: 0111 painter->setPen(QPen(QBrush(dimension->color()), m_xyChartCore->lineWidth(), Qt::DashLine)); 0112 painter->drawPolyline(line); 0113 break; 0114 case Dimension::LineStyleNone: 0115 // do nothing 0116 break; 0117 } 0118 } 0119 0120 void XYChartPainter::triggerUpdate() 0121 { 0122 if (!m_xyChartCore || !m_backgroundPainter || m_dimension == -1) 0123 return; 0124 0125 update(); 0126 }