From 912dcfdb3b05d35054ba939eb165355766bb03af Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Fri, 13 May 2022 09:52:28 -0700 Subject: [PATCH] timeline: allow dropping on trackviewitem to overwrite at 0 Fixes #1928 --- app/widget/timelinewidget/timelinewidget.cpp | 5 +++++ .../timelinewidget/trackview/trackview.cpp | 3 +++ .../timelinewidget/trackview/trackview.h | 4 ++++ .../trackview/trackviewitem.cpp | 22 +++++++++++++++++++ .../timelinewidget/trackview/trackviewitem.h | 10 +++++++++ .../view/timelineviewmouseevent.h | 1 + 6 files changed, 45 insertions(+) diff --git a/app/widget/timelinewidget/timelinewidget.cpp b/app/widget/timelinewidget/timelinewidget.cpp index 47c704a76..d46a35e9c 100644 --- a/app/widget/timelinewidget/timelinewidget.cpp +++ b/app/widget/timelinewidget/timelinewidget.cpp @@ -157,6 +157,11 @@ TimelineWidget::TimelineWidget(QWidget *parent) : connect(view, &TimelineView::DragLeft, this, &TimelineWidget::ViewDragLeft); connect(view, &TimelineView::DragDropped, this, &TimelineWidget::ViewDragDropped); + TrackView *tv = tview->track_view(); + connect(tv, &TrackView::DragEntered, this, &TimelineWidget::ViewDragEntered); + connect(tv, &TrackView::DragLeft, this, &TimelineWidget::ViewDragLeft); + connect(tv, &TrackView::DragDropped, this, &TimelineWidget::ViewDragDropped); + connect(tview->splitter(), &QSplitter::splitterMoved, this, &TimelineWidget::UpdateHorizontalSplitters); // Connect each view's scroll to each other diff --git a/app/widget/timelinewidget/trackview/trackview.cpp b/app/widget/timelinewidget/trackview/trackview.cpp index 562c68d55..09d2e0fbc 100644 --- a/app/widget/timelinewidget/trackview/trackview.cpp +++ b/app/widget/timelinewidget/trackview/trackview.cpp @@ -124,6 +124,9 @@ void TrackView::InsertTrack(Track *track) TrackViewItem *tvi = new TrackViewItem(track); connect(tvi, &TrackViewItem::AboutToDeleteTrack, this, &TrackView::AboutToDeleteTrack); + connect(tvi, &TrackViewItem::DragEntered, this, &TrackView::DragEntered); + connect(tvi, &TrackViewItem::DragLeft, this, &TrackView::DragLeft); + connect(tvi, &TrackViewItem::DragDropped, this, &TrackView::DragDropped); splitter_->Insert(track->Index(), track->GetTrackHeightInPixels(), diff --git a/app/widget/timelinewidget/trackview/trackview.h b/app/widget/timelinewidget/trackview/trackview.h index 1498a526b..9d56dabe0 100644 --- a/app/widget/timelinewidget/trackview/trackview.h +++ b/app/widget/timelinewidget/trackview/trackview.h @@ -43,6 +43,10 @@ public: signals: void AboutToDeleteTrack(Track *track); + void DragEntered(TimelineViewMouseEvent* event); + void DragLeft(QDragLeaveEvent* event); + void DragDropped(TimelineViewMouseEvent* event); + protected: virtual void resizeEvent(QResizeEvent *e) override; diff --git a/app/widget/timelinewidget/trackview/trackviewitem.cpp b/app/widget/timelinewidget/trackview/trackviewitem.cpp index 6a5ba698e..f3c254178 100644 --- a/app/widget/timelinewidget/trackview/trackviewitem.cpp +++ b/app/widget/timelinewidget/trackview/trackviewitem.cpp @@ -76,11 +76,33 @@ TrackViewItem::TrackViewItem(Track* track, QWidget *parent) : setMinimumHeight(mute_button_->height()); setContextMenuPolicy(Qt::CustomContextMenu); + setAcceptDrops(true); connect(track, &Track::MutedChanged, mute_button_, &QPushButton::setChecked); connect(this, &QWidget::customContextMenuRequested, this, &TrackViewItem::ShowContextMenu); } +void TrackViewItem::dragEnterEvent(QDragEnterEvent *event) +{ + TimelineViewMouseEvent e(0, 1, 1, track_->ToReference(), Qt::NoButton, event->keyboardModifiers()); + e.SetMimeData(event->mimeData()); + e.SetEvent(event); + emit DragEntered(&e); +} + +void TrackViewItem::dragLeaveEvent(QDragLeaveEvent *event) +{ + emit DragLeft(event); +} + +void TrackViewItem::dropEvent(QDropEvent *event) +{ + TimelineViewMouseEvent e(0, 1, 1, track_->ToReference(), Qt::NoButton, event->keyboardModifiers()); + e.SetMimeData(event->mimeData()); + e.SetEvent(event); + emit DragDropped(&e); +} + QPushButton *TrackViewItem::CreateMSLButton(const QColor& checked_color) const { QPushButton* button = new QPushButton(); diff --git a/app/widget/timelinewidget/trackview/trackviewitem.h b/app/widget/timelinewidget/trackview/trackviewitem.h index 7ec2eb750..b4010cab0 100644 --- a/app/widget/timelinewidget/trackview/trackviewitem.h +++ b/app/widget/timelinewidget/trackview/trackviewitem.h @@ -28,6 +28,7 @@ #include "node/output/track/track.h" #include "widget/clickablelabel/clickablelabel.h" #include "widget/focusablelineedit/focusablelineedit.h" +#include "widget/timelinewidget/view/timelineviewmouseevent.h" namespace olive { @@ -41,6 +42,15 @@ public: signals: void AboutToDeleteTrack(Track *track); + void DragEntered(TimelineViewMouseEvent* event); + void DragLeft(QDragLeaveEvent* event); + void DragDropped(TimelineViewMouseEvent* event); + +protected: + virtual void dragEnterEvent(QDragEnterEvent *event) override; + virtual void dragLeaveEvent(QDragLeaveEvent *event) override; + virtual void dropEvent(QDropEvent *event) override; + private: QPushButton* CreateMSLButton(const QColor &checked_color) const; diff --git a/app/widget/timelinewidget/view/timelineviewmouseevent.h b/app/widget/timelinewidget/view/timelineviewmouseevent.h index 84cb3c0ba..babce9881 100644 --- a/app/widget/timelinewidget/view/timelineviewmouseevent.h +++ b/app/widget/timelinewidget/view/timelineviewmouseevent.h @@ -21,6 +21,7 @@ #ifndef TIMELINEVIEWMOUSEEVENT_H #define TIMELINEVIEWMOUSEEVENT_H +#include #include #include #include