From ee9bce86323ca25795a630e0cd3a63a752096507 Mon Sep 17 00:00:00 2001 From: Ronan Le Tiec Date: Sat, 15 May 2021 13:02:21 +0200 Subject: [PATCH 1/6] take orientation into account for export --- src/app/puzzle/vpmainwindow.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/app/puzzle/vpmainwindow.cpp b/src/app/puzzle/vpmainwindow.cpp index 6fb68568d..f6fed5329 100644 --- a/src/app/puzzle/vpmainwindow.cpp +++ b/src/app/puzzle/vpmainwindow.cpp @@ -1360,13 +1360,17 @@ void VPMainWindow::on_pushButtonSheetExport_clicked() { m_graphicsView->PrepareForExport(); - const QSizeF s = m_layout->GetFocusedSheet()->GetSheetSize(); - const QRectF r = QRectF(0, 0, s.width(), s.height()); + QSizeF size = QSizeF(m_layout->GetFocusedSheet()->GetSheetSize()); + if(m_layout->GetFocusedSheet()->GetOrientation() == PageOrientation::Landscape) + { + size.transpose(); + } + const QRectF rect = QRectF(0, 0, size.width(), size.height()); QSvgGenerator generator; generator.setFileName(fileName); - generator.setSize(QSize(qFloor(s.width()),qFloor(s.height()))); - generator.setViewBox(r); + generator.setSize(QSize(qFloor(size.width()),qFloor(size.height()))); + generator.setViewBox(rect); generator.setTitle(m_layout->GetFocusedSheet()->GetName()); generator.setDescription(m_layout->GetDescription().toHtmlEscaped()); generator.setResolution(static_cast(PrintDPI)); @@ -1376,12 +1380,11 @@ void VPMainWindow::on_pushButtonSheetExport_clicked() painter.setRenderHint(QPainter::Antialiasing, true); painter.setPen(QPen(Qt::black, qApp->Settings()->WidthHairLine(), Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); painter.setBrush ( QBrush ( Qt::NoBrush ) ); - m_graphicsView->GetScene()->render(&painter, r, r, Qt::IgnoreAspectRatio); + m_graphicsView->GetScene()->render(&painter, rect, rect, Qt::IgnoreAspectRatio); painter.end(); m_graphicsView->CleanAfterExport(); } - } //--------------------------------------------------------------------------------------------------------------------- From 588232a44280489b549b32ffa5aaa8879edff5ab Mon Sep 17 00:00:00 2001 From: Ronan Le Tiec Date: Sat, 15 May 2021 15:28:17 +0200 Subject: [PATCH 2/6] new class VPExporter --- src/app/puzzle/puzzle.pri | 2 + src/app/puzzle/vpexporter.cpp | 404 ++++++++++++++++++++++++++++++++ src/app/puzzle/vpexporter.h | 69 ++++++ src/app/puzzle/vpmainwindow.cpp | 55 +---- src/app/puzzle/vpmainwindow.h | 2 + 5 files changed, 489 insertions(+), 43 deletions(-) create mode 100644 src/app/puzzle/vpexporter.cpp create mode 100644 src/app/puzzle/vpexporter.h diff --git a/src/app/puzzle/puzzle.pri b/src/app/puzzle/puzzle.pri index fe479e253..209521fe3 100644 --- a/src/app/puzzle/puzzle.pri +++ b/src/app/puzzle/puzzle.pri @@ -10,6 +10,7 @@ SOURCES += \ $$PWD/vpcarrouselpiecelist.cpp \ $$PWD/vpcommandline.cpp \ $$PWD/vpcommands.cpp \ + $$PWD/vpexporter.cpp \ $$PWD/vpgraphicspiece.cpp \ $$PWD/vpgraphicssheet.cpp \ $$PWD/vpgraphicstilegrid.cpp \ @@ -37,6 +38,7 @@ HEADERS += \ $$PWD/vpcarrouselpiecelist.h \ $$PWD/vpcommandline.h \ $$PWD/vpcommands.h \ + $$PWD/vpexporter.h \ $$PWD/vpgraphicspiece.h \ $$PWD/vpgraphicssheet.h \ $$PWD/vpgraphicstilegrid.h \ diff --git a/src/app/puzzle/vpexporter.cpp b/src/app/puzzle/vpexporter.cpp new file mode 100644 index 000000000..bef34b011 --- /dev/null +++ b/src/app/puzzle/vpexporter.cpp @@ -0,0 +1,404 @@ +#include "vpexporter.h" + +#include +#include +#include + +#include "../vwidgets/vmaingraphicsscene.h" +#include "vpsheet.h" +#include "vpmaingraphicsview.h" + + +//--------------------------------------------------------------------------------------------------------------------- +VPExporter::VPExporter(VPLayout* layout, VCommonSettings *commonSettings): + m_layout(layout), + m_commonSettings(commonSettings) +{ + +} + +//--------------------------------------------------------------------------------------------------------------------- +VPExporter::~VPExporter() +{ + +} + +//--------------------------------------------------------------------------------------------------------------------- +void VPExporter::Export(LayoutExportFormats format, VPMainGraphicsView *mainGraphicsView) +{ + QString dir = QDir::homePath(); + QString filters(ExportFormatDescription(format)); + + // is it ok to have a null ptr hier as a parent? + QString fileName = QFileDialog::getSaveFileName(nullptr, tr("Save as"), + dir + QLatin1String("/") + m_layout->GetFocusedSheet()->GetName() + ExportFormatSuffix(format), + filters, nullptr +#ifdef Q_OS_LINUX + , QFileDialog::DontUseNativeDialog +#endif + ); + + if(not fileName.isEmpty()) + { + mainGraphicsView->PrepareForExport(); + + switch(format) + { + case LayoutExportFormats::SVG: + ExportToSVG(fileName, mainGraphicsView); + break; + + case LayoutExportFormats::PDF: + ExportToPDF(fileName, mainGraphicsView); + break; + + case LayoutExportFormats::PNG: + ExportToPNG(fileName, mainGraphicsView); + break; + + case LayoutExportFormats::TIF: + ExportToTIF(fileName, mainGraphicsView); + break; + + default: + // do nothing + break; + } + mainGraphicsView->CleanAfterExport(); + } +} + + +//--------------------------------------------------------------------------------------------------------------------- +void VPExporter::ExportToSVG(QString fileName, VPMainGraphicsView *mainGraphicsView) +{ + QSizeF size = QSizeF(m_layout->GetFocusedSheet()->GetSheetSize()); + if(m_layout->GetFocusedSheet()->GetOrientation() == PageOrientation::Landscape) + { + size.transpose(); + } + const QRectF rect = QRectF(0, 0, size.width(), size.height()); + + QSvgGenerator generator; + generator.setFileName(fileName); + generator.setResolution(static_cast(PrintDPI)); + generator.setSize(QSize(qRound(size.width()),qRound(size.height()))); + generator.setViewBox(rect); + generator.setTitle(m_layout->GetFocusedSheet()->GetName()); + generator.setDescription(m_layout->GetDescription().toHtmlEscaped()); + + QPainter painter; + painter.begin(&generator); + painter.setRenderHint(QPainter::Antialiasing, true); + painter.setPen(QPen(Qt::black, m_commonSettings->WidthHairLine(), Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); + painter.setBrush ( QBrush ( Qt::NoBrush ) ); + mainGraphicsView->GetScene()->render(&painter, rect, rect, Qt::IgnoreAspectRatio); + painter.end(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VPExporter::ExportToPDF(QString fileName, VPMainGraphicsView *mainGraphicsView) +{ + QSizeF size = QSizeF(m_layout->GetFocusedSheet()->GetSheetSize()); + if(m_layout->GetFocusedSheet()->GetOrientation() == PageOrientation::Landscape) + { + size.transpose(); + } + const QRectF rect = QRectF(0, 0, size.width(), size.height()); + + QPrinter printer; + printer.setCreator(QGuiApplication::applicationDisplayName() + QChar(QChar::Space) + + QCoreApplication::applicationVersion()); + printer.setOutputFormat(QPrinter::PdfFormat); + printer.setOutputFileName(fileName); + printer.setDocName(QFileInfo(fileName).fileName()); + printer.setResolution(static_cast(PrintDPI)); + printer.setPageOrientation(QPageLayout::Portrait); + printer.setFullPage(true); + + qreal width = FromPixel(size.width(), Unit::Mm); + qreal height = FromPixel(size.height(), Unit::Mm); + + if (not printer.setPageSize(QPageSize(QSizeF(width, height), QPageSize::Millimeter))) + { + qWarning() << tr("Cannot set printer page size"); + } + + QPainter painter; + if (not painter.begin(&printer)) + { // failed to open file + qCritical() << qUtf8Printable(tr("Can't open file '%1'").arg(fileName)); + return; + } + painter.setRenderHint(QPainter::Antialiasing, true); + painter.setPen(QPen(Qt::black, m_commonSettings->WidthHairLine(), Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); + painter.setBrush ( QBrush ( Qt::NoBrush ) ); + mainGraphicsView->GetScene()->render(&painter, rect, rect, Qt::IgnoreAspectRatio); + painter.end(); +} + + +//--------------------------------------------------------------------------------------------------------------------- +void VPExporter::ExportToPNG(QString filename, VPMainGraphicsView *mainGraphicsView) +{ + QSizeF size = QSizeF(m_layout->GetFocusedSheet()->GetSheetSize()); + if(m_layout->GetFocusedSheet()->GetOrientation() == PageOrientation::Landscape) + { + size.transpose(); + } + const QRectF rect = QRectF(0, 0, size.width(), size.height()); + + QImage image(QSize(qFloor(size.width()), qFloor((size.height()))), QImage::Format_ARGB32); + image.fill(Qt::white); + + QPainter painter(&image); + painter.setRenderHint(QPainter::Antialiasing, true); + painter.setPen(QPen(Qt::black, m_commonSettings->WidthHairLine(), Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); + painter.setBrush(QBrush(Qt::NoBrush)); + + mainGraphicsView->GetScene()->render(&painter, rect, rect, Qt::IgnoreAspectRatio); + image.save(filename); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VPExporter::ExportToTIF(QString filename, VPMainGraphicsView *mainGraphicsView) +{ + QSizeF size = QSizeF(m_layout->GetFocusedSheet()->GetSheetSize()); + if(m_layout->GetFocusedSheet()->GetOrientation() == PageOrientation::Landscape) + { + size.transpose(); + } + const QRectF rect = QRectF(0, 0, size.width(), size.height()); + + QImage image(QSize(qFloor(size.width()), qFloor((size.height()))), QImage::Format_ARGB32); + image.fill(Qt::white); + + QPainter painter(&image); + painter.setRenderHint(QPainter::Antialiasing, true); + painter.setPen(QPen(Qt::black, m_commonSettings->WidthHairLine(), Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); + painter.setBrush(QBrush(Qt::NoBrush)); + + mainGraphicsView->GetScene()->render(&painter, rect, rect, Qt::IgnoreAspectRatio); + + + // FIXME, not working in ubuntu 21.04 of rlt "format not supported" + + QImageWriter writer; + writer.setFormat("tiff"); + writer.setCompression(1); // LZW-compression + writer.setFileName(filename); + + if (not writer.write(image)) + { // failed to save file + qCritical() << qUtf8Printable(tr("Can't save file '%1'. Error: %2.").arg(filename, writer.errorString())); + return; + } +} + + + +// FIXME Bad copy paste from DialogSaveLayout, because I didn't know how to call this function from here +// to be removed as soon as I know how to call the central function from valentina +//--------------------------------------------------------------------------------------------------------------------- +QString VPExporter::ExportFormatDescription(LayoutExportFormats format) +{ + const QString dxfSuffix = QStringLiteral("(*.dxf)"); + const QString dxfFlatFilesStr = tr("(flat) files"); + const QString filesStr = tr("files"); + + switch(format) + { + case LayoutExportFormats::SVG: + return QStringLiteral("Svg %1 (*.svg)").arg(filesStr); + case LayoutExportFormats::PDF: + return QStringLiteral("PDF %1 (*.pdf)").arg(filesStr); + case LayoutExportFormats::PNG: + return tr("Image files") + QStringLiteral(" (*.png)"); + case LayoutExportFormats::OBJ: + return QStringLiteral("Wavefront OBJ (*.obj)"); + case LayoutExportFormats::PS: + return QStringLiteral("PS %1 (*.ps)").arg(filesStr); + case LayoutExportFormats::EPS: + return QStringLiteral("EPS %1 (*.eps)").arg(filesStr); + case LayoutExportFormats::DXF_AC1006_Flat: + return QStringLiteral("AutoCAD DXF R10 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1009_Flat: + return QStringLiteral("AutoCAD DXF R11/12 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1012_Flat: + return QStringLiteral("AutoCAD DXF R13 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1014_Flat: + return QStringLiteral("AutoCAD DXF R14 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1015_Flat: + return QStringLiteral("AutoCAD DXF 2000 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1018_Flat: + return QStringLiteral("AutoCAD DXF 2004 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1021_Flat: + return QStringLiteral("AutoCAD DXF 2007 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1024_Flat: + return QStringLiteral("AutoCAD DXF 2010 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1027_Flat: + return QStringLiteral("AutoCAD DXF 2013 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1006_AAMA: + return QStringLiteral("AutoCAD DXF R10 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1009_AAMA: + return QStringLiteral("AutoCAD DXF R11/12 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1012_AAMA: + return QStringLiteral("AutoCAD DXF R13 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1014_AAMA: + return QStringLiteral("AutoCAD DXF R14 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1015_AAMA: + return QStringLiteral("AutoCAD DXF 2000 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1018_AAMA: + return QStringLiteral("AutoCAD DXF 2004 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1021_AAMA: + return QStringLiteral("AutoCAD DXF 2007 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1024_AAMA: + return QStringLiteral("AutoCAD DXF 2010 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1027_AAMA: + return QStringLiteral("AutoCAD DXF 2013 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1006_ASTM: + return QStringLiteral("AutoCAD DXF R10 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1009_ASTM: + return QStringLiteral("AutoCAD DXF R11/12 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1012_ASTM: + return QStringLiteral("AutoCAD DXF R13 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1014_ASTM: + return QStringLiteral("AutoCAD DXF R14 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1015_ASTM: + return QStringLiteral("AutoCAD DXF 2000 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1018_ASTM: + return QStringLiteral("AutoCAD DXF 2004 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1021_ASTM: + return QStringLiteral("AutoCAD DXF 2007 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1024_ASTM: + return QStringLiteral("AutoCAD DXF 2010 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1027_ASTM: + return QStringLiteral("AutoCAD DXF 2013 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::PDFTiled: + return QStringLiteral("PDF %1 %2 (*.pdf)").arg(tr("tiled"), filesStr); + case LayoutExportFormats::NC: + return QStringLiteral("%1 %2 (*.nc)").arg(tr("Numerical control"), filesStr); + case LayoutExportFormats::RLD: + return QStringLiteral("%1 %2 (*.rld)").arg(tr("Raw Layout Data"), filesStr); + case LayoutExportFormats::TIF: + return QStringLiteral("TIFF %1 (*.tif)").arg(filesStr); + default: + return QString(); + } +} + +// FIXME Bad copy paste from DialogSaveLayout, because I didn't know how to call this function from here +// to be removed as soon as I know how to call the central function from valentina +//--------------------------------------------------------------------------------------------------------------------- +QString VPExporter::ExportFormatSuffix(LayoutExportFormats format) +{ + switch(format) + { + case LayoutExportFormats::SVG: + return QStringLiteral(".svg"); + case LayoutExportFormats::PDF: + case LayoutExportFormats::PDFTiled: + return QStringLiteral(".pdf"); + case LayoutExportFormats::PNG: + return QStringLiteral(".png"); + case LayoutExportFormats::OBJ: + return QStringLiteral(".obj"); + case LayoutExportFormats::PS: + return QStringLiteral(".ps"); + case LayoutExportFormats::EPS: + return QStringLiteral(".eps"); + case LayoutExportFormats::DXF_AC1006_Flat: + case LayoutExportFormats::DXF_AC1009_Flat: + case LayoutExportFormats::DXF_AC1012_Flat: + case LayoutExportFormats::DXF_AC1014_Flat: + case LayoutExportFormats::DXF_AC1015_Flat: + case LayoutExportFormats::DXF_AC1018_Flat: + case LayoutExportFormats::DXF_AC1021_Flat: + case LayoutExportFormats::DXF_AC1024_Flat: + case LayoutExportFormats::DXF_AC1027_Flat: + case LayoutExportFormats::DXF_AC1006_AAMA: + case LayoutExportFormats::DXF_AC1009_AAMA: + case LayoutExportFormats::DXF_AC1012_AAMA: + case LayoutExportFormats::DXF_AC1014_AAMA: + case LayoutExportFormats::DXF_AC1015_AAMA: + case LayoutExportFormats::DXF_AC1018_AAMA: + case LayoutExportFormats::DXF_AC1021_AAMA: + case LayoutExportFormats::DXF_AC1024_AAMA: + case LayoutExportFormats::DXF_AC1027_AAMA: + case LayoutExportFormats::DXF_AC1006_ASTM: + case LayoutExportFormats::DXF_AC1009_ASTM: + case LayoutExportFormats::DXF_AC1012_ASTM: + case LayoutExportFormats::DXF_AC1014_ASTM: + case LayoutExportFormats::DXF_AC1015_ASTM: + case LayoutExportFormats::DXF_AC1018_ASTM: + case LayoutExportFormats::DXF_AC1021_ASTM: + case LayoutExportFormats::DXF_AC1024_ASTM: + case LayoutExportFormats::DXF_AC1027_ASTM: + return QStringLiteral(".dxf"); + case LayoutExportFormats::NC: + return QStringLiteral(".nc"); + case LayoutExportFormats::RLD: + return QStringLiteral(".rld"); + case LayoutExportFormats::TIF: + return QStringLiteral(".tif"); + default: + return QString(); + } +} + + +// FIXME Bad copy paste from DialogSaveLayout, because I didn't know how to call this function from here +// to be removed as soon as I know how to call the central function from valentina +//--------------------------------------------------------------------------------------------------------------------- +QVector > VPExporter::InitFormats() +{ + QVector> list; + + auto InitFormat = [&list](LayoutExportFormats format) + { + list.append(std::make_pair(ExportFormatDescription(format), format)); + }; + + InitFormat(LayoutExportFormats::SVG); + InitFormat(LayoutExportFormats::PDF); + InitFormat(LayoutExportFormats::PNG); + +// InitFormat(LayoutExportFormats::OBJ); + +// InitFormat(LayoutExportFormats::PS); +// InitFormat(LayoutExportFormats::EPS); + +// InitFormat(LayoutExportFormats::DXF_AC1006_Flat); +// InitFormat(LayoutExportFormats::DXF_AC1009_Flat); +// InitFormat(LayoutExportFormats::DXF_AC1012_Flat); +// InitFormat(LayoutExportFormats::DXF_AC1014_Flat); +// InitFormat(LayoutExportFormats::DXF_AC1015_Flat); +// InitFormat(LayoutExportFormats::DXF_AC1018_Flat); +// InitFormat(LayoutExportFormats::DXF_AC1021_Flat); +// InitFormat(LayoutExportFormats::DXF_AC1024_Flat); +// InitFormat(LayoutExportFormats::DXF_AC1027_Flat); +// InitFormat(LayoutExportFormats::DXF_AC1006_AAMA); +// InitFormat(LayoutExportFormats::DXF_AC1009_AAMA); +// InitFormat(LayoutExportFormats::DXF_AC1012_AAMA); +// InitFormat(LayoutExportFormats::DXF_AC1014_AAMA); +// InitFormat(LayoutExportFormats::DXF_AC1015_AAMA); +// InitFormat(LayoutExportFormats::DXF_AC1018_AAMA); +// InitFormat(LayoutExportFormats::DXF_AC1021_AAMA); +// InitFormat(LayoutExportFormats::DXF_AC1024_AAMA); +// InitFormat(LayoutExportFormats::DXF_AC1027_AAMA); +// InitFormat(LayoutExportFormats::DXF_AC1006_ASTM); +// InitFormat(LayoutExportFormats::DXF_AC1009_ASTM); +// InitFormat(LayoutExportFormats::DXF_AC1012_ASTM); +// InitFormat(LayoutExportFormats::DXF_AC1014_ASTM); +// InitFormat(LayoutExportFormats::DXF_AC1015_ASTM); +// InitFormat(LayoutExportFormats::DXF_AC1018_ASTM); +// InitFormat(LayoutExportFormats::DXF_AC1021_ASTM); +// InitFormat(LayoutExportFormats::DXF_AC1024_ASTM); +// InitFormat(LayoutExportFormats::DXF_AC1027_ASTM); +// InitFormat(LayoutExportFormats::PDFTiled); +// InitFormat(LayoutExportFormats::NC); +// InitFormat(LayoutExportFormats::RLD); + InitFormat(LayoutExportFormats::TIF); + + return list; +} diff --git a/src/app/puzzle/vpexporter.h b/src/app/puzzle/vpexporter.h new file mode 100644 index 000000000..46627c088 --- /dev/null +++ b/src/app/puzzle/vpexporter.h @@ -0,0 +1,69 @@ +#ifndef VPEXPORTER_H +#define VPEXPORTER_H + +#include + +#include "vplayout.h" +#include "../vmisc/def.h" +#include "vcommonsettings.h" +#include "../vlayout/vlayoutdef.h" + +//#include "../dialogs/dialogsavelayout.h" + +class VPMainGraphicsView; + +class VPExporter : QObject +{ + Q_OBJECT + +public: + VPExporter(VPLayout* layout, VCommonSettings *commonSettings); + ~VPExporter(); + + void Export(LayoutExportFormats format, VPMainGraphicsView *mainGraphicsView); + + + // FIXME Bad copy paste from DialogSaveLayout, because I didn't know how to call this function from here + // to be removed as soon as I know how to call the central function from valentina + QVector > InitFormats(); + +private: + Q_DISABLE_COPY(VPExporter) + + VPLayout *m_layout{nullptr}; + VCommonSettings *m_commonSettings{nullptr}; + + /** + * @brief ExportSVG exports the current maingraphicViews to an svg file + * @param fileName the file name of the export + */ + void ExportToSVG(QString fileName, VPMainGraphicsView *mainGraphicsView); + + /** + * @brief ExportSVG exports the current maingraphicViews to a pdf file + * @param fileName the file name of the export + */ + void ExportToPDF(QString filename, VPMainGraphicsView *mainGraphicsView); + + /** + * @brief ExportSVG exports the current maingraphicViews to a png file + * @param fileName the file name of the export + */ + void ExportToPNG(QString filename, VPMainGraphicsView *mainGraphicsView); + + /** + * @brief ExportSVG exports the current maingraphicViews to a TIF file + * @param fileName the file name of the export + */ + void ExportToTIF(QString filename, VPMainGraphicsView *mainGraphicsView); + + + // FIXME Bad copy paste from DialogSaveLayout, because I didn't know how to call this function from here + // to be removed as soon as I know how to call the central function from valentina + static QString ExportFormatDescription(LayoutExportFormats format); + static QString ExportFormatSuffix(LayoutExportFormats format); + + +}; + +#endif // VPEXPORTER_H diff --git a/src/app/puzzle/vpmainwindow.cpp b/src/app/puzzle/vpmainwindow.cpp index f6fed5329..17d467911 100644 --- a/src/app/puzzle/vpmainwindow.cpp +++ b/src/app/puzzle/vpmainwindow.cpp @@ -92,6 +92,9 @@ VPMainWindow::VPMainWindow(const VPCommandLinePtr &cmd, QWidget *parent) : m_tileFactory = new VPTileFactory(m_layout, qApp->Settings()); m_tileFactory->refreshTileInfos(); + // init the export tool + m_exporter = new VPExporter(m_layout, qApp->Settings()); + InitMenuBar(); InitProperties(); InitCarrousel(); @@ -104,7 +107,6 @@ VPMainWindow::VPMainWindow(const VPCommandLinePtr &cmd, QWidget *parent) : ReadSettings(); - } //--------------------------------------------------------------------------------------------------------------------- @@ -341,6 +343,13 @@ void VPMainWindow::InitPropertyTabCurrentSheet() ui->comboBoxSheetTemplate->blockSignals(false); ui->comboBoxSheetTemplate->setCurrentIndex(0); + + // ---------------------- export format -------------------------- + + for (auto &v : m_exporter->InitFormats()) + { + ui->comboBoxSheetExportFormat->addItem(v.first, QVariant(static_cast(v.second))); + } } //--------------------------------------------------------------------------------------------------------------------- @@ -1274,8 +1283,6 @@ void VPMainWindow::on_checkBoxTilesShowTiles_toggled(bool checked) //--------------------------------------------------------------------------------------------------------------------- void VPMainWindow::on_pushButtonTilesExport_clicked() { - // svg export to do some test for the first test - QString dir = QDir::homePath(); QString filters(tr("PDF Files") + QLatin1String("(*.pdf)")); QString fileName = QFileDialog::getSaveFileName(this, tr("Save as"), @@ -1344,47 +1351,9 @@ void VPMainWindow::on_checkBoxSheetStickyEdges_toggled(bool checked) //--------------------------------------------------------------------------------------------------------------------- void VPMainWindow::on_pushButtonSheetExport_clicked() { - // svg export to do some test for the first test + LayoutExportFormats format = static_cast(ui->comboBoxSheetExportFormat->currentData().toInt()); - QString dir = QDir::homePath(); - QString filters(tr("SVG Files") + QLatin1String("(*.svg)")); - QString fileName = QFileDialog::getSaveFileName(this, tr("Save as"), - dir + QLatin1String("/") + m_layout->GetFocusedSheet()->GetName() + QLatin1String(".svg"), - filters, nullptr -#ifdef Q_OS_LINUX - , QFileDialog::DontUseNativeDialog -#endif - ); - - if(not fileName.isEmpty()) - { - m_graphicsView->PrepareForExport(); - - QSizeF size = QSizeF(m_layout->GetFocusedSheet()->GetSheetSize()); - if(m_layout->GetFocusedSheet()->GetOrientation() == PageOrientation::Landscape) - { - size.transpose(); - } - const QRectF rect = QRectF(0, 0, size.width(), size.height()); - - QSvgGenerator generator; - generator.setFileName(fileName); - generator.setSize(QSize(qFloor(size.width()),qFloor(size.height()))); - generator.setViewBox(rect); - generator.setTitle(m_layout->GetFocusedSheet()->GetName()); - generator.setDescription(m_layout->GetDescription().toHtmlEscaped()); - generator.setResolution(static_cast(PrintDPI)); - - QPainter painter; - painter.begin(&generator); - painter.setRenderHint(QPainter::Antialiasing, true); - painter.setPen(QPen(Qt::black, qApp->Settings()->WidthHairLine(), Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); - painter.setBrush ( QBrush ( Qt::NoBrush ) ); - m_graphicsView->GetScene()->render(&painter, rect, rect, Qt::IgnoreAspectRatio); - painter.end(); - - m_graphicsView->CleanAfterExport(); - } + m_exporter->Export(format, m_graphicsView); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/puzzle/vpmainwindow.h b/src/app/puzzle/vpmainwindow.h index 1862bc126..5085a675b 100644 --- a/src/app/puzzle/vpmainwindow.h +++ b/src/app/puzzle/vpmainwindow.h @@ -40,6 +40,7 @@ #include "vppiece.h" #include "../vlayout/vlayoutpiece.h" #include "vptilefactory.h" +#include "vpexporter.h" #include "vpcommandline.h" #include "../vlayout/vlayoutdef.h" @@ -107,6 +108,7 @@ private: QListm_selectedPieces{QList()}; VPTileFactory *m_tileFactory{nullptr}; + VPExporter *m_exporter{nullptr}; /** * @brief spin box with the scale factor of the graphic view From e399c6bf1e69d5f702fc1d0758d198f16563255c Mon Sep 17 00:00:00 2001 From: Ronan Le Tiec Date: Sat, 15 May 2021 15:37:21 +0200 Subject: [PATCH 3/6] max value of placement grid --- src/app/puzzle/vpmainwindow.ui | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/app/puzzle/vpmainwindow.ui b/src/app/puzzle/vpmainwindow.ui index fd9e9a7d7..360554bfa 100644 --- a/src/app/puzzle/vpmainwindow.ui +++ b/src/app/puzzle/vpmainwindow.ui @@ -650,7 +650,7 @@ 0 - 0 + -153 342 870 @@ -916,7 +916,11 @@ - + + + 1000.000000000000000 + + @@ -926,7 +930,11 @@ - + + + 1000.000000000000000 + + From fb2a7f8714da32d9cb317006cada21c0007c8ac6 Mon Sep 17 00:00:00 2001 From: Ronan Date: Sat, 22 May 2021 09:25:39 +0200 Subject: [PATCH 4/6] refactoring for Settings --- src/app/puzzle/vpmainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/puzzle/vpmainwindow.cpp b/src/app/puzzle/vpmainwindow.cpp index 553764c0f..51b23b004 100644 --- a/src/app/puzzle/vpmainwindow.cpp +++ b/src/app/puzzle/vpmainwindow.cpp @@ -99,7 +99,7 @@ VPMainWindow::VPMainWindow(const VPCommandLinePtr &cmd, QWidget *parent) : m_tileFactory->refreshTileInfos(); // init the export tool - m_exporter = new VPExporter(m_layout, qApp->Settings()); + m_exporter = new VPExporter(m_layout, VPApplication::VApp()->Settings()); // init status bar statusBar()->addPermanentWidget(m_statusLabel, 1); From 1c6aebec4f7a56534af6c79c9beafaf0535f4380 Mon Sep 17 00:00:00 2001 From: Ronan Date: Sat, 22 May 2021 11:00:42 +0200 Subject: [PATCH 5/6] VPExporter inherits from VLayoutExporter --- src/app/puzzle/puzzle.pro | 18 ++++ src/app/puzzle/vpexporter.cpp | 164 ++++---------------------------- src/app/puzzle/vpexporter.h | 36 +------ src/app/puzzle/vpmainwindow.cpp | 9 +- src/app/puzzle/vpmainwindow.h | 1 - 5 files changed, 46 insertions(+), 182 deletions(-) diff --git a/src/app/puzzle/puzzle.pro b/src/app/puzzle/puzzle.pro index b77dc420f..71ccbcc54 100644 --- a/src/app/puzzle/puzzle.pro +++ b/src/app/puzzle/puzzle.pro @@ -260,6 +260,24 @@ DEPENDPATH += $$PWD/../../libs/vgeometry win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vgeometry/$${DESTDIR}/vgeometry.lib else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vgeometry/$${DESTDIR}/libvgeometry.a +# VObj static library +unix|win32: LIBS += -L$$OUT_PWD/../../libs/vobj/$${DESTDIR}/ -lvobj + +INCLUDEPATH += $$PWD/../../libs/vobj +DEPENDPATH += $$PWD/../../libs/vobj + +win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vobj/$${DESTDIR}/vobj.lib +else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vobj/$${DESTDIR}/libvobj.a + +# VDxf static library +unix|win32: LIBS += -L$$OUT_PWD/../../libs/vdxf/$${DESTDIR}/ -lvdxf + +INCLUDEPATH += $$PWD/../../libs/vdxf +DEPENDPATH += $$PWD/../../libs/vdxf + +win32:!win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vdxf/$${DESTDIR}/vdxf.lib +else:unix|win32-g++: PRE_TARGETDEPS += $$OUT_PWD/../../libs/vdxf/$${DESTDIR}/libvdxf.a + # QMuParser library win32:CONFIG(release, debug|release): LIBS += -L$${OUT_PWD}/../../libs/qmuparser/$${DESTDIR} -lqmuparser2 else:win32:CONFIG(debug, debug|release): LIBS += -L$${OUT_PWD}/../../libs/qmuparser/$${DESTDIR} -lqmuparser2 diff --git a/src/app/puzzle/vpexporter.cpp b/src/app/puzzle/vpexporter.cpp index bef34b011..af02f71eb 100644 --- a/src/app/puzzle/vpexporter.cpp +++ b/src/app/puzzle/vpexporter.cpp @@ -1,8 +1,6 @@ #include "vpexporter.h" -#include -#include -#include +#include #include "../vwidgets/vmaingraphicsscene.h" #include "vpsheet.h" @@ -10,9 +8,7 @@ //--------------------------------------------------------------------------------------------------------------------- -VPExporter::VPExporter(VPLayout* layout, VCommonSettings *commonSettings): - m_layout(layout), - m_commonSettings(commonSettings) +VPExporter::VPExporter() { } @@ -24,14 +20,14 @@ VPExporter::~VPExporter() } //--------------------------------------------------------------------------------------------------------------------- -void VPExporter::Export(LayoutExportFormats format, VPMainGraphicsView *mainGraphicsView) +void VPExporter::Export(VPLayout* layout, LayoutExportFormats format, VPMainGraphicsView *mainGraphicsView) { QString dir = QDir::homePath(); QString filters(ExportFormatDescription(format)); // is it ok to have a null ptr hier as a parent? QString fileName = QFileDialog::getSaveFileName(nullptr, tr("Save as"), - dir + QLatin1String("/") + m_layout->GetFocusedSheet()->GetName() + ExportFormatSuffix(format), + dir + QLatin1String("/") + layout->GetFocusedSheet()->GetName() + ExportFormatSuffix(format), filters, nullptr #ifdef Q_OS_LINUX , QFileDialog::DontUseNativeDialog @@ -42,161 +38,41 @@ void VPExporter::Export(LayoutExportFormats format, VPMainGraphicsView *mainGrap { mainGraphicsView->PrepareForExport(); + SetFileName(fileName); + + QSizeF size = QSizeF(layout->GetFocusedSheet()->GetSheetSize()); + if(layout->GetFocusedSheet()->GetOrientation() == PageOrientation::Landscape) + { + size.transpose(); + } + const QRectF rect = QRectF(0, 0, size.width(), size.height()); + + SetImageRect(rect); + switch(format) { case LayoutExportFormats::SVG: - ExportToSVG(fileName, mainGraphicsView); + ExportToSVG(mainGraphicsView->scene()); break; case LayoutExportFormats::PDF: - ExportToPDF(fileName, mainGraphicsView); - break; - - case LayoutExportFormats::PNG: - ExportToPNG(fileName, mainGraphicsView); + ExportToPDF(mainGraphicsView->scene()); break; case LayoutExportFormats::TIF: - ExportToTIF(fileName, mainGraphicsView); + ExportToTIF(mainGraphicsView->scene()); break; default: // do nothing break; } + mainGraphicsView->CleanAfterExport(); } } -//--------------------------------------------------------------------------------------------------------------------- -void VPExporter::ExportToSVG(QString fileName, VPMainGraphicsView *mainGraphicsView) -{ - QSizeF size = QSizeF(m_layout->GetFocusedSheet()->GetSheetSize()); - if(m_layout->GetFocusedSheet()->GetOrientation() == PageOrientation::Landscape) - { - size.transpose(); - } - const QRectF rect = QRectF(0, 0, size.width(), size.height()); - - QSvgGenerator generator; - generator.setFileName(fileName); - generator.setResolution(static_cast(PrintDPI)); - generator.setSize(QSize(qRound(size.width()),qRound(size.height()))); - generator.setViewBox(rect); - generator.setTitle(m_layout->GetFocusedSheet()->GetName()); - generator.setDescription(m_layout->GetDescription().toHtmlEscaped()); - - QPainter painter; - painter.begin(&generator); - painter.setRenderHint(QPainter::Antialiasing, true); - painter.setPen(QPen(Qt::black, m_commonSettings->WidthHairLine(), Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); - painter.setBrush ( QBrush ( Qt::NoBrush ) ); - mainGraphicsView->GetScene()->render(&painter, rect, rect, Qt::IgnoreAspectRatio); - painter.end(); -} - -//--------------------------------------------------------------------------------------------------------------------- -void VPExporter::ExportToPDF(QString fileName, VPMainGraphicsView *mainGraphicsView) -{ - QSizeF size = QSizeF(m_layout->GetFocusedSheet()->GetSheetSize()); - if(m_layout->GetFocusedSheet()->GetOrientation() == PageOrientation::Landscape) - { - size.transpose(); - } - const QRectF rect = QRectF(0, 0, size.width(), size.height()); - - QPrinter printer; - printer.setCreator(QGuiApplication::applicationDisplayName() + QChar(QChar::Space) + - QCoreApplication::applicationVersion()); - printer.setOutputFormat(QPrinter::PdfFormat); - printer.setOutputFileName(fileName); - printer.setDocName(QFileInfo(fileName).fileName()); - printer.setResolution(static_cast(PrintDPI)); - printer.setPageOrientation(QPageLayout::Portrait); - printer.setFullPage(true); - - qreal width = FromPixel(size.width(), Unit::Mm); - qreal height = FromPixel(size.height(), Unit::Mm); - - if (not printer.setPageSize(QPageSize(QSizeF(width, height), QPageSize::Millimeter))) - { - qWarning() << tr("Cannot set printer page size"); - } - - QPainter painter; - if (not painter.begin(&printer)) - { // failed to open file - qCritical() << qUtf8Printable(tr("Can't open file '%1'").arg(fileName)); - return; - } - painter.setRenderHint(QPainter::Antialiasing, true); - painter.setPen(QPen(Qt::black, m_commonSettings->WidthHairLine(), Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); - painter.setBrush ( QBrush ( Qt::NoBrush ) ); - mainGraphicsView->GetScene()->render(&painter, rect, rect, Qt::IgnoreAspectRatio); - painter.end(); -} - - -//--------------------------------------------------------------------------------------------------------------------- -void VPExporter::ExportToPNG(QString filename, VPMainGraphicsView *mainGraphicsView) -{ - QSizeF size = QSizeF(m_layout->GetFocusedSheet()->GetSheetSize()); - if(m_layout->GetFocusedSheet()->GetOrientation() == PageOrientation::Landscape) - { - size.transpose(); - } - const QRectF rect = QRectF(0, 0, size.width(), size.height()); - - QImage image(QSize(qFloor(size.width()), qFloor((size.height()))), QImage::Format_ARGB32); - image.fill(Qt::white); - - QPainter painter(&image); - painter.setRenderHint(QPainter::Antialiasing, true); - painter.setPen(QPen(Qt::black, m_commonSettings->WidthHairLine(), Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); - painter.setBrush(QBrush(Qt::NoBrush)); - - mainGraphicsView->GetScene()->render(&painter, rect, rect, Qt::IgnoreAspectRatio); - image.save(filename); -} - -//--------------------------------------------------------------------------------------------------------------------- -void VPExporter::ExportToTIF(QString filename, VPMainGraphicsView *mainGraphicsView) -{ - QSizeF size = QSizeF(m_layout->GetFocusedSheet()->GetSheetSize()); - if(m_layout->GetFocusedSheet()->GetOrientation() == PageOrientation::Landscape) - { - size.transpose(); - } - const QRectF rect = QRectF(0, 0, size.width(), size.height()); - - QImage image(QSize(qFloor(size.width()), qFloor((size.height()))), QImage::Format_ARGB32); - image.fill(Qt::white); - - QPainter painter(&image); - painter.setRenderHint(QPainter::Antialiasing, true); - painter.setPen(QPen(Qt::black, m_commonSettings->WidthHairLine(), Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); - painter.setBrush(QBrush(Qt::NoBrush)); - - mainGraphicsView->GetScene()->render(&painter, rect, rect, Qt::IgnoreAspectRatio); - - - // FIXME, not working in ubuntu 21.04 of rlt "format not supported" - - QImageWriter writer; - writer.setFormat("tiff"); - writer.setCompression(1); // LZW-compression - writer.setFileName(filename); - - if (not writer.write(image)) - { // failed to save file - qCritical() << qUtf8Printable(tr("Can't save file '%1'. Error: %2.").arg(filename, writer.errorString())); - return; - } -} - - - // FIXME Bad copy paste from DialogSaveLayout, because I didn't know how to call this function from here // to be removed as soon as I know how to call the central function from valentina //--------------------------------------------------------------------------------------------------------------------- @@ -361,7 +237,7 @@ QVector > VPExporter::InitFormats() InitFormat(LayoutExportFormats::SVG); InitFormat(LayoutExportFormats::PDF); - InitFormat(LayoutExportFormats::PNG); +// InitFormat(LayoutExportFormats::PNG); // InitFormat(LayoutExportFormats::OBJ); diff --git a/src/app/puzzle/vpexporter.h b/src/app/puzzle/vpexporter.h index 46627c088..bbd9076eb 100644 --- a/src/app/puzzle/vpexporter.h +++ b/src/app/puzzle/vpexporter.h @@ -7,20 +7,19 @@ #include "../vmisc/def.h" #include "vcommonsettings.h" #include "../vlayout/vlayoutdef.h" +#include "../vlayout/vlayoutexporter.h" //#include "../dialogs/dialogsavelayout.h" class VPMainGraphicsView; -class VPExporter : QObject +class VPExporter : VLayoutExporter { - Q_OBJECT - public: - VPExporter(VPLayout* layout, VCommonSettings *commonSettings); + VPExporter(); ~VPExporter(); - void Export(LayoutExportFormats format, VPMainGraphicsView *mainGraphicsView); + void Export(VPLayout* layout, LayoutExportFormats format, VPMainGraphicsView *mainGraphicsView); // FIXME Bad copy paste from DialogSaveLayout, because I didn't know how to call this function from here @@ -28,34 +27,7 @@ public: QVector > InitFormats(); private: - Q_DISABLE_COPY(VPExporter) - VPLayout *m_layout{nullptr}; - VCommonSettings *m_commonSettings{nullptr}; - - /** - * @brief ExportSVG exports the current maingraphicViews to an svg file - * @param fileName the file name of the export - */ - void ExportToSVG(QString fileName, VPMainGraphicsView *mainGraphicsView); - - /** - * @brief ExportSVG exports the current maingraphicViews to a pdf file - * @param fileName the file name of the export - */ - void ExportToPDF(QString filename, VPMainGraphicsView *mainGraphicsView); - - /** - * @brief ExportSVG exports the current maingraphicViews to a png file - * @param fileName the file name of the export - */ - void ExportToPNG(QString filename, VPMainGraphicsView *mainGraphicsView); - - /** - * @brief ExportSVG exports the current maingraphicViews to a TIF file - * @param fileName the file name of the export - */ - void ExportToTIF(QString filename, VPMainGraphicsView *mainGraphicsView); // FIXME Bad copy paste from DialogSaveLayout, because I didn't know how to call this function from here diff --git a/src/app/puzzle/vpmainwindow.cpp b/src/app/puzzle/vpmainwindow.cpp index 51b23b004..e66656b9b 100644 --- a/src/app/puzzle/vpmainwindow.cpp +++ b/src/app/puzzle/vpmainwindow.cpp @@ -98,9 +98,6 @@ VPMainWindow::VPMainWindow(const VPCommandLinePtr &cmd, QWidget *parent) : m_tileFactory = new VPTileFactory(m_layout, VPApplication::VApp()->Settings()); m_tileFactory->refreshTileInfos(); - // init the export tool - m_exporter = new VPExporter(m_layout, VPApplication::VApp()->Settings()); - // init status bar statusBar()->addPermanentWidget(m_statusLabel, 1); @@ -494,7 +491,8 @@ void VPMainWindow::InitPropertyTabCurrentSheet() // ---------------------- export format -------------------------- - for (auto &v : m_exporter->InitFormats()) + VPExporter exporter; + for (auto &v : exporter.InitFormats()) { ui->comboBoxSheetExportFormat->addItem(v.first, QVariant(static_cast(v.second))); } @@ -1684,7 +1682,8 @@ void VPMainWindow::on_pushButtonSheetExport_clicked() { LayoutExportFormats format = static_cast(ui->comboBoxSheetExportFormat->currentData().toInt()); - m_exporter->Export(format, m_graphicsView); + VPExporter exporter; + exporter.Export(m_layout, format, m_graphicsView); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/puzzle/vpmainwindow.h b/src/app/puzzle/vpmainwindow.h index aea66ba34..e43cb833b 100644 --- a/src/app/puzzle/vpmainwindow.h +++ b/src/app/puzzle/vpmainwindow.h @@ -417,7 +417,6 @@ private: QListm_selectedPieces{QList()}; VPTileFactory *m_tileFactory{nullptr}; - VPExporter *m_exporter{nullptr}; /** * @brief spin box with the scale factor of the graphic view From 302a1fbc2bdc8ae38d4af2d1f5b0b26cb0cf8fca Mon Sep 17 00:00:00 2001 From: Ronan Date: Sat, 22 May 2021 11:52:24 +0200 Subject: [PATCH 6/6] Move ExportFormatSuffix and Description to VLayoutExporter --- src/app/puzzle/vpexporter.cpp | 237 ++++-------------- src/app/puzzle/vpexporter.h | 17 +- .../valentina/dialogs/dialogsavelayout.cpp | 151 +---------- src/app/valentina/dialogs/dialogsavelayout.h | 3 - src/app/valentina/mainwindowsnogui.cpp | 6 +- src/libs/vlayout/vlayoutexporter.cpp | 146 +++++++++++ src/libs/vlayout/vlayoutexporter.h | 5 + 7 files changed, 213 insertions(+), 352 deletions(-) diff --git a/src/app/puzzle/vpexporter.cpp b/src/app/puzzle/vpexporter.cpp index af02f71eb..60c72d366 100644 --- a/src/app/puzzle/vpexporter.cpp +++ b/src/app/puzzle/vpexporter.cpp @@ -1,10 +1,13 @@ #include "vpexporter.h" #include +#include #include "../vwidgets/vmaingraphicsscene.h" #include "vpsheet.h" #include "vpmaingraphicsview.h" +#include "../vobj/vobjpaintdevice.h" +#include "../vdxf/vdxfpaintdevice.h" //--------------------------------------------------------------------------------------------------------------------- @@ -63,8 +66,24 @@ void VPExporter::Export(VPLayout* layout, LayoutExportFormats format, VPMainGrap ExportToTIF(mainGraphicsView->scene()); break; + case LayoutExportFormats::OBJ: + ExportToOBJ(mainGraphicsView->scene()); + break; + + case LayoutExportFormats::PS: + ExportToPS(mainGraphicsView->scene()); + break; + + case LayoutExportFormats::EPS: + ExportToEPS(mainGraphicsView->scene()); + break; + default: - // do nothing + // just for test purpuses, to be removed: + QMessageBox msgBox; + msgBox.setText(QString("TODO VPExporter, Handling for format %1 is still missing.").arg(ExportFormatDescription(format))); + int ret = msgBox.exec(); + Q_UNUSED(ret); break; } @@ -72,159 +91,6 @@ void VPExporter::Export(VPLayout* layout, LayoutExportFormats format, VPMainGrap } } - -// FIXME Bad copy paste from DialogSaveLayout, because I didn't know how to call this function from here -// to be removed as soon as I know how to call the central function from valentina -//--------------------------------------------------------------------------------------------------------------------- -QString VPExporter::ExportFormatDescription(LayoutExportFormats format) -{ - const QString dxfSuffix = QStringLiteral("(*.dxf)"); - const QString dxfFlatFilesStr = tr("(flat) files"); - const QString filesStr = tr("files"); - - switch(format) - { - case LayoutExportFormats::SVG: - return QStringLiteral("Svg %1 (*.svg)").arg(filesStr); - case LayoutExportFormats::PDF: - return QStringLiteral("PDF %1 (*.pdf)").arg(filesStr); - case LayoutExportFormats::PNG: - return tr("Image files") + QStringLiteral(" (*.png)"); - case LayoutExportFormats::OBJ: - return QStringLiteral("Wavefront OBJ (*.obj)"); - case LayoutExportFormats::PS: - return QStringLiteral("PS %1 (*.ps)").arg(filesStr); - case LayoutExportFormats::EPS: - return QStringLiteral("EPS %1 (*.eps)").arg(filesStr); - case LayoutExportFormats::DXF_AC1006_Flat: - return QStringLiteral("AutoCAD DXF R10 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1009_Flat: - return QStringLiteral("AutoCAD DXF R11/12 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1012_Flat: - return QStringLiteral("AutoCAD DXF R13 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1014_Flat: - return QStringLiteral("AutoCAD DXF R14 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1015_Flat: - return QStringLiteral("AutoCAD DXF 2000 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1018_Flat: - return QStringLiteral("AutoCAD DXF 2004 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1021_Flat: - return QStringLiteral("AutoCAD DXF 2007 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1024_Flat: - return QStringLiteral("AutoCAD DXF 2010 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1027_Flat: - return QStringLiteral("AutoCAD DXF 2013 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1006_AAMA: - return QStringLiteral("AutoCAD DXF R10 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1009_AAMA: - return QStringLiteral("AutoCAD DXF R11/12 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1012_AAMA: - return QStringLiteral("AutoCAD DXF R13 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1014_AAMA: - return QStringLiteral("AutoCAD DXF R14 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1015_AAMA: - return QStringLiteral("AutoCAD DXF 2000 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1018_AAMA: - return QStringLiteral("AutoCAD DXF 2004 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1021_AAMA: - return QStringLiteral("AutoCAD DXF 2007 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1024_AAMA: - return QStringLiteral("AutoCAD DXF 2010 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1027_AAMA: - return QStringLiteral("AutoCAD DXF 2013 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1006_ASTM: - return QStringLiteral("AutoCAD DXF R10 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1009_ASTM: - return QStringLiteral("AutoCAD DXF R11/12 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1012_ASTM: - return QStringLiteral("AutoCAD DXF R13 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1014_ASTM: - return QStringLiteral("AutoCAD DXF R14 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1015_ASTM: - return QStringLiteral("AutoCAD DXF 2000 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1018_ASTM: - return QStringLiteral("AutoCAD DXF 2004 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1021_ASTM: - return QStringLiteral("AutoCAD DXF 2007 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1024_ASTM: - return QStringLiteral("AutoCAD DXF 2010 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1027_ASTM: - return QStringLiteral("AutoCAD DXF 2013 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::PDFTiled: - return QStringLiteral("PDF %1 %2 (*.pdf)").arg(tr("tiled"), filesStr); - case LayoutExportFormats::NC: - return QStringLiteral("%1 %2 (*.nc)").arg(tr("Numerical control"), filesStr); - case LayoutExportFormats::RLD: - return QStringLiteral("%1 %2 (*.rld)").arg(tr("Raw Layout Data"), filesStr); - case LayoutExportFormats::TIF: - return QStringLiteral("TIFF %1 (*.tif)").arg(filesStr); - default: - return QString(); - } -} - -// FIXME Bad copy paste from DialogSaveLayout, because I didn't know how to call this function from here -// to be removed as soon as I know how to call the central function from valentina -//--------------------------------------------------------------------------------------------------------------------- -QString VPExporter::ExportFormatSuffix(LayoutExportFormats format) -{ - switch(format) - { - case LayoutExportFormats::SVG: - return QStringLiteral(".svg"); - case LayoutExportFormats::PDF: - case LayoutExportFormats::PDFTiled: - return QStringLiteral(".pdf"); - case LayoutExportFormats::PNG: - return QStringLiteral(".png"); - case LayoutExportFormats::OBJ: - return QStringLiteral(".obj"); - case LayoutExportFormats::PS: - return QStringLiteral(".ps"); - case LayoutExportFormats::EPS: - return QStringLiteral(".eps"); - case LayoutExportFormats::DXF_AC1006_Flat: - case LayoutExportFormats::DXF_AC1009_Flat: - case LayoutExportFormats::DXF_AC1012_Flat: - case LayoutExportFormats::DXF_AC1014_Flat: - case LayoutExportFormats::DXF_AC1015_Flat: - case LayoutExportFormats::DXF_AC1018_Flat: - case LayoutExportFormats::DXF_AC1021_Flat: - case LayoutExportFormats::DXF_AC1024_Flat: - case LayoutExportFormats::DXF_AC1027_Flat: - case LayoutExportFormats::DXF_AC1006_AAMA: - case LayoutExportFormats::DXF_AC1009_AAMA: - case LayoutExportFormats::DXF_AC1012_AAMA: - case LayoutExportFormats::DXF_AC1014_AAMA: - case LayoutExportFormats::DXF_AC1015_AAMA: - case LayoutExportFormats::DXF_AC1018_AAMA: - case LayoutExportFormats::DXF_AC1021_AAMA: - case LayoutExportFormats::DXF_AC1024_AAMA: - case LayoutExportFormats::DXF_AC1027_AAMA: - case LayoutExportFormats::DXF_AC1006_ASTM: - case LayoutExportFormats::DXF_AC1009_ASTM: - case LayoutExportFormats::DXF_AC1012_ASTM: - case LayoutExportFormats::DXF_AC1014_ASTM: - case LayoutExportFormats::DXF_AC1015_ASTM: - case LayoutExportFormats::DXF_AC1018_ASTM: - case LayoutExportFormats::DXF_AC1021_ASTM: - case LayoutExportFormats::DXF_AC1024_ASTM: - case LayoutExportFormats::DXF_AC1027_ASTM: - return QStringLiteral(".dxf"); - case LayoutExportFormats::NC: - return QStringLiteral(".nc"); - case LayoutExportFormats::RLD: - return QStringLiteral(".rld"); - case LayoutExportFormats::TIF: - return QStringLiteral(".tif"); - default: - return QString(); - } -} - - -// FIXME Bad copy paste from DialogSaveLayout, because I didn't know how to call this function from here -// to be removed as soon as I know how to call the central function from valentina //--------------------------------------------------------------------------------------------------------------------- QVector > VPExporter::InitFormats() { @@ -238,43 +104,44 @@ QVector > VPExporter::InitFormats() InitFormat(LayoutExportFormats::SVG); InitFormat(LayoutExportFormats::PDF); // InitFormat(LayoutExportFormats::PNG); + InitFormat(LayoutExportFormats::TIF); -// InitFormat(LayoutExportFormats::OBJ); + InitFormat(LayoutExportFormats::OBJ); -// InitFormat(LayoutExportFormats::PS); -// InitFormat(LayoutExportFormats::EPS); + InitFormat(LayoutExportFormats::PS); + InitFormat(LayoutExportFormats::EPS); + + InitFormat(LayoutExportFormats::DXF_AC1006_Flat); +/* InitFormat(LayoutExportFormats::DXF_AC1009_Flat); + InitFormat(LayoutExportFormats::DXF_AC1012_Flat); + InitFormat(LayoutExportFormats::DXF_AC1014_Flat); + InitFormat(LayoutExportFormats::DXF_AC1015_Flat); + InitFormat(LayoutExportFormats::DXF_AC1018_Flat); + InitFormat(LayoutExportFormats::DXF_AC1021_Flat); + InitFormat(LayoutExportFormats::DXF_AC1024_Flat); + InitFormat(LayoutExportFormats::DXF_AC1027_Flat); + InitFormat(LayoutExportFormats::DXF_AC1006_AAMA); + InitFormat(LayoutExportFormats::DXF_AC1009_AAMA); + InitFormat(LayoutExportFormats::DXF_AC1012_AAMA); + InitFormat(LayoutExportFormats::DXF_AC1014_AAMA); + InitFormat(LayoutExportFormats::DXF_AC1015_AAMA); + InitFormat(LayoutExportFormats::DXF_AC1018_AAMA); + InitFormat(LayoutExportFormats::DXF_AC1021_AAMA); + InitFormat(LayoutExportFormats::DXF_AC1024_AAMA); + InitFormat(LayoutExportFormats::DXF_AC1027_AAMA); + InitFormat(LayoutExportFormats::DXF_AC1006_ASTM); + InitFormat(LayoutExportFormats::DXF_AC1009_ASTM); + InitFormat(LayoutExportFormats::DXF_AC1012_ASTM); + InitFormat(LayoutExportFormats::DXF_AC1014_ASTM); + InitFormat(LayoutExportFormats::DXF_AC1015_ASTM); + InitFormat(LayoutExportFormats::DXF_AC1018_ASTM); + InitFormat(LayoutExportFormats::DXF_AC1021_ASTM); + InitFormat(LayoutExportFormats::DXF_AC1024_ASTM); + InitFormat(LayoutExportFormats::DXF_AC1027_ASTM);*/ -// InitFormat(LayoutExportFormats::DXF_AC1006_Flat); -// InitFormat(LayoutExportFormats::DXF_AC1009_Flat); -// InitFormat(LayoutExportFormats::DXF_AC1012_Flat); -// InitFormat(LayoutExportFormats::DXF_AC1014_Flat); -// InitFormat(LayoutExportFormats::DXF_AC1015_Flat); -// InitFormat(LayoutExportFormats::DXF_AC1018_Flat); -// InitFormat(LayoutExportFormats::DXF_AC1021_Flat); -// InitFormat(LayoutExportFormats::DXF_AC1024_Flat); -// InitFormat(LayoutExportFormats::DXF_AC1027_Flat); -// InitFormat(LayoutExportFormats::DXF_AC1006_AAMA); -// InitFormat(LayoutExportFormats::DXF_AC1009_AAMA); -// InitFormat(LayoutExportFormats::DXF_AC1012_AAMA); -// InitFormat(LayoutExportFormats::DXF_AC1014_AAMA); -// InitFormat(LayoutExportFormats::DXF_AC1015_AAMA); -// InitFormat(LayoutExportFormats::DXF_AC1018_AAMA); -// InitFormat(LayoutExportFormats::DXF_AC1021_AAMA); -// InitFormat(LayoutExportFormats::DXF_AC1024_AAMA); -// InitFormat(LayoutExportFormats::DXF_AC1027_AAMA); -// InitFormat(LayoutExportFormats::DXF_AC1006_ASTM); -// InitFormat(LayoutExportFormats::DXF_AC1009_ASTM); -// InitFormat(LayoutExportFormats::DXF_AC1012_ASTM); -// InitFormat(LayoutExportFormats::DXF_AC1014_ASTM); -// InitFormat(LayoutExportFormats::DXF_AC1015_ASTM); -// InitFormat(LayoutExportFormats::DXF_AC1018_ASTM); -// InitFormat(LayoutExportFormats::DXF_AC1021_ASTM); -// InitFormat(LayoutExportFormats::DXF_AC1024_ASTM); -// InitFormat(LayoutExportFormats::DXF_AC1027_ASTM); // InitFormat(LayoutExportFormats::PDFTiled); // InitFormat(LayoutExportFormats::NC); // InitFormat(LayoutExportFormats::RLD); - InitFormat(LayoutExportFormats::TIF); return list; } diff --git a/src/app/puzzle/vpexporter.h b/src/app/puzzle/vpexporter.h index bbd9076eb..6e87a2aa7 100644 --- a/src/app/puzzle/vpexporter.h +++ b/src/app/puzzle/vpexporter.h @@ -21,21 +21,12 @@ public: void Export(VPLayout* layout, LayoutExportFormats format, VPMainGraphicsView *mainGraphicsView); - - // FIXME Bad copy paste from DialogSaveLayout, because I didn't know how to call this function from here - // to be removed as soon as I know how to call the central function from valentina + /** + * @brief InitFormats + * @return returns the list of formats, that we can export in puzzle + */ QVector > InitFormats(); -private: - - - - // FIXME Bad copy paste from DialogSaveLayout, because I didn't know how to call this function from here - // to be removed as soon as I know how to call the central function from valentina - static QString ExportFormatDescription(LayoutExportFormats format); - static QString ExportFormatSuffix(LayoutExportFormats format); - - }; #endif // VPEXPORTER_H diff --git a/src/app/valentina/dialogs/dialogsavelayout.cpp b/src/app/valentina/dialogs/dialogsavelayout.cpp index d4e472e72..61f2ec1c2 100644 --- a/src/app/valentina/dialogs/dialogsavelayout.cpp +++ b/src/app/valentina/dialogs/dialogsavelayout.cpp @@ -349,151 +349,6 @@ Draw DialogSaveLayout::Mode() const return m_mode; } -//--------------------------------------------------------------------------------------------------------------------- -QString DialogSaveLayout::ExportFormatDescription(LayoutExportFormats format) -{ - const QString dxfSuffix = QStringLiteral("(*.dxf)"); - const QString dxfFlatFilesStr = tr("(flat) files"); - const QString filesStr = tr("files"); - - switch(format) - { - case LayoutExportFormats::SVG: - return QStringLiteral("Svg %1 (*.svg)").arg(filesStr); - case LayoutExportFormats::PDF: - return QStringLiteral("PDF %1 (*.pdf)").arg(filesStr); - case LayoutExportFormats::PNG: - return tr("Image files") + QStringLiteral(" (*.png)"); - case LayoutExportFormats::OBJ: - return QStringLiteral("Wavefront OBJ (*.obj)"); - case LayoutExportFormats::PS: - return QStringLiteral("PS %1 (*.ps)").arg(filesStr); - case LayoutExportFormats::EPS: - return QStringLiteral("EPS %1 (*.eps)").arg(filesStr); - case LayoutExportFormats::DXF_AC1006_Flat: - return QStringLiteral("AutoCAD DXF R10 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1009_Flat: - return QStringLiteral("AutoCAD DXF R11/12 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1012_Flat: - return QStringLiteral("AutoCAD DXF R13 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1014_Flat: - return QStringLiteral("AutoCAD DXF R14 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1015_Flat: - return QStringLiteral("AutoCAD DXF 2000 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1018_Flat: - return QStringLiteral("AutoCAD DXF 2004 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1021_Flat: - return QStringLiteral("AutoCAD DXF 2007 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1024_Flat: - return QStringLiteral("AutoCAD DXF 2010 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1027_Flat: - return QStringLiteral("AutoCAD DXF 2013 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1006_AAMA: - return QStringLiteral("AutoCAD DXF R10 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1009_AAMA: - return QStringLiteral("AutoCAD DXF R11/12 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1012_AAMA: - return QStringLiteral("AutoCAD DXF R13 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1014_AAMA: - return QStringLiteral("AutoCAD DXF R14 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1015_AAMA: - return QStringLiteral("AutoCAD DXF 2000 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1018_AAMA: - return QStringLiteral("AutoCAD DXF 2004 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1021_AAMA: - return QStringLiteral("AutoCAD DXF 2007 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1024_AAMA: - return QStringLiteral("AutoCAD DXF 2010 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1027_AAMA: - return QStringLiteral("AutoCAD DXF 2013 AAMA %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1006_ASTM: - return QStringLiteral("AutoCAD DXF R10 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1009_ASTM: - return QStringLiteral("AutoCAD DXF R11/12 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1012_ASTM: - return QStringLiteral("AutoCAD DXF R13 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1014_ASTM: - return QStringLiteral("AutoCAD DXF R14 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1015_ASTM: - return QStringLiteral("AutoCAD DXF 2000 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1018_ASTM: - return QStringLiteral("AutoCAD DXF 2004 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1021_ASTM: - return QStringLiteral("AutoCAD DXF 2007 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1024_ASTM: - return QStringLiteral("AutoCAD DXF 2010 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::DXF_AC1027_ASTM: - return QStringLiteral("AutoCAD DXF 2013 ASTM %1 %2").arg(filesStr, dxfSuffix); - case LayoutExportFormats::PDFTiled: - return QStringLiteral("PDF %1 %2 (*.pdf)").arg(tr("tiled"), filesStr); - case LayoutExportFormats::NC: - return QStringLiteral("%1 %2 (*.nc)").arg(tr("Numerical control"), filesStr); - case LayoutExportFormats::RLD: - return QStringLiteral("%1 %2 (*.rld)").arg(tr("Raw Layout Data"), filesStr); - case LayoutExportFormats::TIF: - return QStringLiteral("TIFF %1 (*.tif)").arg(filesStr); - default: - return QString(); - } -} - -//--------------------------------------------------------------------------------------------------------------------- -QString DialogSaveLayout::ExportFormatSuffix(LayoutExportFormats format) -{ - switch(format) - { - case LayoutExportFormats::SVG: - return QStringLiteral(".svg"); - case LayoutExportFormats::PDF: - case LayoutExportFormats::PDFTiled: - return QStringLiteral(".pdf"); - case LayoutExportFormats::PNG: - return QStringLiteral(".png"); - case LayoutExportFormats::OBJ: - return QStringLiteral(".obj"); - case LayoutExportFormats::PS: - return QStringLiteral(".ps"); - case LayoutExportFormats::EPS: - return QStringLiteral(".eps"); - case LayoutExportFormats::DXF_AC1006_Flat: - case LayoutExportFormats::DXF_AC1009_Flat: - case LayoutExportFormats::DXF_AC1012_Flat: - case LayoutExportFormats::DXF_AC1014_Flat: - case LayoutExportFormats::DXF_AC1015_Flat: - case LayoutExportFormats::DXF_AC1018_Flat: - case LayoutExportFormats::DXF_AC1021_Flat: - case LayoutExportFormats::DXF_AC1024_Flat: - case LayoutExportFormats::DXF_AC1027_Flat: - case LayoutExportFormats::DXF_AC1006_AAMA: - case LayoutExportFormats::DXF_AC1009_AAMA: - case LayoutExportFormats::DXF_AC1012_AAMA: - case LayoutExportFormats::DXF_AC1014_AAMA: - case LayoutExportFormats::DXF_AC1015_AAMA: - case LayoutExportFormats::DXF_AC1018_AAMA: - case LayoutExportFormats::DXF_AC1021_AAMA: - case LayoutExportFormats::DXF_AC1024_AAMA: - case LayoutExportFormats::DXF_AC1027_AAMA: - case LayoutExportFormats::DXF_AC1006_ASTM: - case LayoutExportFormats::DXF_AC1009_ASTM: - case LayoutExportFormats::DXF_AC1012_ASTM: - case LayoutExportFormats::DXF_AC1014_ASTM: - case LayoutExportFormats::DXF_AC1015_ASTM: - case LayoutExportFormats::DXF_AC1018_ASTM: - case LayoutExportFormats::DXF_AC1021_ASTM: - case LayoutExportFormats::DXF_AC1024_ASTM: - case LayoutExportFormats::DXF_AC1027_ASTM: - return QStringLiteral(".dxf"); - case LayoutExportFormats::NC: - return QStringLiteral(".nc"); - case LayoutExportFormats::RLD: - return QStringLiteral(".rld"); - case LayoutExportFormats::TIF: - return QStringLiteral(".tif"); - default: - return QString(); - } -} - //--------------------------------------------------------------------------------------------------------------------- DialogSaveLayout::~DialogSaveLayout() { @@ -525,7 +380,7 @@ void DialogSaveLayout::Save() for (int i=0; i < count; ++i) { - const QString name = Path()+'/'+FileName()+QString::number(i+1)+ExportFormatSuffix(Format()); + const QString name = Path()+'/'+FileName()+QString::number(i+1)+VLayoutExporter::ExportFormatSuffix(Format()); if (QFile::exists(name)) { QMessageBox::StandardButton res = QMessageBox::question(this, tr("Name conflict"), @@ -573,7 +428,7 @@ void DialogSaveLayout::PathChanged(const QString &text) void DialogSaveLayout::ShowExample() { const LayoutExportFormats currentFormat = Format(); - ui->labelExample->setText(tr("Example:") + FileName() + QLatin1Char('1') + ExportFormatSuffix(currentFormat)); + ui->labelExample->setText(tr("Example:") + FileName() + QLatin1Char('1') + VLayoutExporter::ExportFormatSuffix(currentFormat)); ui->checkBoxBinaryDXF->setEnabled(false); ui->groupBoxPaperFormat->setEnabled(false); @@ -822,7 +677,7 @@ QVector > DialogSaveLayout::InitFormats( auto InitFormat = [&list](LayoutExportFormats format) { - list.append(std::make_pair(ExportFormatDescription(format), format)); + list.append(std::make_pair(VLayoutExporter::ExportFormatDescription(format), format)); }; InitFormat(LayoutExportFormats::SVG); diff --git a/src/app/valentina/dialogs/dialogsavelayout.h b/src/app/valentina/dialogs/dialogsavelayout.h index 4eaafc775..9c4950f17 100644 --- a/src/app/valentina/dialogs/dialogsavelayout.h +++ b/src/app/valentina/dialogs/dialogsavelayout.h @@ -61,9 +61,6 @@ public: Draw Mode() const; - static QString ExportFormatDescription(LayoutExportFormats format); - static QString ExportFormatSuffix(LayoutExportFormats format); - bool IsTextAsPaths() const; void SetTextAsPaths(bool textAsPaths); diff --git a/src/app/valentina/mainwindowsnogui.cpp b/src/app/valentina/mainwindowsnogui.cpp index be4b57485..ef3794c3e 100644 --- a/src/app/valentina/mainwindowsnogui.cpp +++ b/src/app/valentina/mainwindowsnogui.cpp @@ -514,7 +514,7 @@ void MainWindowsNoGUI::ExportData(const QVector &listDetails) for (int i = 0; i < detailsOnLayout.size(); ++i) { const QString name = m_dialogSaveLayout->Path() + '/' + m_dialogSaveLayout->FileName() + - QString::number(i+1) + DialogSaveLayout::ExportFormatSuffix(m_dialogSaveLayout->Format()); + QString::number(i+1) + VLayoutExporter::ExportFormatSuffix(m_dialogSaveLayout->Format()); QGraphicsRectItem *paper = qgraphicsitem_cast( m_layoutSettings->LayoutPapers().at(i)); @@ -827,7 +827,7 @@ void MainWindowsNoGUI::ExportDetailsAsApparelLayout(QVector listDe } const QString name = m_dialogSaveLayout->Path() + '/' + m_dialogSaveLayout->FileName() + - QString::number(1) + DialogSaveLayout::ExportFormatSuffix(m_dialogSaveLayout->Format()); + QString::number(1) + VLayoutExporter::ExportFormatSuffix(m_dialogSaveLayout->Format()); ExportApparelLayout(listDetails, name, rect.size()); } @@ -1110,7 +1110,7 @@ void MainWindowsNoGUI::ExportScene(const QList &scenes, if (paper != nullptr) { const QString name = m_dialogSaveLayout->Path() + '/' + m_dialogSaveLayout->FileName() + - QString::number(i+1) + DialogSaveLayout::ExportFormatSuffix(m_dialogSaveLayout->Format()); + QString::number(i+1) + VLayoutExporter::ExportFormatSuffix(m_dialogSaveLayout->Format()); auto *brush = new QBrush(); brush->setColor( QColor( Qt::white ) ); QGraphicsScene *scene = scenes.at(i); diff --git a/src/libs/vlayout/vlayoutexporter.cpp b/src/libs/vlayout/vlayoutexporter.cpp index 4d9248f60..ca99c2aff 100644 --- a/src/libs/vlayout/vlayoutexporter.cpp +++ b/src/libs/vlayout/vlayoutexporter.cpp @@ -433,3 +433,149 @@ void VLayoutExporter::PdfToPs(const QStringList ¶ms) qCritical() << qUtf8Printable(tr("Creating file '%1' failed! %2").arg(params.last(), proc.errorString())); } } + + +//--------------------------------------------------------------------------------------------------------------------- +QString VLayoutExporter::ExportFormatDescription(LayoutExportFormats format) +{ + const QString dxfSuffix = QStringLiteral("(*.dxf)"); + const QString dxfFlatFilesStr = tr("(flat) files"); + const QString filesStr = tr("files"); + + switch(format) + { + case LayoutExportFormats::SVG: + return QStringLiteral("Svg %1 (*.svg)").arg(filesStr); + case LayoutExportFormats::PDF: + return QStringLiteral("PDF %1 (*.pdf)").arg(filesStr); + case LayoutExportFormats::PNG: + return tr("Image files") + QStringLiteral(" (*.png)"); + case LayoutExportFormats::OBJ: + return QStringLiteral("Wavefront OBJ (*.obj)"); + case LayoutExportFormats::PS: + return QStringLiteral("PS %1 (*.ps)").arg(filesStr); + case LayoutExportFormats::EPS: + return QStringLiteral("EPS %1 (*.eps)").arg(filesStr); + case LayoutExportFormats::DXF_AC1006_Flat: + return QStringLiteral("AutoCAD DXF R10 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1009_Flat: + return QStringLiteral("AutoCAD DXF R11/12 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1012_Flat: + return QStringLiteral("AutoCAD DXF R13 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1014_Flat: + return QStringLiteral("AutoCAD DXF R14 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1015_Flat: + return QStringLiteral("AutoCAD DXF 2000 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1018_Flat: + return QStringLiteral("AutoCAD DXF 2004 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1021_Flat: + return QStringLiteral("AutoCAD DXF 2007 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1024_Flat: + return QStringLiteral("AutoCAD DXF 2010 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1027_Flat: + return QStringLiteral("AutoCAD DXF 2013 %1 %2").arg(dxfFlatFilesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1006_AAMA: + return QStringLiteral("AutoCAD DXF R10 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1009_AAMA: + return QStringLiteral("AutoCAD DXF R11/12 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1012_AAMA: + return QStringLiteral("AutoCAD DXF R13 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1014_AAMA: + return QStringLiteral("AutoCAD DXF R14 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1015_AAMA: + return QStringLiteral("AutoCAD DXF 2000 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1018_AAMA: + return QStringLiteral("AutoCAD DXF 2004 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1021_AAMA: + return QStringLiteral("AutoCAD DXF 2007 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1024_AAMA: + return QStringLiteral("AutoCAD DXF 2010 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1027_AAMA: + return QStringLiteral("AutoCAD DXF 2013 AAMA %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1006_ASTM: + return QStringLiteral("AutoCAD DXF R10 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1009_ASTM: + return QStringLiteral("AutoCAD DXF R11/12 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1012_ASTM: + return QStringLiteral("AutoCAD DXF R13 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1014_ASTM: + return QStringLiteral("AutoCAD DXF R14 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1015_ASTM: + return QStringLiteral("AutoCAD DXF 2000 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1018_ASTM: + return QStringLiteral("AutoCAD DXF 2004 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1021_ASTM: + return QStringLiteral("AutoCAD DXF 2007 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1024_ASTM: + return QStringLiteral("AutoCAD DXF 2010 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::DXF_AC1027_ASTM: + return QStringLiteral("AutoCAD DXF 2013 ASTM %1 %2").arg(filesStr, dxfSuffix); + case LayoutExportFormats::PDFTiled: + return QStringLiteral("PDF %1 %2 (*.pdf)").arg(tr("tiled"), filesStr); + case LayoutExportFormats::NC: + return QStringLiteral("%1 %2 (*.nc)").arg(tr("Numerical control"), filesStr); + case LayoutExportFormats::RLD: + return QStringLiteral("%1 %2 (*.rld)").arg(tr("Raw Layout Data"), filesStr); + case LayoutExportFormats::TIF: + return QStringLiteral("TIFF %1 (*.tif)").arg(filesStr); + default: + return QString(); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +QString VLayoutExporter::ExportFormatSuffix(LayoutExportFormats format) +{ + switch(format) + { + case LayoutExportFormats::SVG: + return QStringLiteral(".svg"); + case LayoutExportFormats::PDF: + case LayoutExportFormats::PDFTiled: + return QStringLiteral(".pdf"); + case LayoutExportFormats::PNG: + return QStringLiteral(".png"); + case LayoutExportFormats::OBJ: + return QStringLiteral(".obj"); + case LayoutExportFormats::PS: + return QStringLiteral(".ps"); + case LayoutExportFormats::EPS: + return QStringLiteral(".eps"); + case LayoutExportFormats::DXF_AC1006_Flat: + case LayoutExportFormats::DXF_AC1009_Flat: + case LayoutExportFormats::DXF_AC1012_Flat: + case LayoutExportFormats::DXF_AC1014_Flat: + case LayoutExportFormats::DXF_AC1015_Flat: + case LayoutExportFormats::DXF_AC1018_Flat: + case LayoutExportFormats::DXF_AC1021_Flat: + case LayoutExportFormats::DXF_AC1024_Flat: + case LayoutExportFormats::DXF_AC1027_Flat: + case LayoutExportFormats::DXF_AC1006_AAMA: + case LayoutExportFormats::DXF_AC1009_AAMA: + case LayoutExportFormats::DXF_AC1012_AAMA: + case LayoutExportFormats::DXF_AC1014_AAMA: + case LayoutExportFormats::DXF_AC1015_AAMA: + case LayoutExportFormats::DXF_AC1018_AAMA: + case LayoutExportFormats::DXF_AC1021_AAMA: + case LayoutExportFormats::DXF_AC1024_AAMA: + case LayoutExportFormats::DXF_AC1027_AAMA: + case LayoutExportFormats::DXF_AC1006_ASTM: + case LayoutExportFormats::DXF_AC1009_ASTM: + case LayoutExportFormats::DXF_AC1012_ASTM: + case LayoutExportFormats::DXF_AC1014_ASTM: + case LayoutExportFormats::DXF_AC1015_ASTM: + case LayoutExportFormats::DXF_AC1018_ASTM: + case LayoutExportFormats::DXF_AC1021_ASTM: + case LayoutExportFormats::DXF_AC1024_ASTM: + case LayoutExportFormats::DXF_AC1027_ASTM: + return QStringLiteral(".dxf"); + case LayoutExportFormats::NC: + return QStringLiteral(".nc"); + case LayoutExportFormats::RLD: + return QStringLiteral(".rld"); + case LayoutExportFormats::TIF: + return QStringLiteral(".tif"); + default: + return QString(); + } +} diff --git a/src/libs/vlayout/vlayoutexporter.h b/src/libs/vlayout/vlayoutexporter.h index 5952cae93..439f56b95 100644 --- a/src/libs/vlayout/vlayoutexporter.h +++ b/src/libs/vlayout/vlayoutexporter.h @@ -34,6 +34,8 @@ #include #include +#include "../vlayout/vlayoutdef.h" + class QGraphicsScene; class QGraphicsItem; class VLayoutPiece; @@ -91,6 +93,9 @@ public: static auto SupportPDFConversion() -> bool; + static QString ExportFormatDescription(LayoutExportFormats format); + static QString ExportFormatSuffix(LayoutExportFormats format); + private: QString m_fileName{}; QMarginsF m_margins{};