timeline: allow dropping on trackviewitem to overwrite at 0

Fixes #1928
This commit is contained in:
itsmattkc
2022-05-13 09:52:28 -07:00
parent 07f92911cd
commit 912dcfdb3b
6 changed files with 45 additions and 0 deletions
@@ -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
@@ -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(),
@@ -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;
@@ -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();
@@ -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;
@@ -21,6 +21,7 @@
#ifndef TIMELINEVIEWMOUSEEVENT_H
#define TIMELINEVIEWMOUSEEVENT_H
#include <QEvent>
#include <QMimeData>
#include <QPointF>
#include <QPoint>