From 713037169075a70d9423ddcc7754c7d1cd9d2184 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Mon, 16 May 2022 08:37:14 -0700 Subject: [PATCH] timeline: improved subtitle import behavior --- app/widget/timelinewidget/timelinewidget.cpp | 5 ---- app/widget/timelinewidget/timelinewidget.h | 5 ++-- app/widget/timelinewidget/tool/import.cpp | 6 ++++- .../timelinewidget/trackview/trackview.cpp | 3 --- .../timelinewidget/trackview/trackview.h | 4 ---- .../trackview/trackviewitem.cpp | 23 ------------------- .../timelinewidget/trackview/trackviewitem.h | 9 -------- 7 files changed, 8 insertions(+), 47 deletions(-) diff --git a/app/widget/timelinewidget/timelinewidget.cpp b/app/widget/timelinewidget/timelinewidget.cpp index d46a35e9c..47c704a76 100644 --- a/app/widget/timelinewidget/timelinewidget.cpp +++ b/app/widget/timelinewidget/timelinewidget.cpp @@ -157,11 +157,6 @@ 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/timelinewidget.h b/app/widget/timelinewidget/timelinewidget.h index 84d10e7fd..e2f9d6b35 100644 --- a/app/widget/timelinewidget/timelinewidget.h +++ b/app/widget/timelinewidget/timelinewidget.h @@ -109,8 +109,6 @@ public: void AddTentativeSubtitleTrack(); - void ClearTentativeSubtitleTrack(); - /** * @brief Timelines should always be connected to sequences */ @@ -271,6 +269,9 @@ public: }; +public slots: + void ClearTentativeSubtitleTrack(); + signals: void BlockSelectionChanged(const QVector& selected_blocks); diff --git a/app/widget/timelinewidget/tool/import.cpp b/app/widget/timelinewidget/tool/import.cpp index a9198ec38..be98ab2ba 100644 --- a/app/widget/timelinewidget/tool/import.cpp +++ b/app/widget/timelinewidget/tool/import.cpp @@ -97,6 +97,11 @@ void ImportTool::DragEnter(TimelineViewMouseEvent *event) PrepGhosts(ghost_offset_, drag_start_.GetTrack().index()); if (parent()->HasGhosts() || !parent()->GetConnectedNode()) { + // We only clear the tentative track if the mimedata is about to be destroyed (i.e. the drag + // is cancelled). If we do this in DragLeave, it leads to undesirable behavior if the cursor + // is going between views (subtitle track rapidly appearing and disappearing) + QObject::connect(event->GetMimeData(), &QObject::destroyed, parent(), &TimelineWidget::ClearTentativeSubtitleTrack); + event->accept(); } else { event->ignore(); @@ -167,7 +172,6 @@ void ImportTool::DragLeave(QDragLeaveEvent* event) { if (!dragged_footage_.isEmpty()) { parent()->ClearGhosts(); - parent()->ClearTentativeSubtitleTrack(); dragged_footage_.clear(); event->accept(); diff --git a/app/widget/timelinewidget/trackview/trackview.cpp b/app/widget/timelinewidget/trackview/trackview.cpp index 09d2e0fbc..562c68d55 100644 --- a/app/widget/timelinewidget/trackview/trackview.cpp +++ b/app/widget/timelinewidget/trackview/trackview.cpp @@ -124,9 +124,6 @@ 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 9d56dabe0..1498a526b 100644 --- a/app/widget/timelinewidget/trackview/trackview.h +++ b/app/widget/timelinewidget/trackview/trackview.h @@ -43,10 +43,6 @@ 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 5eafc077d..6a5ba698e 100644 --- a/app/widget/timelinewidget/trackview/trackviewitem.cpp +++ b/app/widget/timelinewidget/trackview/trackviewitem.cpp @@ -76,34 +76,11 @@ 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); - e.SetBypassImportBuffer(true); - 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 b4010cab0..fac93d4d7 100644 --- a/app/widget/timelinewidget/trackview/trackviewitem.h +++ b/app/widget/timelinewidget/trackview/trackviewitem.h @@ -42,15 +42,6 @@ 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;