src/ChartCarbonate.cpp

Sun, 03 Jul 2022 13:12:22 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sun, 03 Jul 2022 13:12:22 +0200
changeset 332
146874d7bb47
child 335
c4b4a2879bb8
permissions
-rw-r--r--

Added carbonation chart to it's own function. Added this chart to DetailCO2meter too.

/**
 * ChartCarbonate.cpp is part of bmsapp.
 *
 * bmsapp is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * bmsapp is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
#include "ChartCarbonate.h"
#include "MainWindow.h"


ChartCarbonate::ChartCarbonate(QString code, QString name, QWidget *parent) : QDialog(parent)
{
    QSqlQuery query;
    double timestamp;

    qDebug() << "ChartCarbonate:" << code << name;

    QDialog* dialog = new QDialog(parent);
    dialog->setWindowTitle(tr("BMSapp - Carbonation ") + "\"" + name + "\"");
    dialog->setObjectName(QString::fromUtf8("ChartCarbonate"));
    dialog->setWindowFlags(Qt::Window | Qt::WindowTitleHint | Qt::CustomizeWindowHint);
    dialog->resize(1024, 600);

    QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog);
    buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
    buttonBox->setGeometry(QRect(40, 565, 944, 36));
    buttonBox->setLayoutDirection(Qt::LeftToRight);
    buttonBox->setOrientation(Qt::Horizontal);
    buttonBox->setStandardButtons(QDialogButtonBox::Ok);
    buttonBox->setCenterButtons(true);

    QSplineSeries *temperature = new QSplineSeries();
    QSplineSeries *pressure = new QSplineSeries();

    query.prepare("SELECT * FROM log_co2pressure WHERE code=:code ORDER BY datetime");
    query.bindValue(":code", code);
    query.exec();
    while (query.next()) {
        timestamp = query.value("datetime").toDateTime().toSecsSinceEpoch() * 1000;
        temperature->append(timestamp, query.value("temperature").toDouble());
        pressure->append(timestamp, query.value("pressure").toDouble());
    }

    temperature->setName(tr("Temperature °C"));
    temperature->setColor(QColorConstants::Svg::red);
    pressure->setName(tr("Pressure bar"));
    QPen pen(QColorConstants::Svg::navy);
    pen.setWidth(3);
    pressure->setPen(pen);

    QChart *chart = new QChart();
    chart->setTitle(QString("%1 \"%2\"").arg(code).arg(name));
    chart->addSeries(temperature);
    chart->addSeries(pressure);

    QDateTimeAxis *axisX = new QDateTimeAxis;
    axisX->setTickCount(10);
    axisX->setFormat("dd MMM");
    axisX->setTitleText(tr("Date"));
    axisX->setLabelsFont(QFont("Helvetica", 8, QFont::Normal));
    chart->addAxis(axisX, Qt::AlignBottom);
    temperature->attachAxis(axisX);
    pressure->attachAxis(axisX);

    QValueAxis *axisYT = new QValueAxis;
    axisYT->setTickCount(10);
    axisYT->setLabelFormat("%.1f");
    axisYT->setTitleText(tr("Temperature °C"));
    axisYT->setLabelsFont(QFont("Helvetica", 8, QFont::Normal));
    chart->addAxis(axisYT, Qt::AlignRight);
    temperature->attachAxis(axisYT);

    QValueAxis *axisYP = new QValueAxis;
    axisYP->setTickCount(10);
    axisYP->setLabelFormat("%.1f");
    axisYP->setTitleText(tr("Pressure bar"));
    axisYP->setLabelsFont(QFont("Helvetica", 8, QFont::Normal));
    chart->addAxis(axisYP, Qt::AlignLeft);
    pressure->attachAxis(axisYP);

    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);
    dialog->setLayout(new QVBoxLayout);
    dialog->layout()->addWidget(chartView);
    dialog->layout()->addWidget(buttonBox);

    QObject::connect(buttonBox, SIGNAL(accepted()), dialog, SLOT(accept()));
    QObject::connect(buttonBox, SIGNAL(rejected()), dialog, SLOT(reject()));

    dialog->setModal(true);
    dialog->exec();
}


ChartCarbonate::~ChartCarbonate() {}

mercurial