this->parent = (MainWindow *)parent;
this->infoDialog = NULL;
this->aboutDialog = NULL;
+ this->screenshotDialog = NULL;
this->vmName = ((MainWindow *)parent)->uiInfo->vmName + " : "
+ QString::number(get_device_serial_number());
/* Advanced > Screen Shot menu */
action = advancedMenu->addAction("Screen Shot");
action->setIcon(QIcon(QPixmap(":/icons/screen_shot.png")));
- connect(action, SIGNAL(triggered()), this, SLOT(slotScreenshot()));
+ connect(action, SIGNAL(triggered()), this, SLOT(slotRequestScreenshot()));
/* = Host Keyboard menu = */
QMenu *keyboardMenu = advancedMenu->addMenu(
}
}
-void ContextMenu::slotScreenshot()
+void ContextMenu::slotRequestScreenshot()
{
- qDebug("screenshot");
+ qDebug("request screenshot");
parent->capture();
}
+void ContextMenu::slotShowScreenshot(const QPixmap &screenshot)
+{
+ qDebug("show screenshot");
+
+ if (screenshotDialog == NULL) {
+ screenshotDialog = new Screenshot(this, screenshot);
+ }
+
+ screenshotDialog->refresh(screenshot);
+ screenshotDialog->show();
+}
+
void ContextMenu::slotHostKeyboard(bool on)
{
qDebug("host keyboard : %s", on? "on" : "off");
--- /dev/null
+#include <QtWidgets>
+#include <qtoolbutton.h>
+#include "screenshot.h"
+#include "screenshotview.h"
+#include "mainwindow.h"
+
+void Screenshot::copy() {
+ qDebug("copy");
+ QClipboard* clipboard = QApplication::clipboard();
+ QPixmap pixmap(screenshotPixmap);
+ clipboard->clear();
+ clipboard->setPixmap(pixmap);
+}
+
+QString Screenshot::getRatio() {
+ return ratioStr;
+}
+
+void Screenshot::setRatio(int level) {
+ switch (level) {
+ case 0:
+ ratio = 0.125;
+ break;
+ case 1:
+ ratio = 0.25;
+ break;
+ case 2:
+ ratio = 0.50;
+ break;
+ case 3:
+ ratio = 1;
+ break;
+ case 4:
+ ratio = 2;
+ break;
+ case 5:
+ ratio = 4;
+ break;
+ case 6:
+ ratio = 8;
+ break;
+ }
+ ratioStr = QString::number(ratio * 100).append("%");
+}
+
+void Screenshot::scaleChanged(int level) {
+ qDebug("scale changed: %d", level);
+ sliderLevel = level;
+ QPixmap pixmap(screenshotPixmap);
+
+ setRatio(level);
+ scene->clear();
+ scene->addPixmap(pixmap.scaled(pixmap.size() * ratio, Qt::KeepAspectRatio, Qt::FastTransformation));
+ slider->setToolTip(ratioStr);
+}
+
+int Screenshot::getSliderLevel() {
+ return sliderLevel;
+}
+
+void Screenshot::refresh(const QPixmap &pixmap) {
+ qDebug("refresh");
+
+ screenshotPixmap = pixmap;
+
+ ((ScreenshotView*)view)->setWidthHeight(screenshotPixmap.width(),
+ screenshotPixmap.height());
+ ratioStr = "100%";
+ slider->setValue(3);
+ scene->clear();
+ scene->addPixmap(screenshotPixmap);
+ slider->setToolTip(ratioStr);
+
+}
+
+void Screenshot::setStatusBar(QString messsage) {
+ statusBar->showMessage(messsage);
+}
+
+bool Screenshot::save() {
+ qDebug("save");
+ QString vmname = ((MainWindow *) this->parent()->parent())->uiInfo->vmName;
+ QDateTime currentDateTime = QDateTime::currentDateTime();
+ QString date = currentDateTime.toString("yyyy-MM-dd-HHmmss");
+ QString defaultFile = QDir::homePath() + QDir::separator() + vmname + "-" + date + ".png";
+ QString filterName = "Image files (*.png *.jpg *.jpeg *.bmp)";
+ QString filename = QFileDialog::getSaveFileName(this, "Save Image", defaultFile, filterName);
+
+ if(filename.isEmpty()) {
+ qDebug("can not have file");
+ return false;
+ } else {
+ QPixmap pixmap(screenshotPixmap);
+ qDebug() << filename;
+ pixmap.save(filename);
+ return true;
+ }
+}
+
+void Screenshot::makeWidgets() {
+ toolbar = new QToolBar(this);
+
+ slider = new QSlider(Qt::Horizontal, this);
+ slider->setRange(0, 6);
+ slider->setValue(3);
+ slider->setFixedWidth(100);
+ slider->setToolTip("100%");
+ connect(slider, SIGNAL(valueChanged(int)), this, SLOT(scaleChanged(int)));
+
+ gridlayout = new QGridLayout;
+ gridlayout->setContentsMargins(0, 0, 0, 0);
+
+ saveAct = new QAction(tr("&Save"), this);
+ saveAct->setShortcuts(QKeySequence::Save);
+ saveAct->setIcon(QIcon(":/icons/save_screenshot_dialog.png"));
+ saveAct->setToolTip("Save to file");
+ connect(saveAct, SIGNAL(triggered()), this, SLOT(save()));
+
+ copyAct = new QAction(tr("&Copy"), this);
+ copyAct->setShortcuts(QKeySequence::Copy);
+ copyAct->setIcon(QIcon(":/icons/copy_screenshot_dialog.png"));
+ copyAct->setToolTip("Copy to clipboard");
+ connect(copyAct, SIGNAL(triggered()), this, SLOT(copy()));
+
+ refreshAct = new QAction(tr("&Refresh"), this);
+ refreshAct->setShortcuts(QKeySequence::Refresh);
+ refreshAct->setIcon(QIcon(":/icons/refresh_screenshot_dialog.png"));
+ refreshAct->setToolTip("Refresh Image");
+ connect(refreshAct, SIGNAL(triggered()), this->parent(),
+ SLOT(slotRequestScreenshot()));
+}
+
+void Screenshot::setImage() {
+ scene = new QGraphicsScene(this);
+
+ qDebug() << screenshotPixmap;
+ scene->addPixmap(screenshotPixmap);
+
+ view = new ScreenshotView(scene, this);
+ ratioStr = "100%";
+ ((ScreenshotView*) view)->setWidthHeight(screenshotPixmap.width(),
+ screenshotPixmap.height());
+ view->setScene(scene);
+ view->setMouseTracking(true);
+
+ QScrollArea* area = new QScrollArea(this);
+ area->setFixedSize(screenshotPixmap.width(), screenshotPixmap.height());
+ view->setCornerWidget(area);
+}
+
+Screenshot::Screenshot(QWidget *parent, const QPixmap &pixmap) :
+ QDialog(parent), screenshotPixmap(pixmap) {
+ QString vmname = ((MainWindow *) parent->parent())->uiInfo->vmName + " : "
+ + QString::number(get_device_serial_number());
+ MainWindow *mainWindow = (MainWindow *) parent->parent();
+ this->resize(mainWindow->uiInfo->getMainSize());
+ setWindowTitle("Screen Shot - " + vmname);
+
+ makeWidgets();
+
+ setImage();
+
+ statusBar = new QStatusBar;
+
+ toolbar->addAction(saveAct);
+ toolbar->addAction(copyAct);
+ toolbar->addAction(refreshAct);
+ toolbar->addWidget(slider);
+ gridlayout->addWidget(toolbar, 0, 0);
+ gridlayout->addWidget(view, 1, 0);
+ gridlayout->addWidget(statusBar, 2, 0);
+
+ this->setLayout(gridlayout);
+}
+
+void Screenshot::showEvent(QShowEvent *event) {
+ Q_UNUSED(event)
+
+ QWidget *win = ((QWidget *) this->parent());
+ move(win->geometry().center().x(),
+ win->geometry().center().y() - (geometry().size().height() / 2));
+}
+
+Screenshot::~Screenshot() {
+ qDebug("distructor");
+ ((ContextMenu*)this->parent())->screenshotDialog = NULL;
+}