Make markers movable

This commit is contained in:
Thomas Wilshaw
2021-10-22 22:15:54 +01:00
parent 8432b10c84
commit 1a7f821d82
3 changed files with 51 additions and 2 deletions
+37 -1
View File
@@ -35,7 +35,8 @@ namespace olive {
Marker::Marker(QWidget *parent) :
QWidget(parent),
active_(false)
active_(false),
dragging_(false)
{
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
resize(7, 14);
@@ -129,6 +130,36 @@ void Marker::mousePressEvent(QMouseEvent* e)
update();
}
click_position_ = e->globalPos();
marker_start_x_ = x();
}
void Marker::mouseMoveEvent(QMouseEvent* e)
{
if (active_) {
dragging_ = true;
QPoint old_pos = mapToGlobal(pos());
int new_pos = marker_start_x_ + e->globalPos().x() - click_position_.x();
if (new_pos > -3 && new_pos < static_cast<SeekableWidget *>(parent())->width() - 3) {
this->move(new_pos-2, this->pos().y());
repaint();
}
}
}
void Marker::mouseReleaseEvent(QMouseEvent* e)
{
if (dragging_) {
rational time = static_cast<SeekableWidget *>(parent())->SceneToTime(this->x()+4);
time = time < 0.0 ? 0.0 : time;
emit TimeChanged(TimeRange(time, time));
dragging_ = false;
}
}
void Marker::ShowContextMenu()
@@ -181,4 +212,9 @@ void Marker::SetName(QString s)
update();
}
void Marker::SetTime(TimeRange time)
{
move(static_cast<SeekableWidget *>(parent())->TimeToScene(time.in())-2, y());
}
} // namespace olive
+11 -1
View File
@@ -26,6 +26,7 @@
#include <QPushButton>
#include "common/define.h"
#include "common/timerange.h"
#include "widget/colorlabelmenu/colorlabelmenu.h"
namespace olive {
@@ -43,11 +44,13 @@ class Marker : public QWidget {
void SetColor(int c);
void SetActive(bool active);
void SetName(QString s);
void SetTime(TimeRange t);
protected:
void paintEvent(QPaintEvent* event) override;
virtual void mousePressEvent(QMouseEvent* event) override;
//virtual void mouseReleaseEvent(QMouseEvent* event) override;
virtual void mouseMoveEvent(QMouseEvent* event) override;
virtual void mouseReleaseEvent(QMouseEvent* event) override;
//virtual void mouseDoubleClickEvent(QMouseEvent* event) override;
signals:
@@ -57,6 +60,7 @@ class Marker : public QWidget {
void markerSelected(Marker* marker);
void ActiveChanged(bool active);
void NameChanged(QString name);
void TimeChanged(TimeRange time);
private:
@@ -66,6 +70,12 @@ class Marker : public QWidget {
QString name_;
QPointF click_position_;
int marker_start_x_;
bool dragging_;
private slots:
void ShowContextMenu();
};
+3
View File
@@ -213,6 +213,9 @@ void SeekableWidget::addMarker(TimelineMarker* marker)
connect(marker_widget, &Marker::NameChanged, marker, &TimelineMarker::set_name);
connect(marker, &TimelineMarker::NameChanged, marker_widget, &Marker::SetName);
connect(marker_widget, &Marker::TimeChanged, marker, &TimelineMarker::set_time);
connect(marker, &TimelineMarker::TimeChanged, marker_widget, &Marker::SetTime);
marker_widget->move(TimeToScreen(marker->time().in())-2, text_height_);
marker_widget->SetColor(marker->color());
marker_widget->SetName(marker->name());