From 8daac83b192fc343bbf10b977dde68d50e464657 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Tue, 3 Mar 2020 20:35:54 +1100 Subject: [PATCH] footageviewer: allow dragging footage from footage viewer --- app/widget/viewer/footageviewer.cpp | 26 ++++++++++++++++++++++++++ app/widget/viewer/footageviewer.h | 3 +++ app/widget/viewer/viewer.h | 4 ++-- app/widget/viewer/viewerglwidget.cpp | 7 +++++++ app/widget/viewer/viewerglwidget.h | 8 ++++++++ 5 files changed, 46 insertions(+), 2 deletions(-) diff --git a/app/widget/viewer/footageviewer.cpp b/app/widget/viewer/footageviewer.cpp index 0909202fd..5a4c4f860 100644 --- a/app/widget/viewer/footageviewer.cpp +++ b/app/widget/viewer/footageviewer.cpp @@ -1,5 +1,8 @@ #include "footageviewer.h" +#include +#include + #include "project/project.h" FootageViewerWidget::FootageViewerWidget(QWidget *parent) : @@ -13,6 +16,8 @@ FootageViewerWidget::FootageViewerWidget(QWidget *parent) : NodeParam::ConnectEdge(video_node_->output(), viewer_node_->texture_input()); NodeParam::ConnectEdge(audio_node_->output(), viewer_node_->samples_input()); NodeParam::ConnectEdge(video_node_->output(), viewer_node_->length_input()); + + connect(gl_widget_, &ViewerGLWidget::DragStarted, this, &FootageViewerWidget::StartFootageDrag); } Footage *FootageViewerWidget::GetFootage() const @@ -62,3 +67,24 @@ void FootageViewerWidget::SetFootage(Footage *footage) audio_renderer_->InvalidateCache(TimeRange(0, viewer_node_->Length())); } } + +void FootageViewerWidget::StartFootageDrag() +{ + if (!GetFootage()) { + return; + } + + qDebug() << "Drag start!"; + QDrag* drag = new QDrag(this); + QMimeData* mimedata = new QMimeData(); + + QByteArray encoded_data; + QDataStream stream(&encoded_data, QIODevice::WriteOnly); + + stream << -1 << reinterpret_cast(GetFootage()); + + mimedata->setData("application/x-oliveprojectitemdata", encoded_data); + drag->setMimeData(mimedata); + + drag->exec(); +} diff --git a/app/widget/viewer/footageviewer.h b/app/widget/viewer/footageviewer.h index 6a4168db0..06bbd46e5 100644 --- a/app/widget/viewer/footageviewer.h +++ b/app/widget/viewer/footageviewer.h @@ -24,6 +24,9 @@ private: ViewerOutput* viewer_node_; +private slots: + void StartFootageDrag(); + }; #endif // FOOTAGEVIEWERWIDGET_H diff --git a/app/widget/viewer/viewer.h b/app/widget/viewer/viewer.h index 74ef0a60a..a84aebc59 100644 --- a/app/widget/viewer/viewer.h +++ b/app/widget/viewer/viewer.h @@ -118,6 +118,8 @@ protected: OpenGLBackend* video_renderer_; AudioBackend* audio_renderer_; + ViewerGLWidget* gl_widget_; + private: void UpdateTimeInternal(int64_t i); @@ -131,8 +133,6 @@ private: ViewerSizer* sizer_; - ViewerGLWidget* gl_widget_; - PlaybackControls* controls_; qint64 start_msec_; diff --git a/app/widget/viewer/viewerglwidget.cpp b/app/widget/viewer/viewerglwidget.cpp index 76b2f9efc..ca34dafd8 100644 --- a/app/widget/viewer/viewerglwidget.cpp +++ b/app/widget/viewer/viewerglwidget.cpp @@ -167,6 +167,13 @@ const QString &ViewerGLWidget::ocio_look() const return ocio_look_; } +void ViewerGLWidget::mousePressEvent(QMouseEvent *event) +{ + QOpenGLWidget::mousePressEvent(event); + + emit DragStarted(); +} + void ViewerGLWidget::SetOCIOParameters(const QString &display, const QString &view, const QString &look) { ocio_display_ = display; diff --git a/app/widget/viewer/viewerglwidget.h b/app/widget/viewer/viewerglwidget.h index cb46d46de..f2e2bd1ca 100644 --- a/app/widget/viewer/viewerglwidget.h +++ b/app/widget/viewer/viewerglwidget.h @@ -119,7 +119,15 @@ public slots: const QString& ocio_view() const; const QString& ocio_look() const; +signals: + void DragStarted(); + protected: + /** + * @brief Override the mouse press event simply to emit the DragStarted() signal + */ + virtual void mousePressEvent(QMouseEvent* event) override; + /** * @brief Initialize function to set up the OpenGL context upon its construction *