added focus filter

This commit is contained in:
itsmattkc
2019-02-14 16:42:36 -08:00
parent 8034f047ba
commit acf286e1d8
17 changed files with 442 additions and 412 deletions
+125
View File
@@ -1,6 +1,8 @@
#include "focusfilter.h"
#include "panels/panels.h"
#include "project/sequence.h"
#include "ui/timelineheader.h"
FocusFilter Olive::FocusFilter;
@@ -107,3 +109,126 @@ void FocusFilter::decrease_speed() {
panel_sequence_viewer->decrease_speed();
}
}
void FocusFilter::set_in_point() {
if (get_focused_panel() == panel_footage_viewer) {
panel_footage_viewer->set_in_point();
} else {
panel_sequence_viewer->set_in_point();
}
}
void FocusFilter::set_out_point() {
if (get_focused_panel() == panel_footage_viewer) {
panel_footage_viewer->set_out_point();
} else {
panel_sequence_viewer->set_out_point();
}
}
void FocusFilter::clear_in() {
if (get_focused_panel() == panel_footage_viewer) {
panel_footage_viewer->clear_in();
} else {
panel_sequence_viewer->clear_in();
}
}
void FocusFilter::clear_out() {
if (get_focused_panel() == panel_footage_viewer) {
panel_footage_viewer->clear_out();
} else {
panel_sequence_viewer->clear_out();
}
}
void FocusFilter::clear_inout() {
if (get_focused_panel() == panel_footage_viewer) {
panel_footage_viewer->clear_inout_point();
} else {
panel_sequence_viewer->clear_inout_point();
}
}
void FocusFilter::delete_function() {
if (panel_timeline->headers->hasFocus()) {
panel_timeline->headers->delete_markers();
} else if (panel_footage_viewer->headers->hasFocus()) {
panel_footage_viewer->headers->delete_markers();
} else if (panel_sequence_viewer->headers->hasFocus()) {
panel_sequence_viewer->headers->delete_markers();
} else if (panel_effect_controls->is_focused()) {
panel_effect_controls->delete_effects();
} else if (panel_project->is_focused()) {
panel_project->delete_selected_media();
} else if (panel_effect_controls->keyframe_focus()) {
panel_effect_controls->delete_selected_keyframes();
} else if (panel_graph_editor->view_is_focused()) {
panel_graph_editor->delete_selected_keys();
} else {
panel_timeline->delete_selection(Olive::ActiveSequence->selections, false);
}
}
void FocusFilter::duplicate() {
if (panel_project->is_focused()) {
panel_project->duplicate_selected();
}
}
void FocusFilter::select_all() {
QDockWidget* focused_panel = get_focused_panel();
if (focused_panel == panel_graph_editor) {
panel_graph_editor->select_all();
} else {
panel_timeline->select_all();
}
}
void FocusFilter::zoom_in() {
QDockWidget* focused_panel = get_focused_panel();
if (focused_panel == panel_effect_controls) {
panel_effect_controls->set_zoom(true);
} else if (focused_panel == panel_footage_viewer) {
panel_footage_viewer->set_zoom(true);
} else if (focused_panel == panel_sequence_viewer) {
panel_sequence_viewer->set_zoom(true);
} else {
panel_timeline->set_zoom(true);
}
}
void FocusFilter::zoom_out() {
QDockWidget* focused_panel = get_focused_panel();
if (focused_panel == panel_effect_controls) {
panel_effect_controls->set_zoom(false);
} else if (focused_panel == panel_footage_viewer) {
panel_footage_viewer->set_zoom(false);
} else if (focused_panel == panel_sequence_viewer) {
panel_sequence_viewer->set_zoom(false);
} else {
panel_timeline->set_zoom(false);
}
}
void FocusFilter::cut() {
if (Olive::ActiveSequence != nullptr) {
QDockWidget* focused_panel = get_focused_panel();
if (panel_effect_controls == focused_panel) {
panel_effect_controls->copy(true);
} else {
panel_timeline->copy(true);
}
}
}
void FocusFilter::copy() {
if (Olive::ActiveSequence != nullptr) {
QDockWidget* focused_panel = get_focused_panel();
if (panel_effect_controls == focused_panel) {
panel_effect_controls->copy(false);
} else {
panel_timeline->copy(false);
}
}
}
+17
View File
@@ -9,6 +9,11 @@ public:
FocusFilter();
public slots:
void cut();
void copy();
void duplicate();
void go_to_in();
void go_to_out();
void go_to_start();
@@ -20,6 +25,18 @@ public slots:
void decrease_speed();
void next_frame();
void go_to_end();
void set_in_point();
void set_out_point();
void clear_in();
void clear_out();
void clear_inout();
void delete_function();
void select_all();
void zoom_in();
void zoom_out();
};
namespace Olive {
+47 -7
View File
@@ -2,6 +2,10 @@
#include "oliveglobal.h"
#include "ui/focusfilter.h"
#include "panels/panels.h"
#include "mainwindow.h"
MenuHelper Olive::MenuHelper;
@@ -9,15 +13,51 @@ MenuHelper Olive::MenuHelper;
void MenuHelper::make_new_menu(QMenu *parent) {
parent->addAction(tr("&Project"), Olive::Global.data(), SLOT(new_project()), QKeySequence("Ctrl+N"))->setProperty("id", "newproj");
parent->addSeparator();
parent->addAction(tr("&Sequence"), Olive::MainWindow, SLOT(new_sequence()), QKeySequence("Ctrl+Shift+N"))->setProperty("id", "newseq");
parent->addAction(tr("&Folder"), Olive::MainWindow, SLOT(new_folder()))->setProperty("id", "newfolder");
parent->addAction(tr("&Sequence"), panel_project, SLOT(new_sequence()), QKeySequence("Ctrl+Shift+N"))->setProperty("id", "newseq");
parent->addAction(tr("&Folder"), panel_project, SLOT(new_folder()))->setProperty("id", "newfolder");
}
void MenuHelper::make_inout_menu(QMenu *parent) {
parent->addAction(tr("Set In Point"), Olive::MainWindow, SLOT(set_in_point()), QKeySequence("I"))->setProperty("id", "setinpoint");
parent->addAction(tr("Set Out Point"), Olive::MainWindow, SLOT(set_out_point()), QKeySequence("O"))->setProperty("id", "setoutpoint");
parent->addAction(tr("Set In Point"), &Olive::FocusFilter, SLOT(set_in_point()), QKeySequence("I"))->setProperty("id", "setinpoint");
parent->addAction(tr("Set Out Point"), &Olive::FocusFilter, SLOT(set_out_point()), QKeySequence("O"))->setProperty("id", "setoutpoint");
parent->addSeparator();
parent->addAction(tr("Reset In Point"), Olive::MainWindow, SLOT(clear_in()))->setProperty("id", "resetin");
parent->addAction(tr("Reset Out Point"), Olive::MainWindow, SLOT(clear_out()))->setProperty("id", "resetout");
parent->addAction(tr("Clear In/Out Point"), Olive::MainWindow, SLOT(clear_inout()), QKeySequence("G"))->setProperty("id", "clearinout");
parent->addAction(tr("Reset In Point"), &Olive::FocusFilter, SLOT(clear_in()))->setProperty("id", "resetin");
parent->addAction(tr("Reset Out Point"), &Olive::FocusFilter, SLOT(clear_out()))->setProperty("id", "resetout");
parent->addAction(tr("Clear In/Out Point"), &Olive::FocusFilter, SLOT(clear_inout()), QKeySequence("G"))->setProperty("id", "clearinout");
}
void MenuHelper::make_clip_functions_menu(QMenu *parent) {
parent->addAction(tr("Add Default Transition"), panel_timeline, SLOT(add_transition()), QKeySequence("Ctrl+Shift+D"))->setProperty("id", "deftransition");
parent->addAction(tr("Link/Unlink"), panel_timeline, SLOT(toggle_links()), QKeySequence("Ctrl+L"))->setProperty("id", "linkunlink");
parent->addAction(tr("Enable/Disable"), panel_timeline, SLOT(toggle_enable_on_selected_clips()), QKeySequence("Shift+E"))->setProperty("id", "enabledisable");
parent->addAction(tr("Nest"), panel_timeline, SLOT(nest()))->setProperty("id", "nest");
}
void MenuHelper::make_edit_functions_menu(QMenu *parent) {
parent->addAction(tr("Cu&t"), &Olive::FocusFilter, SLOT(cut()), QKeySequence("Ctrl+X"))->setProperty("id", "cut");
parent->addAction(tr("Cop&y"), &Olive::FocusFilter, SLOT(copy()), QKeySequence("Ctrl+C"))->setProperty("id", "copy");
parent->addAction(tr("&Paste"), Olive::Global.data(), SLOT(paste()), QKeySequence("Ctrl+V"))->setProperty("id", "paste");
parent->addAction(tr("Paste Insert"), Olive::Global.data(), SLOT(paste_insert()), QKeySequence("Ctrl+Shift+V"))->setProperty("id", "pasteinsert");
parent->addAction(tr("Duplicate"), &Olive::FocusFilter, SLOT(duplicate()), QKeySequence("Ctrl+D"))->setProperty("id", "duplicate");
parent->addAction(tr("Delete"), &Olive::FocusFilter, SLOT(delete_function()), QKeySequence("Del"))->setProperty("id", "delete");
parent->addAction(tr("Ripple Delete"), this, SLOT(ripple_delete()), QKeySequence("Shift+Del"))->setProperty("id", "rippledelete");
parent->addAction(tr("Split"), panel_timeline, SLOT(split_at_playhead()), QKeySequence("Ctrl+K"))->setProperty("id", "split");
}
void MenuHelper::set_bool_action_checked(QAction *a) {
if (!a->data().isNull()) {
bool* variable = reinterpret_cast<bool*>(a->data().value<quintptr>());
a->setChecked(*variable);
}
}
void MenuHelper::set_int_action_checked(QAction *a, const int& i) {
if (!a->data().isNull()) {
a->setChecked(a->data() == i);
}
}
#include <QPushButton>
void MenuHelper::set_button_action_checked(QAction *a) {
a->setChecked(reinterpret_cast<QPushButton*>(a->data().value<quintptr>())->isChecked());
}
+28
View File
@@ -30,6 +30,34 @@ public:
* The menu to add items to.
*/
void make_inout_menu(QMenu* parent);
/**
* @brief Creates a menu of clip functions
*
* Adds a set of clip functions including:
* * Add Default Transition
* * Link/Unlink
* * Enable/Disable
* * Nest
*
* @param parent
*
* The menu to add items to.
*/
void make_clip_functions_menu(QMenu* parent);
/**
* @brief Creates standard edit menu (cut, copy, paste, etc.)
*
* @param parent
*
* The menu to add items to.
*/
void make_edit_functions_menu(QMenu* parent);
void set_bool_action_checked(QAction* a);
void set_int_action_checked(QAction* a, const int& i);
void set_button_action_checked(QAction* a);
private slots:
+7 -18
View File
@@ -1,29 +1,22 @@
#include "timelinewidget.h"
#include "playback/audio.h"
#include "panels/panels.h"
#include "project/projectelements.h"
#include "playback/audio.h"
#include "io/config.h"
#include "project/sequence.h"
#include "project/transition.h"
#include "project/clip.h"
#include "panels/project.h"
#include "panels/timeline.h"
#include "project/footage.h"
#include "ui/sourcetable.h"
#include "ui/sourceiconview.h"
#include "panels/effectcontrols.h"
#include "panels/viewer.h"
#include "project/undo.h"
#include "mainwindow.h"
#include "ui/viewerwidget.h"
#include "dialogs/stabilizerdialog.h"
#include "project/media.h"
#include "ui/resizablescrollbar.h"
#include "dialogs/newsequencedialog.h"
#include "mainwindow.h"
#include "ui/rectangleselect.h"
#include "playback/playback.h"
#include "ui/cursors.h"
#include "ui/menuhelper.h"
#include "debug.h"
#include "project/effect.h"
@@ -123,13 +116,9 @@ void TimelineWidget::show_context_menu(const QPoint& pos) {
QAction* autoscaleAction = menu.addAction(tr("Auto-s&cale"), this, SLOT(toggle_autoscale()));
autoscaleAction->setCheckable(true);
// set autoscale to the first selected clip
autoscaleAction->setChecked(selected_clips.at(0)->autoscale);
autoscaleAction->setChecked(selected_clips.at(0)->autoscale);
menu.addAction(tr("Enable/Disable"), Olive::MainWindow, SLOT(toggle_enable_clips()));
menu.addAction(tr("Link/Unlink"), panel_timeline, SLOT(toggle_links()));
menu.addAction(tr("&Nest"), Olive::MainWindow, SLOT(nest()));
Olive::MenuHelper.make_clip_functions_menu(&menu);
// stabilizer option
/*int video_clip_count = 0;
@@ -486,7 +475,7 @@ void TimelineWidget::dropEvent(QDropEvent* event) {
// if we're dropping into nothing, create a new sequences based on the clip being dragged
if (s == nullptr) {
s = self_created_sequence;
panel_project->new_sequence(ca, self_created_sequence, true, nullptr);
panel_project->create_sequence_internal(ca, self_created_sequence, true, nullptr);
self_created_sequence = nullptr;
} else if (event->keyboardModifiers() & Qt::ControlModifier) {
insert_clips(ca);