Skip to content

Commit

Permalink
Merge pull request bitcoin#4141
Browse files Browse the repository at this point in the history
9d558e1 ui: Check for !pixmap() before trying to export QR code (Wladimir J. van der Laan)
  • Loading branch information
laanwj committed May 8, 2014
2 parents 4629f95 + 9d558e1 commit 69e264b
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 6 deletions.
25 changes: 19 additions & 6 deletions src/qt/receiverequestdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include <QMimeData>
#include <QMouseEvent>
#include <QPixmap>
#include <QMenu>
#if QT_VERSION < 0x050000
#include <QUrl>
#endif
Expand All @@ -29,26 +30,27 @@
#endif

QRImageWidget::QRImageWidget(QWidget *parent):
QLabel(parent)
QLabel(parent), contextMenu(0)
{
setContextMenuPolicy(Qt::ActionsContextMenu);

contextMenu = new QMenu();
QAction *saveImageAction = new QAction(tr("&Save Image..."), this);
connect(saveImageAction, SIGNAL(triggered()), this, SLOT(saveImage()));
addAction(saveImageAction);
contextMenu->addAction(saveImageAction);
QAction *copyImageAction = new QAction(tr("&Copy Image"), this);
connect(copyImageAction, SIGNAL(triggered()), this, SLOT(copyImage()));
addAction(copyImageAction);
contextMenu->addAction(copyImageAction);
}

QImage QRImageWidget::exportImage()
{
if(!pixmap())
return QImage();
return pixmap()->toImage().scaled(EXPORT_IMAGE_SIZE, EXPORT_IMAGE_SIZE);
}

void QRImageWidget::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
if(event->button() == Qt::LeftButton && pixmap())
{
event->accept();
QMimeData *mimeData = new QMimeData;
Expand All @@ -64,6 +66,8 @@ void QRImageWidget::mousePressEvent(QMouseEvent *event)

void QRImageWidget::saveImage()
{
if(!pixmap())
return;
QString fn = GUIUtil::getSaveFileName(this, tr("Save QR Code"), QString(), tr("PNG Image (*.png)"), NULL);
if (!fn.isEmpty())
{
Expand All @@ -73,9 +77,18 @@ void QRImageWidget::saveImage()

void QRImageWidget::copyImage()
{
if(!pixmap())
return;
QApplication::clipboard()->setImage(exportImage());
}

void QRImageWidget::contextMenuEvent(QContextMenuEvent *event)
{
if(!pixmap())
return;
contextMenu->exec(event->globalPos());
}

ReceiveRequestDialog::ReceiveRequestDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::ReceiveRequestDialog),
Expand Down
7 changes: 7 additions & 0 deletions src/qt/receiverequestdialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ namespace Ui {
class ReceiveRequestDialog;
}
class OptionsModel;
QT_BEGIN_NAMESPACE
class QMenu;
QT_END_NAMESPACE

/* Label widget for QR code. This image can be dragged, dropped, copied and saved
* to disk.
Expand All @@ -33,6 +36,10 @@ public slots:

protected:
virtual void mousePressEvent(QMouseEvent *event);
virtual void contextMenuEvent(QContextMenuEvent *event);

private:
QMenu *contextMenu;
};

class ReceiveRequestDialog : public QDialog
Expand Down

0 comments on commit 69e264b

Please sign in to comment.