WIP: Display cover when double-clicking preview

This commit is contained in:
Martchus 2017-08-15 18:17:11 +02:00
parent a3b8048156
commit 3437824e42
3 changed files with 88 additions and 5 deletions

View File

@ -17,7 +17,7 @@
#include <c++utilities/io/catchiofailure.h> #include <c++utilities/io/catchiofailure.h>
#include <QEvent> #include <QEvent>
#include <QGraphicsScene> #include <QGraphicsSceneMouseEvent>
#include <QGraphicsTextItem> #include <QGraphicsTextItem>
#include <QGraphicsRectItem> #include <QGraphicsRectItem>
#include <QFile> #include <QFile>
@ -43,6 +43,18 @@ using namespace ConversionUtilities;
namespace QtGui { 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. * \brief Constructs a new PicturePreviewSelection for the specified \a tag and \a field.
*/ */
@ -520,6 +532,21 @@ void PicturePreviewSelection::dropEvent(QDropEvent *event)
event->ignore(); 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. * \brief Handles selected type being switched.
*/ */
@ -569,8 +596,10 @@ void PicturePreviewSelection::updateDescription(int lastIndex, int newIndex)
void PicturePreviewSelection::updatePreview(int index) void PicturePreviewSelection::updatePreview(int index)
{ {
if(!m_scene) { if(!m_scene) {
m_scene = new QGraphicsScene(m_ui->previewGraphicsView); m_scene = new PicturePreviewScene(m_ui->previewGraphicsView);
m_ui->previewGraphicsView->setScene(m_scene); m_ui->previewGraphicsView->setScene(m_scene);
connect(m_scene, &PicturePreviewScene::displayRequested, this, &PicturePreviewSelection::displaySelected);
//m_scene->installEventFilter(this);
} }
if(!m_textItem) { if(!m_textItem) {
m_textItem = new QGraphicsTextItem; m_textItem = new QGraphicsTextItem;

View File

@ -6,11 +6,12 @@
#include <tagparser/tag.h> #include <tagparser/tag.h>
#include <QWidget> #include <QWidget>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <memory> #include <memory>
QT_FORWARD_DECLARE_CLASS(QEvent) QT_FORWARD_DECLARE_CLASS(QEvent)
QT_FORWARD_DECLARE_CLASS(QGraphicsScene)
QT_FORWARD_DECLARE_CLASS(QGraphicsTextItem) QT_FORWARD_DECLARE_CLASS(QGraphicsTextItem)
QT_FORWARD_DECLARE_CLASS(QGraphicsPixmapItem) QT_FORWARD_DECLARE_CLASS(QGraphicsPixmapItem)
QT_FORWARD_DECLARE_CLASS(QGraphicsRectItem) QT_FORWARD_DECLARE_CLASS(QGraphicsRectItem)
@ -29,6 +30,44 @@ namespace Ui {
class PicturePreviewSelection; 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 class PicturePreviewSelection : public QWidget
{ {
Q_OBJECT Q_OBJECT
@ -62,6 +101,8 @@ protected:
void resizeEvent(QResizeEvent *event); void resizeEvent(QResizeEvent *event);
void dragEnterEvent(QDragEnterEvent *event); void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event); void dropEvent(QDropEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
bool eventFilter(QObject *watched, QEvent *event);
private slots: private slots:
void typeSwitched(int index); void typeSwitched(int index);
@ -74,7 +115,7 @@ private:
void setup(PreviousValueHandling previousValueHandling = PreviousValueHandling::Clear); void setup(PreviousValueHandling previousValueHandling = PreviousValueHandling::Clear);
std::unique_ptr<Ui::PicturePreviewSelection> m_ui; std::unique_ptr<Ui::PicturePreviewSelection> m_ui;
QGraphicsScene *m_scene; PicturePreviewScene *m_scene;
QGraphicsTextItem *m_textItem; QGraphicsTextItem *m_textItem;
QPixmap m_pixmap; QPixmap m_pixmap;
QGraphicsPixmapItem *m_pixmapItem; QGraphicsPixmapItem *m_pixmapItem;

View File

@ -2,6 +2,14 @@
<ui version="4.0"> <ui version="4.0">
<class>QtGui::PicturePreviewSelection</class> <class>QtGui::PicturePreviewSelection</class>
<widget class="QWidget" name="QtGui::PicturePreviewSelection"> <widget class="QWidget" name="QtGui::PicturePreviewSelection">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>346</width>
<height>260</height>
</rect>
</property>
<property name="windowTitle"> <property name="windowTitle">
<string>Form</string> <string>Form</string>
</property> </property>
@ -79,7 +87,7 @@
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
<widget class="QGraphicsView" name="previewGraphicsView"> <widget class="PicturePreview" name="previewGraphicsView">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch> <horstretch>0</horstretch>
@ -203,6 +211,11 @@
<extends>QLineEdit</extends> <extends>QLineEdit</extends>
<header location="global">qtutilities/widgets/clearlineedit.h</header> <header location="global">qtutilities/widgets/clearlineedit.h</header>
</customwidget> </customwidget>
<customwidget>
<class>PicturePreview</class>
<extends>QGraphicsView</extends>
<header>./picturepreview.h</header>
</customwidget>
</customwidgets> </customwidgets>
<resources/> <resources/>
<connections/> <connections/>