From e1f0e5650c5b13589234f7d8a65aa653c4d93b8e Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Sun, 24 Jun 2018 07:14:25 -0700 Subject: [PATCH] basic #56 support added --- mainwindow.cpp | 4 +- mainwindow.h | 2 +- olive.pro.user | 2 +- panels/effectcontrols.cpp | 94 ++++++++++++++------- panels/effectcontrols.h | 15 +++- panels/effectcontrols.ui | 169 +++++++++++++++++++++++++++++++++++--- panels/timeline.cpp | 4 +- panels/timeline.h | 2 +- ui/timelinewidget.cpp | 53 ++++++++---- 9 files changed, 282 insertions(+), 63 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index a2db6f80e..36125a83a 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -84,7 +84,7 @@ MainWindow::MainWindow(QWidget *parent) : setup_layout(); - connect(ui->menuWindow, SIGNAL(aboutToShow()), this, SLOT(on_windowMenu_About_To_Be_Shown())); + connect(ui->menuWindow, SIGNAL(aboutToShow()), this, SLOT(windowMenu_About_To_Be_Shown())); QString data_dir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); if (!data_dir.isEmpty()) { @@ -446,7 +446,7 @@ void MainWindow::on_actionDecrease_Track_Height_triggered() panel_timeline->decrease_track_height(); } -void MainWindow::on_windowMenu_About_To_Be_Shown() { +void MainWindow::windowMenu_About_To_Be_Shown() { ui->actionProject_2->setChecked(panel_project->isVisible()); ui->actionEffect_Controls->setChecked(panel_effect_controls->isVisible()); ui->actionTimeline->setChecked(panel_timeline->isVisible()); diff --git a/mainwindow.h b/mainwindow.h index 1d64b5ecd..6bce28352 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -115,7 +115,7 @@ private slots: void on_actionDecrease_Track_Height_triggered(); - void on_windowMenu_About_To_Be_Shown(); + void windowMenu_About_To_Be_Shown(); private: Ui::MainWindow *ui; diff --git a/olive.pro.user b/olive.pro.user index a2502092b..d1a52b33f 100644 --- a/olive.pro.user +++ b/olive.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/panels/effectcontrols.cpp b/panels/effectcontrols.cpp index b606a81b4..c46bb2001 100644 --- a/panels/effectcontrols.cpp +++ b/panels/effectcontrols.cpp @@ -16,16 +16,8 @@ EffectControls::EffectControls(QWidget *parent) : ui(new Ui::EffectControls) { ui->setupUi(this); - - init_effects(); - - clip = NULL; - set_clip(NULL); -} - -void EffectControls::menu_select(QAction* q) { - clip->effects.append(create_effect(q->data().toInt(), clip)); - set_clip(clip); + init_effects(); + clear_effects(); } EffectControls::~EffectControls() @@ -33,11 +25,22 @@ EffectControls::~EffectControls() delete ui; } -void EffectControls::on_pushButton_clicked() -{ +void EffectControls::menu_select(QAction* q) { + for (int i=0;itrack < 0 && video_menu) || (clip->track >= 0 && !video_menu)) { + clip->effects.append(create_effect(q->data().toInt(), clip)); + } + } + reload_clips(); +} + +void EffectControls::show_menu(bool video) { + video_menu = video; + int lim; QVector* effect_names; - if (clip->track < 0) { + if (video) { lim = VIDEO_EFFECT_COUNT; effect_names = &video_effect_names; } else { @@ -59,19 +62,54 @@ void EffectControls::on_pushButton_clicked() effects_menu.exec(QCursor::pos()); } -void EffectControls::set_clip(Clip* c) { - // clear ui->scrollAreaWidgetContents - if (clip != NULL) { - for (int i=0;ieffects.size();i++) { - clip->effects.at(i)->container->setParent(NULL); - } - } - - ui->pushButton->setEnabled(c != NULL); - if (c != NULL) { - for (int i=0;ieffects.size();i++) { - static_cast(ui->scrollAreaWidgetContents->layout())->insertWidget(i, c->effects.at(i)->container); - } - } - clip = c; +void EffectControls::clear_effects() { + // clear existing clips + QVBoxLayout* video_layout = static_cast(ui->video_effect_area->layout()); + QVBoxLayout* audio_layout = static_cast(ui->audio_effect_area->layout()); + QLayoutItem* item; + while ((item = video_layout->takeAt(0))) {item->widget()->setParent(NULL);} + while ((item = audio_layout->takeAt(0))) {item->widget()->setParent(NULL);} + ui->vcontainer->setVisible(false); + ui->acontainer->setVisible(false); +} + +void EffectControls::load_effects() { + // load in new clips + for (int i=0;ieffects.size();j++) { + CollapsibleWidget* container = c->effects.at(j)->container; + if (c->track < 0) { + static_cast(ui->video_effect_area->layout())->addWidget(container); + ui->vcontainer->setVisible(true); + } else { + static_cast(ui->audio_effect_area->layout())->addWidget(container); + ui->acontainer->setVisible(true); + } + } + } +} + +void EffectControls::reload_clips() { + // clear_effects(); + load_effects(); +} + +void EffectControls::set_clips(QVector& clips) { + clear_effects(); + + // replace clip vector + selected_clips = clips; + + load_effects(); +} + +void EffectControls::on_add_video_effect_button_clicked() +{ + show_menu(true); +} + +void EffectControls::on_add_audio_effect_button_clicked() +{ + show_menu(false); } diff --git a/panels/effectcontrols.h b/panels/effectcontrols.h index 90ad37f73..80bb1b5e4 100644 --- a/panels/effectcontrols.h +++ b/panels/effectcontrols.h @@ -17,15 +17,24 @@ class EffectControls : public QDockWidget public: explicit EffectControls(QWidget *parent = 0); ~EffectControls(); - void set_clip(Clip* c); + // void set_clip(Clip* c); + void set_clips(QVector& clips); + void clear_effects(); private slots: - void on_pushButton_clicked(); void menu_select(QAction* q); + void on_add_video_effect_button_clicked(); + + void on_add_audio_effect_button_clicked(); + private: Ui::EffectControls *ui; - Clip* clip; + QVector selected_clips; + void show_menu(bool video); + void load_effects(); + void reload_clips(); + bool video_menu; }; #endif // EFFECTCONTROLS_H diff --git a/panels/effectcontrols.ui b/panels/effectcontrols.ui index 0d329d3be..ee12219ff 100644 --- a/panels/effectcontrols.ui +++ b/panels/effectcontrols.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 621 + 510 @@ -49,11 +49,14 @@ 0 0 - 398 - 253 + 619 + 482 + + 0 + 0 @@ -66,6 +69,157 @@ 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 9 + + + + padding: 5px; +background: rgba(0, 0, 0, 0.25); + + + VIDEO EFFECTS + + + Qt::AlignCenter + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + [+] Add Video Effect + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 9 + + + + padding: 5px; +background: rgba(0, 0, 0, 0.25); + + + AUDIO EFFECTS + + + Qt::AlignCenter + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + [+] Add Audio Effect + + + + + + @@ -83,13 +237,6 @@ - - - - [+] Add Effect - - - diff --git a/panels/timeline.cpp b/panels/timeline.cpp index c3ee29f85..5af69452f 100644 --- a/panels/timeline.cpp +++ b/panels/timeline.cpp @@ -274,7 +274,7 @@ void Timeline::select_all() { void Timeline::delete_selection(bool ripple_delete) { if (selections.size() > 0) { - panel_effect_controls->set_clip(NULL); + panel_effect_controls->clear_effects(); long ripple_point = selections.at(0).in; long ripple_length = selections.at(0).out - selections.at(0).in; @@ -471,7 +471,7 @@ void Timeline::split_clip_and_relink(Clip* pre_clip, long frame, bool relink) { } } -void Timeline::delete_areas_and_relink(QVector areas) { +void Timeline::delete_areas_and_relink(QVector& areas) { QVector pre_clips; QVector post_clips; diff --git a/panels/timeline.h b/panels/timeline.h index 17a43f1f7..08f3aa7a1 100644 --- a/panels/timeline.h +++ b/panels/timeline.h @@ -68,7 +68,7 @@ public: bool split_selection(); void split_at_playhead(); void split_clip_and_relink(Clip* clip, long frame, bool relink); - void delete_areas_and_relink(QVector areas); + void delete_areas_and_relink(QVector& areas); void update_sequence(); void increase_track_height(); void decrease_track_height(); diff --git a/ui/timelinewidget.cpp b/ui/timelinewidget.cpp index bb8f60459..92fe2a652 100644 --- a/ui/timelinewidget.cpp +++ b/ui/timelinewidget.cpp @@ -259,6 +259,8 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) { c->timeline_out = g.out; c->track = g.track; + delete_areas.append({g.in, g.out, g.track}); + copy_clips.append(c); } panel_timeline->delete_areas_and_relink(delete_areas); @@ -342,27 +344,50 @@ void TimelineWidget::mouseReleaseEvent(QMouseEvent *event) { // panel_timeline->repaint_timeline(); + // SEND CLIPS TO EFFECT CONTROLS // find out how many clips are selected - bool single_select = false; - int selected_clip = 0; + bool got_vclip = false; + bool got_aclip = false; + Clip* vclip = NULL; + Clip* aclip = NULL; for (int i=0;iclip_count();i++) { - if (panel_timeline->is_clip_selected(sequence->get_clip(i))) { - if (!single_select) { - // found ONE selected clip - selected_clip = i; - single_select = true; + Clip* clip = sequence->get_clip(i); + if (panel_timeline->is_clip_selected(clip)) { + if (clip->track < 0) { + if (got_vclip) { + vclip = NULL; + } else { + vclip = clip; + got_vclip = true; + } } else { - // more than one clip is selected - single_select = false; - break; + if (got_aclip) { + aclip = NULL; + } else { + aclip = clip; + got_aclip = true; + } } } } - if (single_select) { - panel_effect_controls->set_clip(sequence->get_clip(selected_clip)); - } else { - panel_effect_controls->set_clip(NULL); + // check if aclip is linked to vclip + QVector selected_clips; + if (vclip != NULL) selected_clips.append(vclip); + if (aclip != NULL) selected_clips.append(aclip); + if (vclip != NULL && aclip != NULL) { + bool found = false; + for (int i=0;ilinked.size();i++) { + if (vclip->linked.at(i) == aclip) { + found = true; + break; + } + } + if (!found) { + // only display multiple clips if they're linked + selected_clips.clear(); + } } + panel_effect_controls->set_clips(selected_clips); } }