diff --git a/gui/base.qrc b/gui/base.qrc index 0671fa9e..509a584f 100644 --- a/gui/base.qrc +++ b/gui/base.qrc @@ -30,5 +30,6 @@ resources/group.png resources/camera.png resources/film.png + resources/save_svg.png diff --git a/gui/basewindow.cc b/gui/basewindow.cc index 7f767c58..91edc310 100644 --- a/gui/basewindow.cc +++ b/gui/basewindow.cc @@ -266,6 +266,11 @@ void BaseMainWindow::createMenusAndBars() actionMovie->setChecked(false); connect(actionMovie, &QAction::triggered, this, &BaseMainWindow::saveMovie); + actionSaveSVG = new QAction("Save SVG", this); + actionSaveSVG->setIcon(QIcon(":/icons/resources/save_svg.png")); + actionSaveSVG->setStatusTip("Saving a SVG"); + connect(actionSaveSVG, &QAction::triggered, this, &BaseMainWindow::saveSVG); + // set initial state fpgaView->enableDisableDecals(actionDisplayBel->isChecked(), actionDisplayWire->isChecked(), actionDisplayPip->isChecked(), actionDisplayGroups->isChecked()); @@ -334,6 +339,7 @@ void BaseMainWindow::createMenusAndBars() deviceViewToolBar->addSeparator(); deviceViewToolBar->addAction(actionScreenshot); deviceViewToolBar->addAction(actionMovie); + deviceViewToolBar->addAction(actionSaveSVG); // Add status bar with progress bar statusBar = new QStatusBar(); @@ -416,6 +422,27 @@ void BaseMainWindow::saveMovie() fpgaView->movieStop(); } } + +void BaseMainWindow::saveSVG() +{ + QString fileName = QFileDialog::getSaveFileName(this, QString("Save SVG"), QString(), QString("*.svg")); + if (!fileName.isEmpty()) { + if (!fileName.endsWith(".svg")) + fileName += ".svg"; + bool ok; + QString options = + QInputDialog::getText(this, "Save SVG", tr("Save options:"), QLineEdit::Normal, "scale=500", &ok); + if (ok) { + try { + ctx->writeSVG(fileName.toStdString(), options.toStdString()); + log("Saving SVG successful.\n"); + } catch (const log_execution_error_exception &ex) { + log("Saving SVG failed.\n"); + } + } + } +} + void BaseMainWindow::pack_finished(bool status) { disableActions(); diff --git a/gui/basewindow.h b/gui/basewindow.h index fe9dfdf2..f90991e1 100644 --- a/gui/basewindow.h +++ b/gui/basewindow.h @@ -85,6 +85,7 @@ class BaseMainWindow : public QMainWindow void screenshot(); void saveMovie(); + void saveSVG(); Q_SIGNALS: void contextChanged(Context *ctx); @@ -134,6 +135,7 @@ class BaseMainWindow : public QMainWindow QAction *actionScreenshot; QAction *actionMovie; + QAction *actionSaveSVG; }; NEXTPNR_NAMESPACE_END diff --git a/gui/resources/save_svg.png b/gui/resources/save_svg.png new file mode 100644 index 00000000..c7a5da5e Binary files /dev/null and b/gui/resources/save_svg.png differ