src/EditProductTab9.cpp

changeset 371
d03a426e0b6b
parent 298
180c77a81e15
child 434
ebf4996ab396
--- a/src/EditProductTab9.cpp	Tue Jul 26 11:15:37 2022 +0200
+++ b/src/EditProductTab9.cpp	Tue Jul 26 14:26:50 2022 +0200
@@ -463,13 +463,18 @@
 
     QDialog* dialog = new QDialog(this);
     dialog->resize(1024, 600);
+
+    QPushButton *saveButton = new QPushButton(tr("Save"));
+    saveButton->setAutoDefault(false);
+    QIcon icon1;
+    icon1.addFile(QString::fromUtf8(":icons/silk/disk.png"), QSize(), QIcon::Normal, QIcon::Off);
+    saveButton->setIcon(icon1);
+
     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->setOrientation(Qt::Vertical);
     buttonBox->setStandardButtons(QDialogButtonBox::Ok);
-    buttonBox->setCenterButtons(true);
+    buttonBox->addButton(saveButton,QDialogButtonBox::ActionRole);
 
     QLineSeries *pv_mlt = new QLineSeries();
     pv_mlt->setName("MLT");
@@ -501,7 +506,7 @@
     pwm_mlt->setName("MLT pwr");
     pwm_mlt->setOpacity(0.25);
 
-    QChart *chart = new QChart();
+    chart = new QChart();
     chart->setTitle(QString("%1 \"%2\"").arg(product->code).arg(product->name));
     chart->addSeries(pwm_mlt);	// Order is important, first drawn is lowest layer.
     chart->addSeries(sp_mlt);
@@ -531,15 +536,59 @@
     sp_mlt->attachAxis(axisY);
     pv_hlt->attachAxis(axisY);
 
-    QChartView *chartView = new QChartView(chart);
+    connect(pv_mlt, &QLineSeries::hovered, this, &EditProduct::tooltip);
+    connect(pv_hlt, &QLineSeries::hovered, this, &EditProduct::tooltip);
+
+    chartView = new QChartView(chart);
     chartView->setRenderHint(QPainter::Antialiasing);
-    dialog->setLayout(new QVBoxLayout);
+    dialog->setLayout(new QHBoxLayout);
     dialog->layout()->addWidget(chartView);
     dialog->layout()->addWidget(buttonBox);
 
     connect(buttonBox, SIGNAL(accepted()), dialog, SLOT(accept()));
+    connect(saveButton, SIGNAL(clicked()), this, SLOT(savePNG()));
+
     dialog->setModal(true);
     dialog->exec();
 }
 
 
+void EditProduct::savePNG()
+{
+    QString path = QFileDialog::getSaveFileName(this, tr("Save Image"), QDir::homePath() + "/brewday.png", tr("Image (*.png)"));
+    if (path.isEmpty()) {
+	QMessageBox::warning(this, tr("Save File"), tr("No image file selected."));
+	return;
+    }
+
+    QImage img((chartView->size()), QImage::Format_ARGB32);
+    QPainter painter;
+    painter.begin(&img);
+    chartView->render(&painter);
+    painter.setRenderHint(QPainter::Antialiasing);
+    painter.end();
+    img.save(path);
+}
+
+
+void EditProduct::tooltip(QPointF point, bool state)
+{
+    QAbstractSeries *series = qobject_cast<QAbstractSeries *>(sender());
+
+    if (t_tooltip == 0)
+	t_tooltip = new Callout(chart, series);
+
+    if (state) {
+	QDateTime timeis = QDateTime::fromMSecsSinceEpoch(point.x());
+	t_tooltip->setSeries(series);
+	t_tooltip->setText(QString("%1\n%2 %3°C").arg(timeis.toString("dd-MM-yyyy hh:mm")).arg(series->name()).arg(point.y(), 2, 'f', 1));
+	t_tooltip->setAnchor(point);
+	t_tooltip->setZValue(11);
+	t_tooltip->updateGeometry();
+	t_tooltip->show();
+    } else {
+	t_tooltip->hide();
+    }
+}
+
+

mercurial