diff options
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r-- | src/mainwindow.cpp | 59 |
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 |