Allow markers to be selected
This commit is contained in:
@@ -211,4 +211,9 @@ void TimeBasedPanel::GoToOut()
|
||||
GetTimeBasedWidget()->GoToOut();
|
||||
}
|
||||
|
||||
void TimeBasedPanel::DeleteSelected()
|
||||
{
|
||||
GetTimeBasedWidget()->DeleteSelected();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -98,6 +98,8 @@ public:
|
||||
|
||||
virtual void GoToOut() override;
|
||||
|
||||
virtual void DeleteSelected() override;
|
||||
|
||||
public slots:
|
||||
void SetTimebase(const rational& timebase);
|
||||
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
|
||||
#include "timeline.h"
|
||||
|
||||
#include <QApplication>
|
||||
|
||||
#include "panel/panelmanager.h"
|
||||
#include "panel/project/footagemanagementpanel.h"
|
||||
|
||||
|
||||
@@ -31,7 +31,8 @@ namespace olive {
|
||||
|
||||
Marker::Marker(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
marker_color_(7) //green FIXME: add default color to config
|
||||
marker_color_(7), //green FIXME: add default color to config
|
||||
active_(false)
|
||||
{
|
||||
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
setMinimumSize(20, 20);
|
||||
@@ -40,6 +41,16 @@ Marker::Marker(QWidget *parent) :
|
||||
connect(this, &Marker::customContextMenuRequested, this, &Marker::ShowContextMenu);
|
||||
}
|
||||
|
||||
void Marker::set_active(bool active)
|
||||
{
|
||||
active_ = active;
|
||||
}
|
||||
|
||||
bool Marker::active()
|
||||
{
|
||||
return active_;
|
||||
}
|
||||
|
||||
void Marker::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
QFontMetrics fm = fontMetrics();
|
||||
@@ -54,7 +65,11 @@ void Marker::paintEvent(QPaintEvent *event)
|
||||
int x = half_width; //3
|
||||
|
||||
QPainter p(this);
|
||||
p.setPen(Qt::black);
|
||||
if (active_) {
|
||||
p.setPen(Qt::white);
|
||||
} else {
|
||||
p.setPen(Qt::black);
|
||||
}
|
||||
p.setBrush(ColorCoding::GetColor(marker_color_).toQColor());
|
||||
|
||||
p.setRenderHint(QPainter::Antialiasing);
|
||||
@@ -73,6 +88,15 @@ void Marker::paintEvent(QPaintEvent *event)
|
||||
p.drawPolygon(points, 6);
|
||||
}
|
||||
|
||||
void Marker::mousePressEvent(QMouseEvent* e)
|
||||
{
|
||||
if (e->button() == Qt::LeftButton) {
|
||||
active_ = !active_;
|
||||
update();
|
||||
emit markerSelected(this);
|
||||
}
|
||||
}
|
||||
|
||||
void Marker::ShowContextMenu() {
|
||||
Menu m(this);
|
||||
|
||||
@@ -81,6 +105,9 @@ void Marker::ShowContextMenu() {
|
||||
connect(&color_coding_menu, &ColorLabelMenu::ColorSelected, this, &Marker::ColorChanged);
|
||||
m.addMenu(&color_coding_menu);
|
||||
|
||||
m.addSeparator();
|
||||
MenuShared::instance()->AddItemsForEditMenu(&m, false);
|
||||
|
||||
m.exec(QCursor::pos());
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#define MARKER_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QMouseEvent>
|
||||
#include <QPushButton>
|
||||
|
||||
#include "common/define.h"
|
||||
@@ -34,11 +35,15 @@ class Marker : public QWidget {
|
||||
public:
|
||||
Marker(QWidget* parent = nullptr);
|
||||
|
||||
void set_active(bool active);
|
||||
bool active();
|
||||
|
||||
public slots:
|
||||
void SetColor(int c);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent* event) override;
|
||||
virtual void mousePressEvent(QMouseEvent* event) override;
|
||||
//virtual void mouseReleaseEvent(QMouseEvent* event) override;
|
||||
//virtual void mouseDoubleClickEvent(QMouseEvent* event) override;
|
||||
|
||||
@@ -46,11 +51,14 @@ class Marker : public QWidget {
|
||||
//void MouseClicked();
|
||||
//void MouseDoubleClicked();
|
||||
void ColorChanged(int c);
|
||||
void markerSelected(Marker* marker);
|
||||
|
||||
private:
|
||||
|
||||
int marker_color_;
|
||||
|
||||
bool active_;
|
||||
|
||||
private slots:
|
||||
void ShowContextMenu();
|
||||
};
|
||||
|
||||
@@ -658,6 +658,13 @@ void TimeBasedWidget::GoToOut()
|
||||
}
|
||||
}
|
||||
|
||||
void TimeBasedWidget::DeleteSelected()
|
||||
{
|
||||
if (ruler_->underMouse()) {
|
||||
ruler_->DeleteSelected();
|
||||
}
|
||||
}
|
||||
|
||||
TimeBasedWidget::MarkerAddCommand::MarkerAddCommand(Project *project, TimelineMarkerList *marker_list, const TimeRange &range, const QString &name) :
|
||||
project_(project),
|
||||
marker_list_(marker_list),
|
||||
|
||||
@@ -91,6 +91,8 @@ public slots:
|
||||
|
||||
void GoToOut();
|
||||
|
||||
void DeleteSelected();
|
||||
|
||||
protected slots:
|
||||
void SetTimeAndSignal(const rational& t);
|
||||
|
||||
|
||||
@@ -150,6 +150,18 @@ void SeekableWidget::SetScroll(int s)
|
||||
update();
|
||||
}
|
||||
|
||||
QMap<TimelineMarker *, Marker *> SeekableWidget::GetActiveMarkers() {
|
||||
QMap<TimelineMarker *, Marker *> active_markers;
|
||||
|
||||
foreach(TimelineMarker* marker, marker_map_.keys()) {
|
||||
if (marker_map_.value(marker)->active()) {
|
||||
active_markers.insert(marker, marker_map_.value(marker));
|
||||
}
|
||||
}
|
||||
|
||||
return active_markers;
|
||||
}
|
||||
|
||||
void SeekableWidget::addMarker(TimelineMarker* marker)
|
||||
{
|
||||
if (!marker_map_.contains(marker)) {
|
||||
@@ -158,6 +170,7 @@ void SeekableWidget::addMarker(TimelineMarker* marker)
|
||||
|
||||
connect(marker_widget, &Marker::ColorChanged, marker, &TimelineMarker::set_color);
|
||||
connect(marker, &TimelineMarker::ColorChanged, marker_widget, &Marker::SetColor);
|
||||
connect(marker_widget, &Marker::markerSelected, this, &SeekableWidget::markerSelected);
|
||||
|
||||
marker_widget->move(TimeToScreen(marker->time().in()), 20);
|
||||
marker_widget->SetColor(marker->color());
|
||||
@@ -173,6 +186,16 @@ void SeekableWidget::updateMarkerPositions()
|
||||
}
|
||||
}
|
||||
|
||||
void SeekableWidget::markerSelected(Marker* marker)
|
||||
{
|
||||
foreach(Marker * marker_widget, marker_map_.values()) {
|
||||
if (marker_widget != marker) {
|
||||
marker_widget->set_active(false);
|
||||
marker_widget->update();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int SeekableWidget::TimeToScreen(const rational &time) const
|
||||
{
|
||||
return qFloor(TimeToScene(time)) - scroll_;
|
||||
|
||||
@@ -53,6 +53,10 @@ public:
|
||||
return dragging_;
|
||||
}
|
||||
|
||||
virtual void DeleteSelected(){};
|
||||
|
||||
QMap<TimelineMarker*, Marker*> GetActiveMarkers();
|
||||
|
||||
public slots:
|
||||
void SetTime(const rational &r);
|
||||
|
||||
@@ -62,6 +66,8 @@ public slots:
|
||||
|
||||
void updateMarkerPositions();
|
||||
|
||||
void markerSelected(Marker* marker);
|
||||
|
||||
protected:
|
||||
void SeekToScreenPoint(int screen);
|
||||
|
||||
|
||||
@@ -83,6 +83,14 @@ void TimeRuler::SetPlaybackCache(PlaybackCache *cache)
|
||||
update();
|
||||
}
|
||||
|
||||
void TimeRuler::DeleteSelected()
|
||||
{
|
||||
foreach(TimelineMarker* marker, GetActiveMarkers().keys()) {
|
||||
timeline_points()->markers()->RemoveMarker(marker);
|
||||
GetActiveMarkers().value(marker)->deleteLater();
|
||||
}
|
||||
}
|
||||
|
||||
void TimeRuler::paintEvent(QPaintEvent *)
|
||||
{
|
||||
// Nothing to paint if the timebase is invalid
|
||||
|
||||
@@ -41,6 +41,8 @@ public:
|
||||
|
||||
void SetPlaybackCache(PlaybackCache* cache);
|
||||
|
||||
virtual void DeleteSelected() override;
|
||||
|
||||
protected:
|
||||
virtual void paintEvent(QPaintEvent* e) override;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user