From a1e6ac2e0942a3950f76432e8dcf3c195c281052 Mon Sep 17 00:00:00 2001 From: Stefan Fuchs Date: Wed, 29 Nov 2017 12:40:06 +0100 Subject: Dive picture handling: Re enable multi select, improve mouse events Some improvements for the dive picture tab and dive pictures in profile: - Bugfix mouse event in profile: Only Left-click will open picture - Bugfix mouse events in picture tab: - Re-enable context menu (Windows bug mainly) - Re-enable multi select in a nice way - Only double-left-click will open picture Signed-off-by: Stefan Fuchs --- desktop-widgets/divepicturewidget.cpp | 48 +++++++++++++++++------------------ 1 file changed, 23 insertions(+), 25 deletions(-) (limited to 'desktop-widgets/divepicturewidget.cpp') diff --git a/desktop-widgets/divepicturewidget.cpp b/desktop-widgets/divepicturewidget.cpp index fcdd010da..eadc493e8 100644 --- a/desktop-widgets/divepicturewidget.cpp +++ b/desktop-widgets/divepicturewidget.cpp @@ -19,42 +19,40 @@ DivePictureWidget::DivePictureWidget(QWidget *parent) : QListView(parent) { - connect(this, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(doubleClicked(const QModelIndex &))); } -void DivePictureWidget::doubleClicked(const QModelIndex &index) +void DivePictureWidget::mouseDoubleClickEvent(QMouseEvent *event) { - QString filePath = model()->data(index, Qt::DisplayPropertyRole).toString(); - emit photoDoubleClicked(localFilePath(filePath)); + if (event->button() == Qt::LeftButton) { + QString filePath = model()->data(indexAt(event->pos()), Qt::DisplayPropertyRole).toString(); + emit photoDoubleClicked(localFilePath(filePath)); + } } - void DivePictureWidget::mousePressEvent(QMouseEvent *event) { - int doubleClickInterval = qApp->styleHints()->mouseDoubleClickInterval(); - static qint64 lasttime = 0L; - qint64 timestamp = QDateTime::currentDateTime().toMSecsSinceEpoch(); - - if (timestamp - lasttime <= doubleClickInterval) { - doubleClicked(indexAt(event->pos())); - } else { - lasttime = timestamp; - QPixmap pixmap = model()->data(indexAt(event->pos()), Qt::DecorationRole).value(); - + if (event->button() == Qt::LeftButton && event->modifiers() == Qt::NoModifier) { QString filename = model()->data(indexAt(event->pos()), Qt::DisplayPropertyRole).toString(); - QByteArray itemData; - QDataStream dataStream(&itemData, QIODevice::WriteOnly); - dataStream << filename << event->pos(); + if (!filename.isEmpty()) { + QPixmap pixmap = model()->data(indexAt(event->pos()), Qt::DecorationRole).value(); + QByteArray itemData; + QDataStream dataStream(&itemData, QIODevice::WriteOnly); + dataStream << filename << event->pos(); + + QMimeData *mimeData = new QMimeData; + mimeData->setData("application/x-subsurfaceimagedrop", itemData); - QMimeData *mimeData = new QMimeData; - mimeData->setData("application/x-subsurfaceimagedrop", itemData); + QDrag *drag = new QDrag(this); + drag->setMimeData(mimeData); + drag->setPixmap(pixmap); + drag->setHotSpot(event->pos() - rectForIndex(indexAt(event->pos())).topLeft()); - QDrag *drag = new QDrag(this); - drag->setMimeData(mimeData); - drag->setPixmap(pixmap); - drag->setHotSpot(event->pos() - rectForIndex(indexAt(event->pos())).topLeft()); + drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction); + } - drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction); + QListView::mousePressEvent(event); + } else { + QListView::mousePressEvent(event); } } -- cgit v1.2.3-70-g09d2