File indexing completed on 2023-09-24 08:38:42

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 }