From 8734fd2e0ccde49312956332d77f696bed65646a Mon Sep 17 00:00:00 2001
From: Rafael <Syping@users.noreply.github.com>
Date: Thu, 14 Apr 2016 03:44:38 +0200
Subject: [PATCH] keyboard based picture dialog

---
 PictureDialog.cpp | 25 ++++++++++++++++++++++++-
 PictureDialog.h   |  3 +++
 PictureDialog.ui  | 14 +++++++++++++-
 3 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/PictureDialog.cpp b/PictureDialog.cpp
index c0b61f9..4dca4cc 100755
--- a/PictureDialog.cpp
+++ b/PictureDialog.cpp
@@ -34,8 +34,11 @@
 #include <QVariantMap>
 #include <QJsonArray>
 #include <QKeyEvent>
+#include <QMimeData>
+#include <QBuffer>
 #include <QDebug>
 #include <QList>
+#include <QDrag>
 #include <QUrl>
 #include <QDir>
 
@@ -74,6 +77,7 @@ PictureDialog::~PictureDialog()
 
 bool PictureDialog::eventFilter(QObject *obj, QEvent *ev)
 {
+    bool returnValue = false;
     if (obj == this)
     {
         if (ev->type() == QEvent::KeyPress)
@@ -82,14 +86,33 @@ bool PictureDialog::eventFilter(QObject *obj, QEvent *ev)
             switch (keyEvent->key()){
             case Qt::Key_Left:
                 emit previousPictureRequested();
+                returnValue = true;
                 break;
             case Qt::Key_Right:
                 emit nextPictureRequested();
+                returnValue = true;
+                break;
+            case Qt::Key_E: case Qt::Key_S: case Qt::Key_Save:
+                ui->cmdExport->click();
+                returnValue = true;
+                break;
+            case Qt::Key_C: case Qt::Key_Q: case Qt::Key_Exit:
+                ui->cmdClose->click();
+                returnValue = true;
+                break;
+            case Qt::Key_Enter: case Qt::Key_Return:
+                on_labPicture_mouseDoubleClicked();
+                returnValue = true;
                 break;
             }
         }
     }
-    return false;
+    return returnValue;
+}
+
+void PictureDialog::mousePressEvent(QMouseEvent *ev)
+{
+    ev->accept();
 }
 
 void PictureDialog::dialogNextPictureRequested()
diff --git a/PictureDialog.h b/PictureDialog.h
index f52a9e1..2fe93e3 100755
--- a/PictureDialog.h
+++ b/PictureDialog.h
@@ -21,7 +21,9 @@
 
 #include "SnapmaticPicture.h"
 #include "ProfileDatabase.h"
+#include <QMouseEvent>
 #include <QDialog>
+#include <QEvent>
 #include <QMenu>
 
 namespace Ui {
@@ -61,6 +63,7 @@ signals:
 
 protected:
     bool eventFilter(QObject *obj, QEvent *ev);
+    void mousePressEvent(QMouseEvent *ev);
 
 private:
     ProfileDatabase *profileDB;
diff --git a/PictureDialog.ui b/PictureDialog.ui
index 1741933..8bfa4a9 100755
--- a/PictureDialog.ui
+++ b/PictureDialog.ui
@@ -87,7 +87,7 @@
          <bool>true</bool>
         </property>
         <property name="textInteractionFlags">
-         <set>Qt::TextBrowserInteraction</set>
+         <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
         </property>
        </widget>
       </item>
@@ -119,22 +119,34 @@
          <layout class="QHBoxLayout" name="hlButtons">
           <item>
            <widget class="QPushButton" name="cmdExport">
+            <property name="focusPolicy">
+             <enum>Qt::ClickFocus</enum>
+            </property>
             <property name="toolTip">
              <string>Export picture</string>
             </property>
             <property name="text">
              <string>&amp;Export</string>
             </property>
+            <property name="autoDefault">
+             <bool>false</bool>
+            </property>
            </widget>
           </item>
           <item>
            <widget class="QPushButton" name="cmdClose">
+            <property name="focusPolicy">
+             <enum>Qt::ClickFocus</enum>
+            </property>
             <property name="toolTip">
              <string>Close</string>
             </property>
             <property name="text">
              <string>&amp;Close</string>
             </property>
+            <property name="autoDefault">
+             <bool>false</bool>
+            </property>
            </widget>
           </item>
          </layout>