From 3437824e420d3cbc3dd6e0e8bb5849955cf36871 Mon Sep 17 00:00:00 2001 From: Martchus Date: Tue, 15 Aug 2017 18:17:11 +0200 Subject: [PATCH] WIP: Display cover when double-clicking preview --- gui/picturepreviewselection.cpp | 33 ++++++++++++++++++++++-- gui/picturepreviewselection.h | 45 +++++++++++++++++++++++++++++++-- gui/picturepreviewselection.ui | 15 ++++++++++- 3 files changed, 88 insertions(+), 5 deletions(-) diff --git a/gui/picturepreviewselection.cpp b/gui/picturepreviewselection.cpp index 45f0e1b..6ff18e3 100644 --- a/gui/picturepreviewselection.cpp +++ b/gui/picturepreviewselection.cpp @@ -17,7 +17,7 @@ #include #include -#include +#include #include #include #include @@ -43,6 +43,18 @@ using namespace ConversionUtilities; namespace QtGui { +void PicturePreviewScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) +{ + emit displayRequested(); + mouseEvent->accept(); +} + +void PicturePreview::mousePressEvent(QMouseEvent *mouseEvent) +{ + emit displayRequested(); + mouseEvent->accept(); +} + /*! * \brief Constructs a new PicturePreviewSelection for the specified \a tag and \a field. */ @@ -520,6 +532,21 @@ void PicturePreviewSelection::dropEvent(QDropEvent *event) event->ignore(); } +void PicturePreviewSelection::mouseDoubleClickEvent(QMouseEvent *event) +{ + displaySelected(); + event->accept(); +} + +bool PicturePreviewSelection::eventFilter(QObject *watched, QEvent *event) +{ + if(watched == m_scene && event->type() == QEvent::MouseButtonDblClick) { + displaySelected(); + return true; + } + return QWidget::eventFilter(watched, event); +} + /*! * \brief Handles selected type being switched. */ @@ -569,8 +596,10 @@ void PicturePreviewSelection::updateDescription(int lastIndex, int newIndex) void PicturePreviewSelection::updatePreview(int index) { if(!m_scene) { - m_scene = new QGraphicsScene(m_ui->previewGraphicsView); + m_scene = new PicturePreviewScene(m_ui->previewGraphicsView); m_ui->previewGraphicsView->setScene(m_scene); + connect(m_scene, &PicturePreviewScene::displayRequested, this, &PicturePreviewSelection::displaySelected); + //m_scene->installEventFilter(this); } if(!m_textItem) { m_textItem = new QGraphicsTextItem; diff --git a/gui/picturepreviewselection.h b/gui/picturepreviewselection.h index b4a310b..e4c0aed 100644 --- a/gui/picturepreviewselection.h +++ b/gui/picturepreviewselection.h @@ -6,11 +6,12 @@ #include #include +#include +#include #include QT_FORWARD_DECLARE_CLASS(QEvent) -QT_FORWARD_DECLARE_CLASS(QGraphicsScene) QT_FORWARD_DECLARE_CLASS(QGraphicsTextItem) QT_FORWARD_DECLARE_CLASS(QGraphicsPixmapItem) QT_FORWARD_DECLARE_CLASS(QGraphicsRectItem) @@ -29,6 +30,44 @@ namespace Ui { class PicturePreviewSelection; } +class PicturePreviewScene : public QGraphicsScene +{ + Q_OBJECT + +public: + PicturePreviewScene(QObject *parent = nullptr); + +signals: + void displayRequested(); + +protected: + void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent); +}; + +inline PicturePreviewScene::PicturePreviewScene(QObject *parent) : + QGraphicsScene(parent) +{ +} + +class PicturePreview : public QGraphicsView +{ + Q_OBJECT + +public: + PicturePreview(QWidget *parent = nullptr); + +signals: + void displayRequested(); + +protected: + void mousePressEvent(QMouseEvent *mouseEvent); +}; + +inline PicturePreview::PicturePreview(QWidget *parent) : + QGraphicsView(parent) +{ +} + class PicturePreviewSelection : public QWidget { Q_OBJECT @@ -62,6 +101,8 @@ protected: void resizeEvent(QResizeEvent *event); void dragEnterEvent(QDragEnterEvent *event); void dropEvent(QDropEvent *event); + void mouseDoubleClickEvent(QMouseEvent *event); + bool eventFilter(QObject *watched, QEvent *event); private slots: void typeSwitched(int index); @@ -74,7 +115,7 @@ private: void setup(PreviousValueHandling previousValueHandling = PreviousValueHandling::Clear); std::unique_ptr m_ui; - QGraphicsScene *m_scene; + PicturePreviewScene *m_scene; QGraphicsTextItem *m_textItem; QPixmap m_pixmap; QGraphicsPixmapItem *m_pixmapItem; diff --git a/gui/picturepreviewselection.ui b/gui/picturepreviewselection.ui index 395eade..936fecf 100644 --- a/gui/picturepreviewselection.ui +++ b/gui/picturepreviewselection.ui @@ -2,6 +2,14 @@ QtGui::PicturePreviewSelection + + + 0 + 0 + 346 + 260 + + Form @@ -79,7 +87,7 @@ 0 - + 0 @@ -203,6 +211,11 @@ QLineEdit
qtutilities/widgets/clearlineedit.h
+ + PicturePreview + QGraphicsView +
./picturepreview.h
+