From 7f08925385fd963bb3da6ea7f226b026578c3a75 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sun, 9 Dec 2018 01:25:22 +1100 Subject: [PATCH] began work on scrollable headers on viewer panels --- mainwindow.cpp | 14 +++++++++++--- panels/viewer.cpp | 21 ++++++++++++++++++--- panels/viewer.h | 3 +++ panels/viewer.ui | 7 +++++++ ui/timelineheader.cpp | 6 +++++- ui/timelineheader.h | 1 + 6 files changed, 45 insertions(+), 7 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index b2a3005df..2354caf01 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -311,7 +311,11 @@ void MainWindow::on_actionZoom_In_triggered() panel_timeline->set_zoom(true); } else if (panel_effect_controls->keyframe_focus()) { panel_effect_controls->set_zoom(true); - } + } else if (panel_footage_viewer->is_focused()) { + panel_footage_viewer->set_zoom(true); + } else if (panel_sequence_viewer->is_focused()) { + panel_sequence_viewer->set_zoom(true); + } } void MainWindow::on_actionZoom_out_triggered() @@ -320,7 +324,11 @@ void MainWindow::on_actionZoom_out_triggered() panel_timeline->set_zoom(false); } else if (panel_effect_controls->keyframe_focus()) { panel_effect_controls->set_zoom(false); - } + } else if (panel_footage_viewer->is_focused()) { + panel_footage_viewer->set_zoom(false); + } else if (panel_sequence_viewer->is_focused()) { + panel_sequence_viewer->set_zoom(false); + } } void MainWindow::on_actionExport_triggered() @@ -582,7 +590,7 @@ void MainWindow::on_actionEdit_Tool_triggered() void MainWindow::on_actionToggle_Snapping_triggered() { - if (panel_timeline->focused()) panel_timeline->ui->snappingButton->click(); + if (panel_timeline->focused() || panel_effect_controls->keyframe_focus()) panel_timeline->ui->snappingButton->click(); } void MainWindow::on_actionPointer_Tool_triggered() diff --git a/panels/viewer.cpp b/panels/viewer.cpp index 9e2fccde9..5b13fe699 100644 --- a/panels/viewer.cpp +++ b/panels/viewer.cpp @@ -37,7 +37,8 @@ Viewer::Viewer(QWidget *parent) : ui(new Ui::Viewer), created_sequence(false), cue_recording_internal(false), - panel_name("Viewer: ") + panel_name("Viewer: "), + minimum_zoom(1.0) { ui->setupUi(this); ui->headers->viewer = this; @@ -59,6 +60,7 @@ Viewer::Viewer(QWidget *parent) : connect(&playback_updater, SIGNAL(timeout()), this, SLOT(timer_update())); connect(&recording_flasher, SIGNAL(timeout()), this, SLOT(recording_flasher_update())); + connect(ui->horizontalScrollBar, SIGNAL(valueChanged(int)), ui->headers, SLOT(set_scroll(int))); update_playhead_timecode(0); update_end_timecode(); @@ -380,7 +382,12 @@ void Viewer::update_end_timecode() { void Viewer::update_header_zoom() { if (seq != NULL) { long sequenceEndFrame = seq->getEndFrame(); - ui->headers->update_zoom((sequenceEndFrame > 0) ? ((double) ui->headers->width() / (double) sequenceEndFrame) : 1); + if (cached_end_frame != sequenceEndFrame) { + minimum_zoom = (sequenceEndFrame > 0) ? ((double) ui->headers->width() / (double) sequenceEndFrame) : 1; + ui->headers->update_zoom(qMax(ui->headers->get_zoom(), minimum_zoom)); + } else { + ui->headers->update(); + } } } @@ -411,7 +418,15 @@ void Viewer::set_in_point() { } void Viewer::set_out_point() { - ui->headers->set_out_point(seq->playhead); + ui->headers->set_out_point(seq->playhead); +} + +void Viewer::set_zoom(bool in) { + if (in) { + ui->headers->update_zoom(ui->headers->get_zoom()*2); + } else { + ui->headers->update_zoom(qMax(minimum_zoom, ui->headers->get_zoom()*0.5)); + } } void Viewer::set_media(int type, void* media) { diff --git a/panels/viewer.h b/panels/viewer.h index 547efdf7b..a46c24c66 100644 --- a/panels/viewer.h +++ b/panels/viewer.h @@ -36,6 +36,7 @@ public: void clear_inout_point(); void set_in_point(); void set_out_point(); + void set_zoom(bool in); // playback functions void go_to_start(); @@ -86,7 +87,9 @@ private: void set_sequence(bool main, Sequence* s); bool main_sequence; bool created_sequence; + long cached_end_frame; QString panel_name; + double minimum_zoom; bool cue_recording_internal; QTimer recording_flasher; diff --git a/panels/viewer.ui b/panels/viewer.ui index 111812803..648765042 100644 --- a/panels/viewer.ui +++ b/panels/viewer.ui @@ -64,6 +64,13 @@ + + + + Qt::Horizontal + + + diff --git a/ui/timelineheader.cpp b/ui/timelineheader.cpp index 00094fac2..c67c8d39f 100644 --- a/ui/timelineheader.cpp +++ b/ui/timelineheader.cpp @@ -255,7 +255,11 @@ void TimelineHeader::update_parents() { void TimelineHeader::update_zoom(double z) { zoom = z; - update(); + update(); +} + +double TimelineHeader::get_zoom() { + return zoom; } void TimelineHeader::delete_markers() { diff --git a/ui/timelineheader.h b/ui/timelineheader.h index 68cb38573..979b3fd38 100644 --- a/ui/timelineheader.h +++ b/ui/timelineheader.h @@ -20,6 +20,7 @@ public: void show_text(bool enable); void update_zoom(double z); + double get_zoom(); void delete_markers(); public slots: