42 buttonBox->setObjectName(QString::fromUtf8("buttonBox")); |
42 buttonBox->setObjectName(QString::fromUtf8("buttonBox")); |
43 buttonBox->setOrientation(Qt::Vertical); |
43 buttonBox->setOrientation(Qt::Vertical); |
44 buttonBox->setStandardButtons(QDialogButtonBox::Ok); |
44 buttonBox->setStandardButtons(QDialogButtonBox::Ok); |
45 buttonBox->addButton(saveButton,QDialogButtonBox::ActionRole); |
45 buttonBox->addButton(saveButton,QDialogButtonBox::ActionRole); |
46 |
46 |
47 QSplineSeries *pv_air = new QSplineSeries(); |
47 QLineSeries *pv_air = new QLineSeries(); |
48 QSplineSeries *pv_beer = new QSplineSeries(); |
48 QLineSeries *pv_beer = new QLineSeries(); |
49 QSplineSeries *pv_chiller = new QSplineSeries(); |
49 QLineSeries *pv_chiller = new QLineSeries(); |
50 QSplineSeries *pwr_cool = new QSplineSeries(); |
50 QLineSeries *pwr_cool1 = new QLineSeries(); |
51 QSplineSeries *pwr_heat = new QSplineSeries(); |
51 QLineSeries *pwr_cool0 = new QLineSeries(); |
|
52 QLineSeries *pwr_heat1 = new QLineSeries(); // Top side of area |
|
53 QLineSeries *pwr_heat0 = new QLineSeries(); // Bottom side of area |
52 |
54 |
53 query.prepare("SELECT * FROM log_fermenter WHERE code=:code ORDER BY datetime"); |
55 query.prepare("SELECT * FROM log_fermenter WHERE code=:code ORDER BY datetime"); |
54 query.bindValue(":code", code); |
56 query.bindValue(":code", code); |
55 query.exec(); |
57 query.exec(); |
56 while (query.next()) { |
58 while (query.next()) { |
57 timestamp = query.value("datetime").toDateTime().toSecsSinceEpoch() * 1000; |
59 timestamp = query.value("datetime").toDateTime().toSecsSinceEpoch() * 1000; |
58 pv_air->append(timestamp, query.value("temp_air").toDouble()); |
60 pv_air->append(timestamp, query.value("temp_air").toDouble()); |
59 pv_beer->append(timestamp, query.value("temp_beer").toDouble()); |
61 pv_beer->append(timestamp, query.value("temp_beer").toDouble()); |
60 if (query.value("temp_chiller").toDouble() > 0) |
62 if (query.value("temp_chiller").toDouble() > 0) |
61 pv_chiller->append(timestamp, query.value("temp_chiller").toDouble()); |
63 pv_chiller->append(timestamp, query.value("temp_chiller").toDouble()); |
62 pwr_cool->append(timestamp, query.value("cooler_power").toDouble()); |
64 pwr_cool0->append(timestamp, 0); |
63 pwr_heat->append(timestamp, query.value("heater_power").toDouble()); |
65 pwr_cool1->append(timestamp, query.value("cooler_power").toInt()); |
|
66 pwr_heat0->append(timestamp, 0); |
|
67 pwr_heat1->append(timestamp, query.value("heater_power").toInt()); |
64 } |
68 } |
65 |
69 |
66 pv_air->setName(tr("Air")); |
70 pv_air->setName(tr("Air")); |
67 pv_air->setColor(QColorConstants::Svg::lightgreen); |
71 pv_air->setColor(QColorConstants::Svg::lightgreen); |
68 pv_beer->setName(tr("Beer")); |
72 pv_beer->setName(tr("Beer")); |
69 QPen pen(QColorConstants::Svg::navy); |
73 QPen pen(QColorConstants::Svg::navy); |
70 pen.setWidth(3); |
74 pen.setWidth(2); |
71 pv_beer->setPen(pen); |
75 pv_beer->setPen(pen); |
72 pv_chiller->setName(tr("Chiller")); |
76 pv_chiller->setName(tr("Chiller")); |
73 pv_chiller->setColor(QColorConstants::Svg::lightsalmon); |
77 pv_chiller->setColor(QColorConstants::Svg::lightsalmon); |
74 pv_chiller->setOpacity(0.75); |
78 pv_chiller->setOpacity(0.75); |
75 |
79 |
|
80 QAreaSeries *pwr_cool = new QAreaSeries(pwr_cool0, pwr_cool1); |
76 pwr_cool->setName("Cool %"); |
81 pwr_cool->setName("Cool %"); |
77 pwr_cool->setOpacity(0.25); |
82 pwr_cool->setOpacity(0.50); |
78 pwr_cool->setColor(QColorConstants::Blue); |
83 pwr_cool->setColor(QColorConstants::Blue); |
|
84 QAreaSeries *pwr_heat = new QAreaSeries(pwr_heat0, pwr_heat1); |
79 pwr_heat->setName("Heat %"); |
85 pwr_heat->setName("Heat %"); |
80 pwr_heat->setOpacity(0.25); |
86 pwr_heat->setOpacity(0.50); |
81 pwr_heat->setColor(QColorConstants::Red); |
87 pwr_heat->setColor(QColorConstants::Red); |
82 |
88 |
83 chart = new QChart(); |
89 chart = new QChart(); |
84 chart->setTitle(QString("%1 \"%2\"").arg(code).arg(name)); |
90 chart->setTitle(QString("%1 \"%2\"").arg(code).arg(name)); |
85 chart->addSeries(pwr_cool); |
91 chart->addSeries(pwr_cool); // Order is important, first drawn is lowest layer. |
86 chart->addSeries(pwr_heat); |
92 chart->addSeries(pwr_heat); |
87 chart->addSeries(pv_chiller); |
93 chart->addSeries(pv_chiller); |
88 chart->addSeries(pv_air); |
94 chart->addSeries(pv_air); |
89 chart->addSeries(pv_beer); |
95 chart->addSeries(pv_beer); // Top layer |
90 |
96 |
91 QDateTimeAxis *axisX = new QDateTimeAxis; |
97 QDateTimeAxis *axisX = new QDateTimeAxis; |
92 axisX->setTickCount(10); |
98 axisX->setTickCount(10); |
93 axisX->setFormat("dd MMM"); |
99 axisX->setFormat("dd MMM"); |
94 axisX->setTitleText(tr("Date")); |
100 axisX->setTitleText(tr("Date")); |
117 axisYR->setLabelsFont(QFont("Helvetica", 8, QFont::Normal)); |
123 axisYR->setLabelsFont(QFont("Helvetica", 8, QFont::Normal)); |
118 chart->addAxis(axisYR, Qt::AlignRight); |
124 chart->addAxis(axisYR, Qt::AlignRight); |
119 pwr_cool->attachAxis(axisYR); |
125 pwr_cool->attachAxis(axisYR); |
120 pwr_heat->attachAxis(axisYR); |
126 pwr_heat->attachAxis(axisYR); |
121 |
127 |
122 connect(pv_air, &QSplineSeries::hovered, this, &ChartFermenter::tooltip); |
128 connect(pv_air, &QLineSeries::hovered, this, &ChartFermenter::tooltip); |
123 connect(pv_beer, &QSplineSeries::hovered, this, &ChartFermenter::tooltip); |
129 connect(pv_beer, &QLineSeries::hovered, this, &ChartFermenter::tooltip); |
124 connect(pv_chiller, &QSplineSeries::hovered, this, &ChartFermenter::tooltip); |
130 connect(pv_chiller, &QLineSeries::hovered, this, &ChartFermenter::tooltip); |
125 |
131 |
126 chartView = new QChartView(chart); |
132 chartView = new QChartView(chart); |
127 chartView->setRenderHint(QPainter::Antialiasing); |
133 chartView->setRenderHint(QPainter::Antialiasing); |
128 dialog->setLayout(new QHBoxLayout); |
134 dialog->setLayout(new QHBoxLayout); |
129 dialog->layout()->addWidget(chartView); |
135 dialog->layout()->addWidget(chartView); |