further progress on footage viewer
This commit is contained in:
+28
-27
@@ -55,11 +55,13 @@ void MainWindow::setup_layout() {
|
||||
panel_timeline->show();
|
||||
|
||||
addDockWidget(Qt::TopDockWidgetArea, panel_project);
|
||||
addDockWidget(Qt::TopDockWidgetArea, panel_effect_controls);
|
||||
tabifyDockWidget(panel_effect_controls, panel_footage_viewer);
|
||||
addDockWidget(Qt::TopDockWidgetArea, panel_footage_viewer);
|
||||
tabifyDockWidget(panel_footage_viewer, panel_effect_controls);
|
||||
panel_footage_viewer->raise();
|
||||
addDockWidget(Qt::TopDockWidgetArea, panel_sequence_viewer);
|
||||
addDockWidget(Qt::BottomDockWidgetArea, panel_timeline);
|
||||
|
||||
// workaround for older versions of Qt
|
||||
resizeDocks({panel_project}, {40}, Qt::Horizontal);
|
||||
}
|
||||
|
||||
@@ -101,10 +103,10 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
setDockNestingEnabled(true);
|
||||
|
||||
// TODO maybe replace these with non-pointers later on?
|
||||
panel_project = new Project(this);
|
||||
panel_effect_controls = new EffectControls(this);
|
||||
panel_sequence_viewer = new Viewer(this);
|
||||
panel_footage_viewer = new Viewer(this);
|
||||
panel_project = new Project(this);
|
||||
panel_effect_controls = new EffectControls(this);
|
||||
panel_timeline = new Timeline(this);
|
||||
|
||||
setup_layout();
|
||||
@@ -454,35 +456,35 @@ void MainWindow::on_actionReset_to_default_layout_triggered()
|
||||
|
||||
void MainWindow::on_actionGo_to_start_triggered()
|
||||
{
|
||||
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->hasFocus() || panel_effect_controls->keyframe_focus())) {
|
||||
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->is_focused() || panel_effect_controls->keyframe_focus())) {
|
||||
panel_sequence_viewer->go_to_start();
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_actionPrevious_Frame_triggered()
|
||||
{
|
||||
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->hasFocus() || panel_effect_controls->keyframe_focus())) {
|
||||
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->is_focused() || panel_effect_controls->keyframe_focus())) {
|
||||
panel_sequence_viewer->previous_frame();
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_actionNext_Frame_triggered()
|
||||
{
|
||||
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->hasFocus() || panel_effect_controls->keyframe_focus())) {
|
||||
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->is_focused() || panel_effect_controls->keyframe_focus())) {
|
||||
panel_sequence_viewer->next_frame();
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_actionGo_to_End_triggered()
|
||||
{
|
||||
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->hasFocus() || panel_effect_controls->keyframe_focus())) {
|
||||
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->is_focused() || panel_effect_controls->keyframe_focus())) {
|
||||
panel_sequence_viewer->go_to_end();
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_actionPlay_Pause_triggered()
|
||||
{
|
||||
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->hasFocus() || panel_effect_controls->keyframe_focus())) {
|
||||
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->is_focused() || panel_effect_controls->keyframe_focus())) {
|
||||
panel_sequence_viewer->toggle_play();
|
||||
}
|
||||
}
|
||||
@@ -524,14 +526,14 @@ void MainWindow::on_actionSlip_Tool_triggered()
|
||||
|
||||
void MainWindow::on_actionGo_to_Previous_Cut_triggered()
|
||||
{
|
||||
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->hasFocus())) {
|
||||
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->is_focused())) {
|
||||
panel_timeline->previous_cut();
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_actionGo_to_Next_Cut_triggered()
|
||||
{
|
||||
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->hasFocus())) {
|
||||
if (sequence != NULL && (panel_timeline->focused() || panel_sequence_viewer->is_focused())) {
|
||||
panel_timeline->next_cut();
|
||||
}
|
||||
}
|
||||
@@ -576,28 +578,19 @@ void MainWindow::viewMenu_About_To_Be_Shown() {
|
||||
void MainWindow::on_actionFrames_triggered()
|
||||
{
|
||||
config.timecode_view = TIMECODE_FRAMES;
|
||||
if (sequence != NULL) {
|
||||
panel_sequence_viewer->update_playhead_timecode(sequence->playhead);
|
||||
panel_sequence_viewer->update_end_timecode();
|
||||
}
|
||||
update_ui(false);
|
||||
}
|
||||
|
||||
void MainWindow::on_actionDrop_Frame_triggered()
|
||||
{
|
||||
config.timecode_view = TIMECODE_DROP;
|
||||
if (sequence != NULL) {
|
||||
panel_sequence_viewer->update_playhead_timecode(sequence->playhead);
|
||||
panel_sequence_viewer->update_end_timecode();
|
||||
}
|
||||
update_ui(false);
|
||||
}
|
||||
|
||||
void MainWindow::on_actionNon_Drop_Frame_triggered()
|
||||
{
|
||||
config.timecode_view = TIMECODE_NONDROP;
|
||||
if (sequence != NULL) {
|
||||
panel_sequence_viewer->update_playhead_timecode(sequence->playhead);
|
||||
panel_sequence_viewer->update_end_timecode();
|
||||
}
|
||||
update_ui(false);
|
||||
}
|
||||
|
||||
void MainWindow::toolMenu_About_To_Be_Shown() {
|
||||
@@ -701,18 +694,26 @@ void MainWindow::on_actionRipple_to_Out_Point_triggered()
|
||||
|
||||
void MainWindow::on_actionSet_In_Point_triggered()
|
||||
{
|
||||
if (panel_timeline->focused() || panel_sequence_viewer->hasFocus()) panel_timeline->set_in_point();
|
||||
if (panel_timeline->focused() || panel_sequence_viewer->is_focused()) {
|
||||
panel_sequence_viewer->set_in_point();
|
||||
} else if (panel_footage_viewer->is_focused()) {
|
||||
panel_footage_viewer->set_in_point();
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_actionSet_Out_Point_triggered()
|
||||
{
|
||||
if (panel_timeline->focused() || panel_sequence_viewer->hasFocus()) panel_timeline->set_out_point();
|
||||
if (panel_timeline->focused() || panel_sequence_viewer->is_focused()) {
|
||||
panel_sequence_viewer->set_out_point();
|
||||
} else if (panel_footage_viewer->is_focused()) {
|
||||
panel_footage_viewer->set_out_point();
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_actionClear_In_Out_triggered() {
|
||||
if ((panel_timeline->focused() || panel_sequence_viewer->hasFocus()) && sequence->using_workarea) {
|
||||
if ((panel_timeline->focused() || panel_sequence_viewer->is_focused()) && sequence->using_workarea) {
|
||||
undo_stack.push(new SetTimelineInOutCommand(sequence, false, 0, 0));
|
||||
panel_timeline->repaint_timeline();
|
||||
update_ui(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ EffectControls::EffectControls(QWidget *parent) :
|
||||
init_effects();
|
||||
init_transitions();
|
||||
clear_effects(false);
|
||||
ui->headers->viewer = panel_sequence_viewer;
|
||||
ui->headers->snapping = false;
|
||||
|
||||
ui->effects_area->parent_widget = ui->scrollArea;
|
||||
@@ -45,9 +46,6 @@ EffectControls::EffectControls(QWidget *parent) :
|
||||
connect(ui->verticalScrollBar, SIGNAL(valueChanged(int)), ui->keyframeView, SLOT(set_y_scroll(int)));
|
||||
connect(ui->verticalScrollBar, SIGNAL(valueChanged(int)), ui->scrollArea->verticalScrollBar(), SLOT(setValue(int)));
|
||||
connect(ui->scrollArea->verticalScrollBar(), SIGNAL(valueChanged(int)), ui->verticalScrollBar, SLOT(setValue(int)));
|
||||
|
||||
/*connect(ui->keyframeScroller->verticalScrollBar(), SIGNAL(valueChanged(int)), ui->scrollArea->verticalScrollBar(), SLOT(setValue(int)));
|
||||
connect(ui->keyframeScroller->horizontalScrollBar(), SIGNAL(valueChanged(int)), ui->headers, SLOT(set_scroll(int)));*/
|
||||
}
|
||||
|
||||
EffectControls::~EffectControls() {
|
||||
|
||||
+1
-1
@@ -62,7 +62,7 @@ void update_effect_controls() {
|
||||
|
||||
void update_ui(bool modified) {
|
||||
if (modified) {
|
||||
panel_sequence_viewer->reset_all_audio();
|
||||
// panel_sequence_viewer->reset_all_audio();
|
||||
update_effect_controls();
|
||||
}
|
||||
panel_effect_controls->update_keyframes();
|
||||
|
||||
+2
-9
@@ -184,14 +184,6 @@ int Timeline::calculate_track_height(int track, int value) {
|
||||
return vector.at(index);
|
||||
}
|
||||
|
||||
void Timeline::set_in_point() {
|
||||
ui->headers->set_in_point(sequence->playhead);
|
||||
}
|
||||
|
||||
void Timeline::set_out_point() {
|
||||
ui->headers->set_out_point(sequence->playhead);
|
||||
}
|
||||
|
||||
void Timeline::update_sequence() {
|
||||
bool null_sequence = (sequence == NULL);
|
||||
|
||||
@@ -315,7 +307,8 @@ void Timeline::delete_selection(bool ripple_delete) {
|
||||
if (!deleted) {
|
||||
for (int j=0;j<sequence->clips.size();j++) {
|
||||
Clip* cc = sequence->clips.at(j);
|
||||
if (cc->track == c->track
|
||||
if (cc != NULL
|
||||
&& cc->track == c->track
|
||||
&& cc->timeline_in > c->timeline_out
|
||||
&& cc->timeline_in < c->timeline_out + ripple_length) {
|
||||
ripple_length = cc->timeline_in - c->timeline_out;
|
||||
|
||||
@@ -92,8 +92,6 @@ public:
|
||||
bool has_clip_been_split(int c);
|
||||
void toggle_links();
|
||||
void ripple_to_in_point(bool in);
|
||||
void set_in_point();
|
||||
void set_out_point();
|
||||
void delete_in_out(bool ripple);
|
||||
void previous_cut();
|
||||
void next_cut();
|
||||
|
||||
+19
-7
@@ -52,7 +52,11 @@ Viewer::Viewer(QWidget *parent) :
|
||||
}
|
||||
|
||||
Viewer::~Viewer() {
|
||||
delete ui;
|
||||
delete ui;
|
||||
}
|
||||
|
||||
bool Viewer::is_focused() {
|
||||
return ui->headers->hasFocus() || ui->openGLWidget->hasFocus();
|
||||
}
|
||||
|
||||
void Viewer::set_main_sequence() {
|
||||
@@ -140,7 +144,7 @@ QString frame_to_timecode(long f, int view, double frame_rate) {
|
||||
}
|
||||
|
||||
bool frame_rate_is_droppable(float rate) {
|
||||
return (rate == 23.976f || rate == 29.97f || rate == 59.94f);
|
||||
return (qFuzzyCompare(rate, 23.976f) || qFuzzyCompare(rate, 29.97f) || qFuzzyCompare(rate, 59.94f));
|
||||
}
|
||||
|
||||
void Viewer::seek(long p) {
|
||||
@@ -204,10 +208,6 @@ void Viewer::update_end_timecode() {
|
||||
void Viewer::update_header_zoom() {
|
||||
if (seq != NULL) {
|
||||
long sequenceEndFrame = seq->getEndFrame();
|
||||
if (sequenceEndFrame > 0) {
|
||||
ui->headers->update_zoom((double) ui->headers->width() / (double) sequenceEndFrame);
|
||||
} else {
|
||||
}
|
||||
ui->headers->update_zoom((sequenceEndFrame > 0) ? ((double) ui->headers->width() / (double) sequenceEndFrame) : 1);
|
||||
}
|
||||
}
|
||||
@@ -224,6 +224,17 @@ void Viewer::update_viewer() {
|
||||
viewer_widget->update();
|
||||
update_header_zoom();
|
||||
if (seq != NULL) update_playhead_timecode(seq->playhead);
|
||||
update_end_timecode();
|
||||
}
|
||||
|
||||
void Viewer::set_in_point() {
|
||||
qDebug() << "in h";
|
||||
ui->headers->set_in_point(seq->playhead);
|
||||
}
|
||||
|
||||
void Viewer::set_out_point() {
|
||||
qDebug() << "out h";
|
||||
ui->headers->set_out_point(seq->playhead);
|
||||
}
|
||||
|
||||
void Viewer::set_media(int type, void* media) {
|
||||
@@ -242,7 +253,8 @@ void Viewer::set_media(int type, void* media) {
|
||||
MediaStream* video_stream = footage->video_tracks.at(0);
|
||||
seq->width = video_stream->video_width;
|
||||
seq->height = video_stream->video_height;
|
||||
seq->frame_rate = video_stream->video_frame_rate;
|
||||
if (video_stream->video_frame_rate > 0) seq->frame_rate = video_stream->video_frame_rate;
|
||||
qDebug() << seq->frame_rate << video_stream->video_frame_rate;
|
||||
|
||||
Clip* c = new Clip(seq);
|
||||
c->media = footage;
|
||||
|
||||
@@ -23,6 +23,7 @@ public:
|
||||
explicit Viewer(QWidget *parent = 0);
|
||||
~Viewer();
|
||||
|
||||
bool is_focused();
|
||||
void set_main_sequence();
|
||||
void set_media(int type, void* media);
|
||||
void compose();
|
||||
@@ -31,6 +32,8 @@ public:
|
||||
void update_end_timecode();
|
||||
void update_header_zoom();
|
||||
void update_viewer();
|
||||
void set_in_point();
|
||||
void set_out_point();
|
||||
|
||||
// playback functions
|
||||
void go_to_start();
|
||||
|
||||
+5
-11
@@ -708,8 +708,6 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
|
||||
bool shift = (event->modifiers() & Qt::ShiftModifier);
|
||||
|
||||
if (event->button() == Qt::LeftButton) {
|
||||
bool changed = false;
|
||||
|
||||
ComboAction* ca = new ComboAction();
|
||||
bool push_undo = false;
|
||||
|
||||
@@ -780,8 +778,7 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
|
||||
areas.append(s);
|
||||
panel_timeline->delete_areas_and_relink(ca, areas);
|
||||
|
||||
push_undo = true;
|
||||
changed = true;
|
||||
push_undo = true;
|
||||
|
||||
if (!shift) {
|
||||
panel_timeline->creating = false;
|
||||
@@ -952,11 +949,9 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
|
||||
}
|
||||
}
|
||||
}
|
||||
push_undo = true;
|
||||
changed = true;
|
||||
push_undo = true;
|
||||
}
|
||||
} else if (panel_timeline->selecting || panel_timeline->rect_select_proc) {
|
||||
changed = true;
|
||||
} else if (panel_timeline->selecting || panel_timeline->rect_select_proc) {
|
||||
} else if (panel_timeline->splitting) {
|
||||
bool split = false;
|
||||
for (int i=0;i<panel_timeline->split_tracks.size();i++) {
|
||||
@@ -966,8 +961,7 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
|
||||
}
|
||||
}
|
||||
if (split) {
|
||||
push_undo = true;
|
||||
changed = true;
|
||||
push_undo = true;
|
||||
}
|
||||
panel_timeline->split_cache.clear();
|
||||
}
|
||||
@@ -1004,7 +998,7 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) {
|
||||
pre_clips.clear();
|
||||
post_clips.clear();
|
||||
|
||||
update_ui(changed);
|
||||
update_ui(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user