ModelEditor: Export diagram as image, pdf or svg

Change-Id: I19be1de5f0c8414b4d76dbbbb68e71183b7ce08e
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
Jochen Becher
2016-02-22 20:59:28 +01:00
parent 537125155d
commit bbba9ccae3
9 changed files with 119 additions and 9 deletions

View File

@@ -76,11 +76,14 @@
#include <QComboBox>
#include <QDir>
#include <QEvent>
#include <QFileDialog>
#include <QFileInfo>
#include <QFrame>
#include <QHBoxLayout>
#include <QImageWriter>
#include <QLabel>
#include <QMap>
#include <QMessageBox>
#include <QPainter>
#include <QPixmap>
#include <QScrollArea>
@@ -121,6 +124,7 @@ public:
QWidget *toolbar = 0;
QComboBox *diagramSelector = 0;
SelectedArea selectedArea = SelectedArea::Nothing;
QString lastExportDirPath;
};
ModelEditor::ModelEditor(UiController *uiController, ActionHandler *actionHandler, QWidget *parent)
@@ -514,6 +518,41 @@ void ModelEditor::editSelectedItem()
onEditSelectedElement();
}
void ModelEditor::exportDiagram()
{
qmt::MDiagram *diagram = currentDiagram();
if (diagram) {
if (d->lastExportDirPath.isEmpty())
d->lastExportDirPath = d->document->filePath().toFileInfo().canonicalPath();
QString fileName = QFileDialog::getSaveFileName(
Core::ICore::dialogParent(),
tr("Export Diagram"), d->lastExportDirPath,
tr("Images (*.png *.jpeg *.jpg *.tif *.tiff);;PDF (*.pdf);;SVG (*.svg)"));
if (!fileName.isEmpty()) {
qmt::DocumentController *documentController = d->document->documentController();
qmt::DiagramSceneModel *sceneModel = documentController->diagramsManager()->diagramSceneModel(diagram);
bool success = false;
QString suffix = QFileInfo(fileName).suffix().toLower();
// TODO use QFileDialog::selectedNameFilter() as fallback if no suffix is given
if (suffix.isEmpty()) {
suffix = QStringLiteral(".png");
fileName += suffix;
}
if (suffix == QStringLiteral(".pdf"))
success = sceneModel->exportPdf(fileName);
else if (suffix == QStringLiteral(".svg"))
success = sceneModel->exportSvg(fileName);
else
success = sceneModel->exportImage(fileName);
if (success)
d->lastExportDirPath = QFileInfo(fileName).canonicalPath();
else
QMessageBox::critical(Core::ICore::dialogParent(), tr("Exporting Diagram Failed"),
tr("Exporting the diagram into file<br>\"%1\"<br>failed.").arg(fileName));
}
}
}
qmt::MPackage *ModelEditor::guessSelectedPackage() const
{
qmt::MPackage *package = 0;