From 1a0464179df7dffcc5c37403132cbe2a2f81efe7 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Fri, 11 Jan 2019 01:33:02 +1100 Subject: [PATCH] made timeline in/out toggleable --- dialogs/exportdialog.cpp | 4 ++-- io/loadthread.cpp | 2 ++ mainwindow.cpp | 11 ++++++++++- mainwindow.h | 1 + panels/project.cpp | 3 ++- panels/timeline.cpp | 2 +- panels/viewer.cpp | 17 ++++++++++++----- panels/viewer.h | 1 + project/sequence.cpp | 1 + project/sequence.h | 1 + project/undo.cpp | 3 +++ project/undo.h | 2 ++ ui/timelineheader.cpp | 5 ++--- 13 files changed, 40 insertions(+), 13 deletions(-) diff --git a/dialogs/exportdialog.cpp b/dialogs/exportdialog.cpp index 7f4c433e0..c7cce721a 100644 --- a/dialogs/exportdialog.cpp +++ b/dialogs/exportdialog.cpp @@ -62,8 +62,8 @@ ExportDialog::ExportDialog(QWidget *parent) : rangeCombobox->setCurrentIndex(0); if (sequence->using_workarea) { - rangeCombobox->setEnabled(sequence->using_workarea); - rangeCombobox->setCurrentIndex(1); + rangeCombobox->setEnabled(true); + if (sequence->enable_workarea) rangeCombobox->setCurrentIndex(1); } format_strings.resize(FORMAT_SIZE); diff --git a/io/loadthread.cpp b/io/loadthread.cpp index 3ae94d103..9e6778136 100644 --- a/io/loadthread.cpp +++ b/io/loadthread.cpp @@ -273,6 +273,8 @@ bool LoadThread::load_worker(QFile& f, QXmlStreamReader& stream, int type) { open_seq = s; } else if (attr.name() == "workarea") { s->using_workarea = (attr.value() == "1"); + } else if (attr.name() == "workareaEnabled") { + s->enable_workarea = (attr.value() == "1"); } else if (attr.name() == "workareaIn") { s->workarea_in = attr.value().toLong(); } else if (attr.name() == "workareaOut") { diff --git a/mainwindow.cpp b/mainwindow.cpp index 473c7f447..e62e7bf80 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -245,6 +245,7 @@ void MainWindow::make_new_menu(QMenu *parent) { void MainWindow::make_inout_menu(QMenu *parent) { parent->addAction("Set In Point", this, SLOT(set_in_point()), QKeySequence("I")); parent->addAction("Set Out Point", this, SLOT(set_out_point()), QKeySequence("O")); + parent->addAction("Enable/Disable In/Out Point", this, SLOT(enable_inout())); parent->addSeparator(); parent->addAction("Reset In Point", this, SLOT(clear_in())); parent->addAction("Reset Out Point", this, SLOT(clear_out())); @@ -1258,7 +1259,15 @@ void MainWindow::ripple_delete_inout() { if (panel_timeline->focused()) { panel_timeline->delete_in_out(true); - } + } +} + +void MainWindow::enable_inout() { + if (panel_timeline->focused() || panel_sequence_viewer->is_focused()) { + panel_sequence_viewer->toggle_enable_inout(); + } else if (panel_footage_viewer->is_focused()) { + panel_footage_viewer->toggle_enable_inout(); + } } void MainWindow::set_tsa_default() { diff --git a/mainwindow.h b/mainwindow.h index ed2748080..ef8d2930a 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -103,6 +103,7 @@ private slots: void clear_inout(); void delete_inout(); void ripple_delete_inout(); + void enable_inout(); // title safe area functions void set_tsa_disable(); diff --git a/panels/project.cpp b/panels/project.cpp index faf05daf6..4ecffe3e8 100644 --- a/panels/project.cpp +++ b/panels/project.cpp @@ -944,7 +944,8 @@ void Project::save_folder(QXmlStreamWriter& stream, int type, bool set_ids_only, if (s == sequence) { stream.writeAttribute("open", "1"); } - stream.writeAttribute("workarea", QString::number(s->using_workarea)); + stream.writeAttribute("workarea", QString::number(s->using_workarea)); + stream.writeAttribute("workareaEnabled", QString::number(s->enable_workarea)); stream.writeAttribute("workareaIn", QString::number(s->workarea_in)); stream.writeAttribute("workareaOut", QString::number(s->workarea_out)); diff --git a/panels/timeline.cpp b/panels/timeline.cpp index b450f7e61..2b8a0f4da 100644 --- a/panels/timeline.cpp +++ b/panels/timeline.cpp @@ -240,7 +240,7 @@ void Timeline::create_ghosts_from_media(Sequence* seq, long entry_point, QVector case MEDIA_TYPE_SEQUENCE: g.out = entry_point + sequence_length - default_clip_in; - if (s->using_workarea) { + if (s->using_workarea && s->enable_workarea) { g.out -= (sequence_length - default_clip_out); } diff --git a/panels/viewer.cpp b/panels/viewer.cpp index a77a2d423..faa33f924 100644 --- a/panels/viewer.cpp +++ b/panels/viewer.cpp @@ -257,7 +257,7 @@ void Viewer::go_to_end() { void Viewer::go_to_in() { if (seq != NULL) { - if (seq->using_workarea) { + if (seq->using_workarea && seq->enable_workarea) { seek(seq->workarea_in); } else { go_to_start(); @@ -275,7 +275,7 @@ void Viewer::next_frame() { void Viewer::go_to_out() { if (seq != NULL) { - if (seq->using_workarea) { + if (seq->using_workarea && seq->enable_workarea) { seek(seq->workarea_out); } else { go_to_end(); @@ -449,7 +449,14 @@ void Viewer::clear_inout_point() { if (seq->using_workarea) { undo_stack.push(new SetTimelineInOutCommand(seq, false, 0, 0)); update_parents(); - } + } +} + +void Viewer::toggle_enable_inout() { + if (seq != NULL && seq->using_workarea) { + undo_stack.push(new SetBool(&seq->enable_workarea, !seq->enable_workarea)); + update_parents(); + } } void Viewer::set_in_point() { @@ -484,13 +491,13 @@ void Viewer::set_sb_max() { } long Viewer::get_seq_in() { - return (seq->using_workarea) + return (seq->using_workarea && seq->enable_workarea) ? seq->workarea_in : 0; } long Viewer::get_seq_out() { - return (seq->using_workarea && previous_playhead < seq->workarea_out) + return (seq->using_workarea && seq->enable_workarea && previous_playhead < seq->workarea_out) ? seq->workarea_out : seq->getEndFrame(); } diff --git a/panels/viewer.h b/panels/viewer.h index 03376a3f9..af81f1bf3 100644 --- a/panels/viewer.h +++ b/panels/viewer.h @@ -40,6 +40,7 @@ public: void clear_in(); void clear_out(); void clear_inout_point(); + void toggle_enable_inout(); void set_in_point(); void set_out_point(); void set_zoom(bool in); diff --git a/project/sequence.cpp b/project/sequence.cpp index 4450df41f..1a902966d 100644 --- a/project/sequence.cpp +++ b/project/sequence.cpp @@ -8,6 +8,7 @@ Sequence::Sequence() : playhead(0), using_workarea(false), + enable_workarea(true), workarea_in(0), workarea_out(0), wrapper_sequence(false) diff --git a/project/sequence.h b/project/sequence.h index 9ab5c03d9..d3e02504f 100644 --- a/project/sequence.h +++ b/project/sequence.h @@ -28,6 +28,7 @@ struct Sequence { long playhead; bool using_workarea; + bool enable_workarea; long workarea_in; long workarea_out; diff --git a/project/undo.cpp b/project/undo.cpp index be8932c47..d8660a7b5 100644 --- a/project/undo.cpp +++ b/project/undo.cpp @@ -209,6 +209,7 @@ SetTimelineInOutCommand::SetTimelineInOutCommand(Sequence *s, bool enabled, long void SetTimelineInOutCommand::undo() { seq->using_workarea = old_enabled; + seq->enable_workarea = old_workarea_enabled; seq->workarea_in = old_in; seq->workarea_out = old_out; @@ -225,9 +226,11 @@ void SetTimelineInOutCommand::undo() { void SetTimelineInOutCommand::redo() { old_enabled = seq->using_workarea; + old_workarea_enabled = seq->enable_workarea; old_in = seq->workarea_in; old_out = seq->workarea_out; + if (!seq->using_workarea) seq->enable_workarea = true; seq->using_workarea = new_enabled; seq->workarea_in = new_in; seq->workarea_out = new_out; diff --git a/project/undo.h b/project/undo.h index ebc7348de..aaae9a016 100644 --- a/project/undo.h +++ b/project/undo.h @@ -174,6 +174,8 @@ public: private: Sequence* seq; + bool old_workarea_enabled; + bool old_enabled; long old_in; long old_out; diff --git a/ui/timelineheader.cpp b/ui/timelineheader.cpp index 7ea79ac2c..5e7cf4b6a 100644 --- a/ui/timelineheader.cpp +++ b/ui/timelineheader.cpp @@ -321,8 +321,7 @@ void TimelineHeader::paintEvent(QPaintEvent*) { while (true) { long frame = qRound(interval*i); - int lineX = qRound(frame*zoom) - scroll; - int next_lineX = qRound(qRound(interval*(i+1))*zoom) - scroll; + int lineX = qRound(frame*zoom) - scroll; if (lineX > width()) break; @@ -367,7 +366,7 @@ void TimelineHeader::paintEvent(QPaintEvent*) { if (viewer->seq->using_workarea) { in_x = getHeaderScreenPointFromFrame((resizing_workarea ? temp_workarea_in : viewer->seq->workarea_in)); int out_x = getHeaderScreenPointFromFrame((resizing_workarea ? temp_workarea_out : viewer->seq->workarea_out)); - p.fillRect(QRect(in_x, 0, out_x-in_x, height()), QColor(0, 192, 255, 128)); + p.fillRect(QRect(in_x, 0, out_x-in_x, height()), viewer->seq->enable_workarea ? QColor(0, 192, 255, 128) : QColor(255, 255, 255, 64)); p.setPen(Qt::white); p.drawLine(in_x, 0, in_x, height()); p.drawLine(out_x, 0, out_x, height());