forked from qt-creator/qt-creator
Modeling: Fix build with/without SVG
Change-Id: I5152571010fecaf91986a16ca71bf7b89fada064 Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
committed by
Tobias Hunger
parent
4795059703
commit
4d91194e8f
@@ -1,7 +1,8 @@
|
|||||||
|
|
||||||
include(../../qtcreatorlibrary.pri)
|
include(../../qtcreatorlibrary.pri)
|
||||||
|
|
||||||
QT += svg
|
!isEmpty(QT.svg.name): QT += svg
|
||||||
|
else: DEFINES += QT_NO_SVG
|
||||||
|
|
||||||
DEFINES += QMT_LIBRARY
|
DEFINES += QMT_LIBRARY
|
||||||
|
|
||||||
|
|||||||
@@ -9,9 +9,15 @@ QtcLibrary {
|
|||||||
"./qtserialization/inc",
|
"./qtserialization/inc",
|
||||||
])
|
])
|
||||||
|
|
||||||
Depends { name: "Qt"; submodules: ["widgets", "svg"] }
|
Depends { name: "Qt"; submodules: ["widgets"] }
|
||||||
|
Depends { name: "Qt.svg"; required: false }
|
||||||
Depends { name: "Utils" }
|
Depends { name: "Utils" }
|
||||||
|
|
||||||
|
Properties {
|
||||||
|
condition: !Qt.svg.present
|
||||||
|
cpp.defines: base.concat("QT_NO_SVG")
|
||||||
|
}
|
||||||
|
|
||||||
Group {
|
Group {
|
||||||
name: "Qmt"
|
name: "Qmt"
|
||||||
prefix: "./qmt/"
|
prefix: "./qmt/"
|
||||||
|
|||||||
@@ -59,7 +59,9 @@
|
|||||||
#include <QPdfWriter>
|
#include <QPdfWriter>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
|
||||||
|
#ifndef QT_NO_SCG
|
||||||
#include <QtSvg/QSvgGenerator>
|
#include <QtSvg/QSvgGenerator>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace qmt {
|
namespace qmt {
|
||||||
|
|
||||||
@@ -339,59 +341,6 @@ void DiagramSceneModel::copyToClipboard()
|
|||||||
mimeData->setImageData(image);
|
mimeData->setImageData(image);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_PDF_CLIPBOARD
|
|
||||||
{
|
|
||||||
const double scaleFactor = 1.0;
|
|
||||||
const double border = 5;
|
|
||||||
const double baseDpi = 100;
|
|
||||||
const double dotsPerMm = 25.4 / baseDpi;
|
|
||||||
|
|
||||||
QBuffer pdfBuffer;
|
|
||||||
pdfBuffer.open(QIODevice::WriteOnly);
|
|
||||||
|
|
||||||
QPdfWriter pdfWriter(&pdfBuffer);
|
|
||||||
QSizeF pageSize = sceneBoundingRect.size();
|
|
||||||
pageSize += QSizeF(2.0 * border, 2.0 * border);
|
|
||||||
pageSize *= scaleFactor;
|
|
||||||
pdfWriter.setPageSize(QPdfWriter::Custom);
|
|
||||||
pdfWriter.setPageSizeMM(pageSize * dotsPerMm);
|
|
||||||
|
|
||||||
QPainter pdfPainter;
|
|
||||||
pdfPainter.begin(&pdfWriter);
|
|
||||||
m_graphicsScene->render(&pdfPainter,
|
|
||||||
QRectF(border, border,
|
|
||||||
pdfPainter.device()->width() - 2 * border,
|
|
||||||
pdfPainter.device()->height() - 2 * border),
|
|
||||||
sceneBoundingRect);
|
|
||||||
pdfPainter.end();
|
|
||||||
pdfBuffer.close();
|
|
||||||
mimeData->setData(QStringLiteral("application/pdf"), pdfBuffer.buffer());
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_SVG_CLIPBOARD
|
|
||||||
{
|
|
||||||
const double border = 5;
|
|
||||||
|
|
||||||
QBuffer svgBuffer;
|
|
||||||
QSvgGenerator svgGenerator;
|
|
||||||
svgGenerator.setOutputDevice(&svgBuffer);
|
|
||||||
QSize svgSceneSize = sceneBoundingRect.size().toSize();
|
|
||||||
svgGenerator.setSize(svgSceneSize);
|
|
||||||
svgGenerator.setViewBox(QRect(QPoint(0,0), svgSceneSize));
|
|
||||||
QPainter svgPainter;
|
|
||||||
svgPainter.begin(&svgGenerator);
|
|
||||||
svgPainter.setRenderHint(QPainter::Antialiasing);
|
|
||||||
m_graphicsScene->render(&svgPainter,
|
|
||||||
QRectF(border, border,
|
|
||||||
svgPainter.device()->width() - 2 * border,
|
|
||||||
svgPainter.device()->height() - 2 * border),
|
|
||||||
sceneBoundingRect);
|
|
||||||
svgPainter.end();
|
|
||||||
mimeData->setData(QStringLiteral("image/svg+xml"), svgBuffer.buffer());
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard);
|
QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard);
|
||||||
|
|
||||||
if (!copyAll) {
|
if (!copyAll) {
|
||||||
@@ -489,6 +438,7 @@ bool DiagramSceneModel::exportPdf(const QString &fileName)
|
|||||||
|
|
||||||
bool DiagramSceneModel::exportSvg(const QString &fileName)
|
bool DiagramSceneModel::exportSvg(const QString &fileName)
|
||||||
{
|
{
|
||||||
|
#ifndef QT_NO_SVG
|
||||||
// TODO support exporting selected elements only
|
// TODO support exporting selected elements only
|
||||||
removeExtraSceneItems();
|
removeExtraSceneItems();
|
||||||
|
|
||||||
@@ -515,6 +465,10 @@ bool DiagramSceneModel::exportSvg(const QString &fileName)
|
|||||||
|
|
||||||
// TODO how to know that file was successfully created?
|
// TODO how to know that file was successfully created?
|
||||||
return true;
|
return true;
|
||||||
|
#else // QT_NO_SVG
|
||||||
|
Q_UNUSED(fileName);
|
||||||
|
return false;
|
||||||
|
#endif // QT_NO_SVG
|
||||||
}
|
}
|
||||||
|
|
||||||
void DiagramSceneModel::selectItem(QGraphicsItem *item, bool multiSelect)
|
void DiagramSceneModel::selectItem(QGraphicsItem *item, bool multiSelect)
|
||||||
|
|||||||
@@ -524,10 +524,13 @@ void ModelEditor::exportDiagram()
|
|||||||
if (diagram) {
|
if (diagram) {
|
||||||
if (d->lastExportDirPath.isEmpty())
|
if (d->lastExportDirPath.isEmpty())
|
||||||
d->lastExportDirPath = d->document->filePath().toFileInfo().canonicalPath();
|
d->lastExportDirPath = d->document->filePath().toFileInfo().canonicalPath();
|
||||||
|
QString filter = tr("Images (*.png *.jpeg *.jpg *.tif *.tiff);;PDF (*.pdf)");
|
||||||
|
#ifndef QT_NO_SVG
|
||||||
|
filter += tr(";;SVG (*.svg)");
|
||||||
|
#endif // QT_NO_SVG
|
||||||
QString fileName = QFileDialog::getSaveFileName(
|
QString fileName = QFileDialog::getSaveFileName(
|
||||||
Core::ICore::dialogParent(),
|
Core::ICore::dialogParent(),
|
||||||
tr("Export Diagram"), d->lastExportDirPath,
|
tr("Export Diagram"), d->lastExportDirPath, filter);
|
||||||
tr("Images (*.png *.jpeg *.jpg *.tif *.tiff);;PDF (*.pdf);;SVG (*.svg)"));
|
|
||||||
if (!fileName.isEmpty()) {
|
if (!fileName.isEmpty()) {
|
||||||
qmt::DocumentController *documentController = d->document->documentController();
|
qmt::DocumentController *documentController = d->document->documentController();
|
||||||
qmt::DiagramSceneModel *sceneModel = documentController->diagramsManager()->diagramSceneModel(diagram);
|
qmt::DiagramSceneModel *sceneModel = documentController->diagramsManager()->diagramSceneModel(diagram);
|
||||||
@@ -535,13 +538,15 @@ void ModelEditor::exportDiagram()
|
|||||||
QString suffix = QFileInfo(fileName).suffix().toLower();
|
QString suffix = QFileInfo(fileName).suffix().toLower();
|
||||||
// TODO use QFileDialog::selectedNameFilter() as fallback if no suffix is given
|
// TODO use QFileDialog::selectedNameFilter() as fallback if no suffix is given
|
||||||
if (suffix.isEmpty()) {
|
if (suffix.isEmpty()) {
|
||||||
suffix = QStringLiteral(".png");
|
suffix = QStringLiteral("png");
|
||||||
fileName += suffix;
|
fileName += QStringLiteral(".png");
|
||||||
}
|
}
|
||||||
if (suffix == QStringLiteral(".pdf"))
|
if (suffix == QStringLiteral("pdf"))
|
||||||
success = sceneModel->exportPdf(fileName);
|
success = sceneModel->exportPdf(fileName);
|
||||||
else if (suffix == QStringLiteral(".svg"))
|
#ifndef QT_NO_SVG
|
||||||
|
else if (suffix == QStringLiteral("svg"))
|
||||||
success = sceneModel->exportSvg(fileName);
|
success = sceneModel->exportSvg(fileName);
|
||||||
|
#endif // QT_NO_SVG
|
||||||
else
|
else
|
||||||
success = sceneModel->exportImage(fileName);
|
success = sceneModel->exportImage(fileName);
|
||||||
if (success)
|
if (success)
|
||||||
|
|||||||
@@ -4,27 +4,7 @@ DEFINES += MODELEDITOR_LIBRARY
|
|||||||
|
|
||||||
QT += core gui widgets
|
QT += core gui widgets
|
||||||
|
|
||||||
!win32:CONFIG(pdf) {
|
isEmpty(QT.svg.name): DEFINES += QT_NO_SVG
|
||||||
DEFINES += USE_PDF_CLIPBOARD
|
|
||||||
}
|
|
||||||
|
|
||||||
!win32:CONFIG(svg): {
|
|
||||||
QT += svg
|
|
||||||
DEFINES += USE_SVG_CLIPBOARD
|
|
||||||
}
|
|
||||||
|
|
||||||
#win32:CONFIG(emf): {
|
|
||||||
# DEFINES += USE_EMF USE_EMF_CLIPBOARD
|
|
||||||
#
|
|
||||||
# SOURCES += \
|
|
||||||
# emf-engine/qemfpaintengine.cpp \
|
|
||||||
# emf-engine/qemfwriter.cpp
|
|
||||||
#
|
|
||||||
# HEADERS += \
|
|
||||||
# emf-engine/qemfpaintengine.h \
|
|
||||||
# emf-engine/qemfwriter.h
|
|
||||||
#
|
|
||||||
#}
|
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
actionhandler.cpp \
|
actionhandler.cpp \
|
||||||
|
|||||||
@@ -6,12 +6,18 @@ QtcPlugin {
|
|||||||
name: "ModelEditor"
|
name: "ModelEditor"
|
||||||
|
|
||||||
Depends { name: "Qt.widgets" }
|
Depends { name: "Qt.widgets" }
|
||||||
|
Depends { name: "Qt.svg"; required: false }
|
||||||
Depends { name: "Core" }
|
Depends { name: "Core" }
|
||||||
Depends { name: "CPlusPlus" }
|
Depends { name: "CPlusPlus" }
|
||||||
Depends { name: "CppTools" }
|
Depends { name: "CppTools" }
|
||||||
Depends { name: "ProjectExplorer" }
|
Depends { name: "ProjectExplorer" }
|
||||||
Depends { name: "ModelingLib" }
|
Depends { name: "ModelingLib" }
|
||||||
|
|
||||||
|
Properties {
|
||||||
|
condition: !Qt.svg.present
|
||||||
|
cpp.defines: base.concat("QT_NO_SVG")
|
||||||
|
}
|
||||||
|
|
||||||
cpp.includePaths: [
|
cpp.includePaths: [
|
||||||
"qmt",
|
"qmt",
|
||||||
"qstringparser",
|
"qstringparser",
|
||||||
|
|||||||
Reference in New Issue
Block a user