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 }