Dirk,

On 03 Nov 2015, at 16:48, Dirk Hohndel <d...@hohndel.org> wrote:

Well, it didn't include the patch. I went back to the old patch and that
of course doesn't apply any more. I can manually make it work or I can ask
you to resend a working patch :-)

From e00d8b6fca596e194ee16e571bba2f55a04a820d Mon Sep 17 00:00:00 2001
From: "Robert C. Helling" <hell...@atdotde.de>
Date: Tue, 3 Nov 2015 21:17:50 +0100
Subject: [PATCH] Drag and Drop Images

Now that we have the possibility to add images without meaningful
time stamps to a dive, we should let the user provide that time
offset manually. This patch allowed pictures to be dragged from
the image list to the profile.

Signed-off-by: Robert C. Helling <hell...@atdotde.de>
---
 desktop-widgets/divepicturewidget.cpp | 30 ++++++++++++++++
 desktop-widgets/divepicturewidget.h   |  3 ++
 profile-widget/profilewidget2.cpp     | 66 +++++++++++++++++++++++++++++++++++
 profile-widget/profilewidget2.h       |  4 +++
 4 files changed, 103 insertions(+)

diff --git a/desktop-widgets/divepicturewidget.cpp 
b/desktop-widgets/divepicturewidget.cpp
index bed3d3b..daf62c6 100644
--- a/desktop-widgets/divepicturewidget.cpp
+++ b/desktop-widgets/divepicturewidget.cpp
@@ -14,6 +14,7 @@
 #include <mainwindow.h>
 #include <qthelper.h>
 #include <QStandardPaths>
+#include <QtWidgets>
 
 void loadPicture(struct picture *picture)
 {
@@ -98,3 +99,32 @@ void DivePictureWidget::doubleClicked(const QModelIndex 
&index)
        QString filePath = model()->data(index, 
Qt::DisplayPropertyRole).toString();
        emit photoDoubleClicked(localFilePath(filePath));
 }
+
+
+void DivePictureWidget::mousePressEvent(QMouseEvent *event)
+{
+
+       QPixmap pixmap = model()->data(indexAt(event->pos()), 
Qt::DecorationRole).value<QPixmap>();
+
+       QString filename = model()->data(indexAt(event->pos()), 
Qt::DisplayPropertyRole).toString();
+
+       QByteArray itemData;
+       QDataStream dataStream(&itemData, QIODevice::WriteOnly);
+       dataStream << filename << event->pos();
+
+       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());
+
+       QPixmap tempPixmap = pixmap;
+       QPainter painter;
+       painter.begin(&tempPixmap);
+       painter.fillRect(pixmap.rect(), QColor(127, 127, 127, 127));
+       painter.end();
+
+       drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction);
+}
diff --git a/desktop-widgets/divepicturewidget.h 
b/desktop-widgets/divepicturewidget.h
index 54f5bb8..f02d6b5 100644
--- a/desktop-widgets/divepicturewidget.h
+++ b/desktop-widgets/divepicturewidget.h
@@ -23,6 +23,9 @@ class DivePictureWidget : public QListView {
        Q_OBJECT
 public:
        DivePictureWidget(QWidget *parent);
+protected:
+       void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+
 signals:
        void photoDoubleClicked(const QString filePath);
 private
diff --git a/profile-widget/profilewidget2.cpp 
b/profile-widget/profilewidget2.cpp
index 6538185..550f2b2 100644
--- a/profile-widget/profilewidget2.cpp
+++ b/profile-widget/profilewidget2.cpp
@@ -16,6 +16,7 @@
 #include "divepicturemodel.h"
 #include "maintab.h"
 #include "diveplanner.h"
+#include "divelist.h"
 
 #include <libdivecomputer/parser.h>
 #include <QScrollBar>
@@ -30,6 +31,7 @@
 #endif
 #include "mainwindow.h"
 #include "preferences/preferencesdialog.h"
+#include <QtWidgets>
 
 /* This is the global 'Item position' variable.
  * it should tell you where to position things up
@@ -123,6 +125,8 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) : 
QGraphicsView(parent),
        scene()->installEventFilter(this);
        connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), this, 
SLOT(settingsChanged()));
        QAction *action = NULL;
+       setAcceptDrops(true);
+
 #define ADD_ACTION(SHORTCUT, Slot)                                  \
        action = new QAction(this);                                 \
        action->setShortcut(SHORTCUT);                              \
@@ -1840,3 +1844,65 @@ void ProfileWidget2::plotPictures()
                pictures.push_back(item);
        }
 }
+
+void ProfileWidget2::dropEvent(QDropEvent *event)
+{
+       if (event->mimeData()->hasFormat("application/x-subsurfaceimagedrop")) {
+               QByteArray itemData = 
event->mimeData()->data("application/x-subsurfaceimagedrop");
+               QDataStream dataStream(&itemData, QIODevice::ReadOnly);
+
+               QString filename;
+               QPoint offset;
+               dataStream >> filename >> offset;
+
+               QPointF mappedPos = mapToScene(event->pos());
+
+               FOR_EACH_PICTURE(current_dive) {
+                       if (QString(picture->filename) == filename) {
+                               picture->offset.seconds = 
timeAxis->valueAt(mappedPos);
+                               mark_divelist_changed(true);
+                               break;
+                       }
+               }
+               copy_dive(current_dive, &displayed_dive);
+               DivePictureModel::instance()->updateDivePictures();
+
+
+               if (event->source() == this) {
+                       event->setDropAction(Qt::MoveAction);
+                       event->accept();
+               } else {
+                       event->acceptProposedAction();
+               }
+       } else {
+               event->ignore();
+       }
+}
+
+void ProfileWidget2::dragEnterEvent(QDragEnterEvent *event)
+{
+       if (event->mimeData()->hasFormat("application/x-subsurfaceimagedrop")) {
+               if (event->source() == this) {
+                       event->setDropAction(Qt::MoveAction);
+                       event->accept();
+               } else {
+                       event->acceptProposedAction();
+               }
+       } else {
+               event->ignore();
+       }
+}
+
+void ProfileWidget2::dragMoveEvent(QDragMoveEvent *event)
+{
+       if (event->mimeData()->hasFormat("application/x-subsurfaceimagedrop")) {
+               if (event->source() == this) {
+                       event->setDropAction(Qt::MoveAction);
+                       event->accept();
+               } else {
+                       event->acceptProposedAction();
+               }
+       } else {
+               event->ignore();
+       }
+}
diff --git a/profile-widget/profilewidget2.h b/profile-widget/profilewidget2.h
index ce3fda0..4142822 100644
--- a/profile-widget/profilewidget2.h
+++ b/profile-widget/profilewidget2.h
@@ -134,6 +134,10 @@ protected:
        virtual void mouseDoubleClickEvent(QMouseEvent *event);
        virtual void mousePressEvent(QMouseEvent *event);
        virtual void mouseReleaseEvent(QMouseEvent *event);
+       void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;
+       void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE;
+       void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE;
+
 
 private: /*methods*/
        void fixBackgroundPos();
-- 
1.9.5 (Apple Git-50.3)


here is the patch again rebased on current master. Sorry for the confusion.

Best
Robert

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

_______________________________________________
subsurface mailing list
subsurface@subsurface-divelog.org
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to