From eb1e971bcdbeb953ece0df31a0336ce268a4e6ee Mon Sep 17 00:00:00 2001 From: peri4 Date: Tue, 7 Mar 2023 11:05:23 +0300 Subject: [PATCH] android fix, add export to CSV current view --- libs/graphic/graphic.cpp | 71 ++++++++++++++++++++++++++-------------- libs/graphic/graphic.h | 6 ++-- libs/graphic/graphic.ui | 12 +++++++ 3 files changed, 63 insertions(+), 26 deletions(-) diff --git a/libs/graphic/graphic.cpp b/libs/graphic/graphic.cpp index b0635fd..ffad2b2 100644 --- a/libs/graphic/graphic.cpp +++ b/libs/graphic/graphic.cpp @@ -98,15 +98,12 @@ Graphic::Graphic(QWidget * parent): QFrame(parent), canvas(0), line_x_min(this), ui->widgetLeft->hide(); ui->widgetRight->hide(); QList btnlist = {ui->graphic_buttonAutofit, - ui->graphic_checkGrid, ui->graphic_checkGuides, ui->graphic_buttonFullscreen, ui->graphic_checkBorderInputs, ui->graphic_checkLegend, ui->graphic_checkPause, ui->graphic_buttonConfigure, - ui->graphic_buttonSave, - ui->graphic_buttonExport, ui->graphic_buttonRecord, ui->graphic_buttonClear, ui->graphic_buttonClose}; @@ -132,6 +129,7 @@ Graphic::Graphic(QWidget * parent): QFrame(parent), canvas(0), line_x_min(this), ui->graphic_buttonAutofit->addAction(ui->graphic_actionExpandY); ui->graphic_buttonSaveMenu->addAction(ui->graphic_actionSaveImage); ui->graphic_buttonSaveMenu->addAction(ui->graphic_actionExportCSV); + ui->graphic_buttonSaveMenu->addAction(ui->graphic_actionExportCSV_View); line_x_min.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); line_x_max.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); ((QBoxLayout *)ui->widgetLY->layout())->insertWidget(0, &line_y_min); @@ -927,6 +925,7 @@ void Graphic::setButtons(Graphic::Buttons b) { ui->graphic_buttonConfigure->setVisible(b.testFlag(Configure)); ui->graphic_buttonSaveMenu->setVisible(b.testFlag(Save) || b.testFlag(Export)); ui->graphic_actionExportCSV->setVisible(b.testFlag(Export)); + ui->graphic_actionExportCSV_View->setVisible(b.testFlag(Export)); ui->graphic_actionSaveImage->setVisible(b.testFlag(Save)); ui->graphic_buttonClose->setVisible(b.testFlag(Close)); ui->graphic_checkPause->setVisible(b.testFlag(Pause)); @@ -1143,7 +1142,7 @@ void Graphic::saveImage(QString filename) { } -void Graphic::exportGraphics(QString filename, QChar decimal_point) { +void Graphic::exportGraphics(QString filename, QChar decimal_point, bool view_only) { ppath = filename; QFile f(filename); if (!f.open(QIODevice::ReadWrite)) { @@ -1160,6 +1159,20 @@ void Graphic::exportGraphics(QString filename, QChar decimal_point) { ts << ";" << (g.name + " " + (label_x.isEmpty() ? "X" : label_x)) << ";" << (g.name + " " + (label_y.isEmpty() ? "Y" : label_y)); } ts << "\n"; + QVector view_gr; + auto * source = &graphics; + if (view_only) { + for (const auto & g: graphics) { + GraphicType gt; + gt.visible = g.visible; + gt.polyline.reserve(g.polyline.size() / 8); + for (const auto & i: g.polyline) { + if (selrect.contains(i)) gt.polyline << i; + } + view_gr << gt; + } + source = &view_gr; + } bool has_data = true; int ind = 0; QString line; @@ -1167,8 +1180,8 @@ void Graphic::exportGraphics(QString filename, QChar decimal_point) { has_data = false; line.clear(); line += QString::number(ind + 1); - for (int i = 0; i < graphics.size(); ++i) { - GraphicType & g(graphics[i]); + for (int i = 0; i < source->size(); ++i) { + const GraphicType & g(source->at(i)); if (!g.visible) continue; if (ind >= g.polyline.size()) { line += ";;"; @@ -1679,6 +1692,18 @@ void Graphic::fillDateFormats() { } +void Graphic::askForExport(bool view_only) { + QString f = QFileDialog::getSaveFileName(this, tr("Export graphics"), ppath, "CSV(*.csv)"); + if (f.isEmpty()) return; + QStringList items; + items << "." + << ","; + bool ok; + QString item = QInputDialog::getItem(this, tr("Select decimal point"), tr("Decimal point:"), items, 0, false, &ok); + if (ok && !item.isEmpty()) exportGraphics(f, item.front(), view_only); +} + + void Graphic::drawGraphics() { if (isHover && ui->status->isVisible()) { ui->status->setText(tr("Cursor: ") + pointCoords(canvas2real(QPointF(curpos)))); @@ -1997,34 +2022,34 @@ void Graphic::addDateTime(QDateTime & dt, int * c, qint64 mul) { double Graphic::canvas2realX(double px) const { - int gbx = gridborder.x() + margins_.left(); - int wid = lastw - gbx - margins_.width(); - double cx = px - gbx; + int gbx = gridborder.x() + margins_.left(); + int wid = lastw - gbx - margins_.width(); + double cx = px - gbx; double sclx = selrect.width() / (double)wid; return cx * sclx + selrect.x(); } double Graphic::canvas2realY(double py) const { - int gby = gridborder.y() + margins_.top(); - int hei = lasth - gby - margins_.height(); - double cy = lasth - py - gby; + int gby = gridborder.y() + margins_.top(); + int hei = lasth - gby - margins_.height(); + double cy = lasth - py - gby; double scly = selrect.height() / (double)hei; return cy * scly + selrect.y(); } double Graphic::real2canvasX(double px) const { - int gbx = gridborder.x() + margins_.left(); - int wid = lastw - gbx - margins_.width(); + int gbx = gridborder.x() + margins_.left(); + int wid = lastw - gbx - margins_.width(); double sclx = selrect.width() / (double)wid; return (px - selrect.x()) / sclx + gbx; } double Graphic::real2canvasY(double py) const { - int gby = gridborder.y() + margins_.top(); - int hei = lasth - gby - margins_.height(); + int gby = gridborder.y() + margins_.top(); + int hei = lasth - gby - margins_.height(); double scly = selrect.height() / (double)hei; return lasth - gby - (py - selrect.y()) / scly; } @@ -2307,14 +2332,12 @@ void Graphic::on_graphic_actionSaveImage_triggered() { void Graphic::on_graphic_actionExportCSV_triggered() { - QString f = QFileDialog::getSaveFileName(this, tr("Export graphics"), ppath, "CSV(*.csv)"); - if (f.isEmpty()) return; - QStringList items; - items << "." - << ","; - bool ok; - QString item = QInputDialog::getItem(this, tr("Select decimal point"), tr("Decimal point:"), items, 0, false, &ok); - if (ok && !item.isEmpty()) exportGraphics(f, item.front()); + askForExport(false); +} + + +void Graphic::on_graphic_actionExportCSV_View_triggered() { + askForExport(true); } diff --git a/libs/graphic/graphic.h b/libs/graphic/graphic.h index 2f57dd9..b3bdd7e 100644 --- a/libs/graphic/graphic.h +++ b/libs/graphic/graphic.h @@ -244,7 +244,7 @@ public: GraphicsData graphicsData() const; QByteArray graphicsDataRaw() const; QWidget * viewport() const { return canvas; } - + QByteArray save(); void load(QByteArray ba); @@ -372,7 +372,7 @@ public slots: void setDefaultRect(const QRectF & rect); void autofit(); void saveImage(QString filename); - void exportGraphics(QString filename, QChar decimal_point); + void exportGraphics(QString filename, QChar decimal_point, bool view_only = false); void clear(); void update(); void updateGraphics(); @@ -432,6 +432,7 @@ protected: QString pointCoords(QPointF point, bool x = true, bool y = true); QPair gridMark(double v) const; void fillDateFormats(); + void askForExport(bool view_only); Ui::Graphic * ui; UGLWidget * canvas_gl; @@ -498,6 +499,7 @@ protected slots: void on_graphic_buttonFullscreen_clicked(); void on_graphic_actionSaveImage_triggered(); void on_graphic_actionExportCSV_triggered(); + void on_graphic_actionExportCSV_View_triggered(); void on_graphic_buttonRecord_clicked(bool checked); void on_graphic_checkGuides_toggled(bool checked); void on_graphic_actionExpandX_triggered(bool checked); diff --git a/libs/graphic/graphic.ui b/libs/graphic/graphic.ui index feabd5f..3c30c7e 100644 --- a/libs/graphic/graphic.ui +++ b/libs/graphic/graphic.ui @@ -468,6 +468,18 @@ Export to CSV... + + + + :/icons/document-edit.png:/icons/document-edit.png + + + Export to CSV current view ... + + + Export to CSV current view + +