summaryrefslogtreecommitdiff
path: root/src/mainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r--src/mainwindow.cpp59
1 files changed, 14 insertions, 45 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index eda1e14..7ba9cac 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -41,6 +41,8 @@
#include "commands.h"
#include "mainwindow.h"
+#include "export/exporter.h"
+#include "export/exporterlist.h"
using namespace std;
@@ -56,6 +58,8 @@ public:
QActionGroup *notationActionGroup;
QMenu *notationMenu;
+
+ ExporterList exporters;
};
MainWindow::MainWindow()
@@ -481,51 +485,16 @@ MainWindow::saveAs()
void
MainWindow::exportPNG()
{
- QStringList filters;
- filters << "Portable Network Graphics (*.png)";
- filters << "Portable Document Format (*.pdf)";
- filters << "Scalable Vector Graphics (*.svg)";
- QString fileName = QFileDialog::getSaveFileName(this, QString(), QString(), filters.join(";;"));
- if (!fileName.isNull()) {
- QRectF boundingRect = m_model->itemsBoundingRect().adjusted(-2, -2, 2, 2);
- QSize size(int(ceil(boundingRect.width())), int(ceil(boundingRect.height())));
- if (fileName.endsWith(".svg", Qt::CaseInsensitive)) {
- QSvgGenerator generator;
- generator.setSize(size);
- generator.setFileName(fileName);
- QPainter painter(&generator);
- painter.setRenderHints(QPainter::HighQualityAntialiasing | QPainter::Antialiasing);
- m_model->setPrinting(true);
- m_model->render(&painter, QRectF(), boundingRect);
- m_model->setPrinting(false);
- }
- else if (fileName.endsWith(".pdf", Qt::CaseInsensitive)) {
- QPrinter printer;
- printer.setOutputFormat(QPrinter::PdfFormat);
- printer.setOutputFileName(fileName);
- QPainter painter(&printer);
- painter.setRenderHints(QPainter::HighQualityAntialiasing | QPainter::Antialiasing);
- m_model->setPrinting(true);
- m_model->render(&painter, QRectF(), boundingRect);
- m_model->setPrinting(false);
- }
- else if (fileName.endsWith(".png", Qt::CaseInsensitive)) {
- QImage image(size, QImage::Format_RGB32);
- QPainter painter(&image);
- painter.setRenderHints(QPainter::HighQualityAntialiasing | QPainter::Antialiasing);
- painter.fillRect(image.rect(), Qt::white);
- m_model->setPrinting(true);
- m_model->render(&painter, image.rect(), boundingRect);
- m_model->setPrinting(false);
- if (true)
- image.convertToFormat(QImage::Format_Indexed8).save(fileName, "PNG");
- else
- image.save(fileName, "PNG");
- }
- else {
- QMessageBox::critical(this, tr("Error"), tr("Unknown format."));
- }
- }
+ QString selectedFilter;
+ QString fileName = QFileDialog::getSaveFileName(this, QString(), QString(), d->exporters.filters(), &selectedFilter);
+ if (!fileName.isNull()) {
+ Exporter *exporter = d->exporters.lookup(&fileName, selectedFilter);
+ if (!exporter) {
+ QMessageBox::critical(this, tr("Error"), tr("Unknown format."));
+ return;
+ }
+ exporter->exportToFile(fileName, m_model);
+ }
}
void