aboutsummaryrefslogtreecommitdiffstats
path: root/gui/basewindow.cc
diff options
context:
space:
mode:
authorMiodrag Milanovic <mmicko@gmail.com>2020-01-05 13:51:12 +0100
committerMiodrag Milanovic <mmicko@gmail.com>2020-01-05 13:51:12 +0100
commit3f439c1ef2c1f4b7694d05be53117f0afe97cc17 (patch)
treeaf84b01b5c786b564a684170ec17b1a86ac5e283 /gui/basewindow.cc
parentabfe31d5d22a0ed1cc6ef32cf73fc1826b090b1c (diff)
downloadnextpnr-3f439c1ef2c1f4b7694d05be53117f0afe97cc17.tar.gz
nextpnr-3f439c1ef2c1f4b7694d05be53117f0afe97cc17.tar.bz2
nextpnr-3f439c1ef2c1f4b7694d05be53117f0afe97cc17.zip
Enable screenshot and recording feature
Diffstat (limited to 'gui/basewindow.cc')
-rw-r--r--gui/basewindow.cc50
1 files changed, 50 insertions, 0 deletions
diff --git a/gui/basewindow.cc b/gui/basewindow.cc
index c3dbc131..0bfc59a3 100644
--- a/gui/basewindow.cc
+++ b/gui/basewindow.cc
@@ -23,6 +23,7 @@
#include <QFileDialog>
#include <QGridLayout>
#include <QIcon>
+#include <QImageWriter>
#include <QInputDialog>
#include <QSplitter>
#include <fstream>
@@ -252,6 +253,18 @@ void BaseMainWindow::createMenusAndBars()
actionDisplayGroups->setChecked(true);
connect(actionDisplayGroups, &QAction::triggered, this, &BaseMainWindow::enableDisableDecals);
+ actionScreenshot = new QAction("Screenshot", this);
+ actionScreenshot->setIcon(QIcon(":/icons/resources/camera.png"));
+ actionScreenshot->setStatusTip("Taking a screenshot");
+ connect(actionScreenshot, &QAction::triggered, this, &BaseMainWindow::screenshot);
+
+ actionMovie = new QAction("Recording", this);
+ actionMovie->setIcon(QIcon(":/icons/resources/film.png"));
+ actionMovie->setStatusTip("Saving a movie");
+ actionMovie->setCheckable(true);
+ actionMovie->setChecked(false);
+ connect(actionMovie, &QAction::triggered, this, &BaseMainWindow::saveMovie);
+
// set initial state
fpgaView->enableDisableDecals(actionDisplayBel->isChecked(), actionDisplayWire->isChecked(),
actionDisplayPip->isChecked(), actionDisplayGroups->isChecked());
@@ -317,6 +330,9 @@ void BaseMainWindow::createMenusAndBars()
deviceViewToolBar->addAction(actionDisplayWire);
deviceViewToolBar->addAction(actionDisplayPip);
deviceViewToolBar->addAction(actionDisplayGroups);
+ deviceViewToolBar->addSeparator();
+ deviceViewToolBar->addAction(actionScreenshot);
+ deviceViewToolBar->addAction(actionMovie);
// Add status bar with progress bar
statusBar = new QStatusBar();
@@ -362,6 +378,40 @@ void BaseMainWindow::save_json()
}
}
+void BaseMainWindow::screenshot()
+{
+ QString fileName = QFileDialog::getSaveFileName(this, QString("Save screenshot"), QString(), QString("*.png"));
+ if (!fileName.isEmpty()) {
+ QImage image = fpgaView->grabFramebuffer();
+ if (!fileName.endsWith(".png"))
+ fileName += ".png";
+ QImageWriter imageWriter(fileName, "png");
+ if (imageWriter.write(image))
+ log("Saving screenshot successful.\n");
+ else
+ log("Saving screenshot failed.\n");
+ }
+}
+
+void BaseMainWindow::saveMovie()
+{
+ if (actionMovie->isChecked()) {
+ QString dir = QFileDialog::getExistingDirectory(this, tr("Select Movie Directory"), QDir::currentPath(),
+ QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+ if (!dir.isEmpty()) {
+ bool ok;
+ int frames = QInputDialog::getInt(this, "Skip frames", tr("Frames to skip (1 frame = 50ms):"), 5, 0, 1000,
+ 1, &ok);
+ if (ok)
+ fpgaView->movieStart(dir, frames);
+ else
+ actionMovie->setChecked(false);
+ } else
+ actionMovie->setChecked(false);
+ } else {
+ fpgaView->movieStop();
+ }
+}
void BaseMainWindow::pack_finished(bool status)
{
disableActions();