From c73fc780871ec445edbb939de1ec68fed790915f Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Thu, 14 Mar 2019 10:53:50 +1100 Subject: [PATCH] moved undostack to its own source file --- dialogs/mediapropertiesdialog.cpp | 1 + dialogs/newsequencedialog.cpp | 1 + dialogs/preferencesdialog.cpp | 6 +++ dialogs/preferencesdialog.h | 10 +++++ dialogs/replaceclipmediadialog.cpp | 10 ++--- dialogs/speeddialog.cpp | 1 + effects/effect.cpp | 30 +++++++------ effects/effectfield.h | 1 + effects/effectgizmo.cpp | 10 ----- effects/effectgizmo.h | 2 - effects/effectrow.cpp | 1 + effects/internal/cornerpineffect.cpp | 2 +- effects/keyframe.cpp | 1 + global/global.cpp | 25 ++++++----- olive.pro | 6 ++- panels/effectcontrols.cpp | 1 + panels/project.cpp | 6 +++ panels/timeline.cpp | 5 +++ panels/viewer.cpp | 11 +++-- project/media.cpp | 1 + project/sourcescommon.cpp | 18 ++++---- timeline/marker.cpp | 15 ++++--- timeline/marker.h | 4 +- timeline/sequence.cpp | 13 +++--- ui/checkboxex.cpp | 1 + ui/graphview.cpp | 1 + ui/keyframeview.cpp | 9 ++-- ui/mainwindow.cpp | 52 +++++++++------------ ui/menuhelper.cpp | 20 ++++++--- ui/menuhelper.h | 7 ++- ui/timelineheader.cpp | 15 ++++--- ui/timelinewidget.cpp | 67 +++++++++++++--------------- ui/viewerwidget.cpp | 4 -- undo/undo.cpp | 10 ++--- undo/undo.h | 4 -- undo/undostack.cpp | 3 ++ undo/undostack.h | 10 +++++ 37 files changed, 212 insertions(+), 172 deletions(-) create mode 100644 undo/undostack.cpp create mode 100644 undo/undostack.h diff --git a/dialogs/mediapropertiesdialog.cpp b/dialogs/mediapropertiesdialog.cpp index dceb5ba9a..3ea790c55 100644 --- a/dialogs/mediapropertiesdialog.cpp +++ b/dialogs/mediapropertiesdialog.cpp @@ -35,6 +35,7 @@ #include "project/media.h" #include "panels/project.h" #include "undo/undo.h" +#include "undo/undostack.h" MediaPropertiesDialog::MediaPropertiesDialog(QWidget *parent, Media *i) : QDialog(parent), diff --git a/dialogs/newsequencedialog.cpp b/dialogs/newsequencedialog.cpp index 575775af7..8f12077c6 100644 --- a/dialogs/newsequencedialog.cpp +++ b/dialogs/newsequencedialog.cpp @@ -23,6 +23,7 @@ #include "panels/panels.h" #include "panels/project.h" #include "timeline/sequence.h" +#include "undo/undostack.h" #include "undo/undo.h" #include "timeline/clip.h" #include "panels/timeline.h" diff --git a/dialogs/preferencesdialog.cpp b/dialogs/preferencesdialog.cpp index e5115e906..af9ebdbbf 100644 --- a/dialogs/preferencesdialog.cpp +++ b/dialogs/preferencesdialog.cpp @@ -544,6 +544,12 @@ void PreferencesDialog::setup_ui() { use_software_fallbacks_checkbox->setChecked(olive::CurrentConfig.use_software_fallback); general_layout->addWidget(use_software_fallbacks_checkbox, row, 0, 1, 4); + row++; + + // General -> Default Sequence Settings + QPushButton* default_sequence_settings = new QPushButton(tr("Default Sequence Settings")); + general_layout->addWidget(default_sequence_settings); + tabWidget->addTab(general_tab, tr("General")); // Behavior diff --git a/dialogs/preferencesdialog.h b/dialogs/preferencesdialog.h index e192a9a63..d93ff5ab3 100644 --- a/dialogs/preferencesdialog.h +++ b/dialogs/preferencesdialog.h @@ -34,6 +34,8 @@ #include #include +#include "timeline/sequence.h" + class KeySequenceEditor : public QKeySequenceEdit { Q_OBJECT public: @@ -72,6 +74,13 @@ private: // used to delete previews // type can be: 't' for thumbnails, 'w' for waveforms, or 1 for all + /** + * @brief Delete disk cached preview files (thumbnails, waveforms, etc.) + * + * @param type + * + * The types of previews to + */ void delete_previews(char type); QLineEdit* custom_css_fn; @@ -94,6 +103,7 @@ private: QSpinBox* waveform_res_spinbox; QCheckBox* add_default_effects_to_clips; QComboBox* ui_style; + Sequence sequence_settings; QVector key_shortcut_actions; QVector key_shortcut_items; diff --git a/dialogs/replaceclipmediadialog.cpp b/dialogs/replaceclipmediadialog.cpp index bb8b73b33..a8aec4cfd 100644 --- a/dialogs/replaceclipmediadialog.cpp +++ b/dialogs/replaceclipmediadialog.cpp @@ -20,16 +20,16 @@ #include "replaceclipmediadialog.h" -#include "panels/panels.h" - -#include "rendering/cacher.h" -#include "undo/undo.h" - #include #include #include #include +#include "panels/panels.h" +#include "undo/undostack.h" +#include "rendering/cacher.h" +#include "undo/undo.h" + ReplaceClipMediaDialog::ReplaceClipMediaDialog(QWidget *parent, Media* old_media) : QDialog(parent), media(old_media) diff --git a/dialogs/speeddialog.cpp b/dialogs/speeddialog.cpp index b7727e048..c0a08d652 100644 --- a/dialogs/speeddialog.cpp +++ b/dialogs/speeddialog.cpp @@ -32,6 +32,7 @@ #include "panels/panels.h" #include "panels/timeline.h" #include "undo/undo.h" +#include "undo/undostack.h" #include "effects/effect.h" #include "project/media.h" diff --git a/effects/effect.cpp b/effects/effect.cpp index 6197f7601..9b6df1ede 100644 --- a/effects/effect.cpp +++ b/effects/effect.cpp @@ -20,6 +20,19 @@ #include "effect.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include "panels/panels.h" #include "panels/viewer.h" #include "ui/viewerwidget.h" @@ -39,6 +52,7 @@ #include "project/clipboard.h" #include "global/config.h" #include "transition.h" +#include "undo/undostack.h" #include "effects/internal/transformeffect.h" #include "effects/internal/texteffect.h" @@ -54,19 +68,6 @@ #include "effects/internal/fillleftrighteffect.h" #include "effects/internal/frei0reffect.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - QVector effects; EffectPtr Effect::Create(Clip* c, const EffectMeta* em) { @@ -295,7 +296,7 @@ Effect::Effect(Clip* c, const EffectMeta *em) : } } } else if (reader.name() == "shader" && reader.isStartElement()) { - SetFlags(Flags() & ShaderFlag); + SetFlags(Flags() | ShaderFlag); const QXmlStreamAttributes& attributes = reader.attributes(); for (int i=0;i(x_field1->ui_element)->set_previous_value(); - if (y_field1 != nullptr) static_cast(y_field1->ui_element)->set_previous_value(); - if (x_field2 != nullptr) static_cast(x_field2->ui_element)->set_previous_value(); - if (y_field2 != nullptr) static_cast(y_field2->ui_element)->set_previous_value(); - */ -} - int EffectGizmo::get_point_count() { return world_pos.size(); } diff --git a/effects/effectgizmo.h b/effects/effectgizmo.h index 4fa854107..30332b21d 100644 --- a/effects/effectgizmo.h +++ b/effects/effectgizmo.h @@ -57,8 +57,6 @@ public: DoubleField* y_field2; double y_field_multi2; - void set_previous_value(); - QColor color; int get_point_count(); diff --git a/effects/effectrow.cpp b/effects/effectrow.cpp index bda3a1a76..713222927 100644 --- a/effects/effectrow.cpp +++ b/effects/effectrow.cpp @@ -25,6 +25,7 @@ #include #include "undo/undo.h" +#include "undo/undostack.h" #include "timeline/clip.h" #include "timeline/sequence.h" #include "panels/panels.h" diff --git a/effects/internal/cornerpineffect.cpp b/effects/internal/cornerpineffect.cpp index a80a504ef..db802503b 100644 --- a/effects/internal/cornerpineffect.cpp +++ b/effects/internal/cornerpineffect.cpp @@ -25,7 +25,7 @@ #include "global/debug.h" CornerPinEffect::CornerPinEffect(Clip* c, const EffectMeta *em) : Effect(c, em) { - SetFlags(Effect::CoordsFlag & Effect::ShaderFlag); + SetFlags(Effect::CoordsFlag | Effect::ShaderFlag); EffectRow* top_left = new EffectRow(this, tr("Top Left")); top_left_x = new DoubleField(top_left, "topleftx"); diff --git a/effects/keyframe.cpp b/effects/keyframe.cpp index c7518477b..d73518cc3 100644 --- a/effects/keyframe.cpp +++ b/effects/keyframe.cpp @@ -24,6 +24,7 @@ #include "effectfields.h" #include "undo/undo.h" +#include "undo/undostack.h" #include "panels/panels.h" EffectKeyframe::EffectKeyframe() diff --git a/global/global.cpp b/global/global.cpp index 9df7c5143..bdc5d08e0 100644 --- a/global/global.cpp +++ b/global/global.cpp @@ -20,15 +20,16 @@ #include "global/global.h" +#include +#include +#include +#include +#include #include "panels/panels.h" - #include "global/path.h" #include "global/config.h" - - #include "rendering/audio.h" - #include "dialogs/demonotice.h" #include "dialogs/preferencesdialog.h" #include "dialogs/exportdialog.h" @@ -36,18 +37,11 @@ #include "dialogs/aboutdialog.h" #include "dialogs/speeddialog.h" #include "dialogs/actionsearch.h" - #include "timeline/sequence.h" - #include "ui/mediaiconservice.h" #include "ui/mainwindow.h" #include "ui/updatenotification.h" - -#include -#include -#include -#include -#include +#include "undo/undostack.h" std::unique_ptr olive::Global; QString olive::ActiveProjectFilename; @@ -56,9 +50,12 @@ QString olive::AppName; OliveGlobal::OliveGlobal() { // sets current app name QString version_id; + + // if available, append the current Git hash (defined by `qmake` and the Makefile) #ifdef GITHASH version_id = QString(" | %1").arg(GITHASH); #endif + olive::AppName = QString("Olive (March 2019 | Alpha%1)").arg(version_id); // set the file filter used in all file dialogs pertaining to Olive project files. @@ -146,6 +143,9 @@ void OliveGlobal::load_translation_from_config() { void OliveGlobal::new_project() { if (can_close_project()) { + // clear graph editor + panel_graph_editor->set_row(nullptr); + // clear effects panel panel_effect_controls->Clear(true); @@ -288,6 +288,7 @@ void OliveGlobal::open_preferences() { void OliveGlobal::set_sequence(SequencePtr s) { + panel_graph_editor->set_row(nullptr); panel_effect_controls->Clear(true); olive::ActiveSequence = s; diff --git a/olive.pro b/olive.pro index 59319e67c..0ea4d7149 100644 --- a/olive.pro +++ b/olive.pro @@ -171,7 +171,8 @@ SOURCES += \ effects/fields/buttonfield.cpp \ ui/effectui.cpp \ effects/transition.cpp \ - ui/styling.cpp + ui/styling.cpp \ + undo/undostack.cpp HEADERS += \ ui/mainwindow.h \ @@ -296,7 +297,8 @@ HEADERS += \ effects/fields/colorfield.h \ effects/fields/combofield.h \ effects/transition.h \ - ui/styling.h + ui/styling.h \ + undo/undostack.h FORMS += diff --git a/panels/effectcontrols.cpp b/panels/effectcontrols.cpp index dacdd7322..dcc83bfbf 100644 --- a/panels/effectcontrols.cpp +++ b/panels/effectcontrols.cpp @@ -39,6 +39,7 @@ #include "ui/collapsiblewidget.h" #include "timeline/sequence.h" #include "undo/undo.h" +#include "undo/undostack.h" #include "panels/project.h" #include "panels/timeline.h" #include "panels/viewer.h" diff --git a/panels/project.cpp b/panels/project.cpp index a609c5147..e5c3fbaa0 100644 --- a/panels/project.cpp +++ b/panels/project.cpp @@ -25,6 +25,7 @@ #include "rendering/renderfunctions.h" #include "project/previewgenerator.h" #include "undo/undo.h" +#include "undo/undostack.h" #include "ui/mainwindow.h" #include "global/config.h" #include "rendering/cacher.h" @@ -606,7 +607,9 @@ void Project::delete_selected_media() { // remove if (remove) { + panel_graph_editor->set_row(nullptr); panel_effect_controls->Clear(true); + if (olive::ActiveSequence != nullptr) olive::ActiveSequence->selections.clear(); // remove media and parents @@ -1015,6 +1018,9 @@ void Project::delete_clips_using_selected_media() { } void Project::clear() { + // clear graph editor + panel_graph_editor->set_row(nullptr); + // clear effects cache panel_effect_controls->Clear(true); diff --git a/panels/timeline.cpp b/panels/timeline.cpp index 06d41798b..9a3732db1 100644 --- a/panels/timeline.cpp +++ b/panels/timeline.cpp @@ -37,6 +37,7 @@ #include "ui/flowlayout.h" #include "ui/cursors.h" #include "ui/mainwindow.h" +#include "undo/undostack.h" #include "global/debug.h" #include @@ -450,6 +451,7 @@ void Timeline::nest() { create_ghosts_from_media(olive::ActiveSequence.get(), earliest_point, media_list); add_clips_from_ghosts(ca, olive::ActiveSequence.get()); + panel_graph_editor->set_row(nullptr); panel_effect_controls->Clear(true); olive::ActiveSequence->selections.clear(); @@ -680,6 +682,7 @@ void Timeline::toggle_enable_on_selected_clips() { void Timeline::delete_selection(QVector& selections, bool ripple_delete) { if (selections.size() > 0) { + panel_graph_editor->set_row(nullptr); panel_effect_controls->Clear(true); ComboAction* ca = new ComboAction(); @@ -1014,6 +1017,8 @@ bool selection_contains_transition(const Selection& s, Clip* c, int type) { void Timeline::delete_areas_and_relink(ComboAction* ca, QVector& areas, bool deselect_areas) { clean_up_selections(areas); + + panel_graph_editor->set_row(nullptr); panel_effect_controls->Clear(true); QVector pre_clips; diff --git a/panels/viewer.cpp b/panels/viewer.cpp index e31e0cbea..9b1685bb5 100644 --- a/panels/viewer.cpp +++ b/panels/viewer.cpp @@ -31,6 +31,7 @@ #include "project/footage.h" #include "project/media.h" #include "undo/undo.h" +#include "undo/undostack.h" #include "ui/audiomonitor.h" #include "rendering/renderfunctions.h" #include "ui/viewercontainer.h" @@ -852,9 +853,13 @@ void Viewer::clean_created_seq() { if (created_sequence) { // TODO delete undo commands referencing this sequence to avoid crashes - /*for (int i=0;i +#include +#include +#include +#include +#include +#include + #include "ui/menuhelper.h" #include "panels/panels.h" #include "project/media.h" @@ -36,15 +44,7 @@ #include "ui/viewerwidget.h" #include "project/proxygenerator.h" #include "ui/mainwindow.h" - -#include -#include -#include -#include -#include -#include - -#include +#include "undo/undostack.h" SourcesCommon::SourcesCommon(Project* parent) : editing_item(nullptr), diff --git a/timeline/marker.cpp b/timeline/marker.cpp index a05985741..afcf495a2 100644 --- a/timeline/marker.cpp +++ b/timeline/marker.cpp @@ -22,6 +22,7 @@ #include "global/config.h" #include "undo/undo.h" +#include "undo/undostack.h" #include "ui/mainwindow.h" #include "timeline/sequence.h" #include "timeline/clip.h" @@ -59,11 +60,11 @@ void set_marker_internal(Sequence* seq, const QVector& clips) { // if (config.set_name_with_marker) is false (set above), ask for a marker name if (!add_marker) { - QInputDialog d(olive::MainWindow); + QInputDialog d(olive::MainWindow); d.setWindowTitle(QCoreApplication::translate("Marker", "Set Marker")); d.setLabelText(clips.size() > 0 - ? QCoreApplication::translate("Marker", "Set clip marker name:") - : QCoreApplication::translate("Marker", "Set sequence marker name:")); + ? QCoreApplication::translate("Marker", "Set clip marker name:") + : QCoreApplication::translate("Marker", "Set sequence marker name:")); d.setInputMode(QInputDialog::TextInput); add_marker = (d.exec() == QDialog::Accepted); marker_name = d.textValue(); @@ -78,10 +79,10 @@ void set_marker_internal(Sequence* seq, const QVector& clips) { // add a marker action for each clip foreach (int i, clips) { - ClipPtr c = seq->clips.at(i); + ClipPtr c = seq->clips.at(i); ca->append(new AddMarkerAction(&c->get_markers(), - seq->playhead - c->timeline_in() + c->clip_in(), - marker_name)); + seq->playhead - c->timeline_in() + c->clip_in(), + marker_name)); } } else { @@ -110,7 +111,7 @@ void set_marker_internal(Sequence* seq, const QVector& clips) { // push action - olive::UndoStack.push(ca); + olive::UndoStack.push(ca); // redraw UI for new markers update_ui(false); diff --git a/timeline/marker.h b/timeline/marker.h index 285f56773..abbb27e0a 100644 --- a/timeline/marker.h +++ b/timeline/marker.h @@ -31,8 +31,8 @@ class Sequence; using SequencePtr = std::shared_ptr; struct Marker { - long frame; - QString name; + long frame; + QString name; }; void draw_marker(QPainter& p, int x, int y, int bottom, bool selected); diff --git a/timeline/sequence.cpp b/timeline/sequence.cpp index 6cd2967f3..6754ef4da 100644 --- a/timeline/sequence.cpp +++ b/timeline/sequence.cpp @@ -25,12 +25,13 @@ #include "panels/panels.h" #include "global/debug.h" -Sequence::Sequence() { - playhead = 0; - using_workarea = false; - workarea_in = 0; - workarea_out = 0; - wrapper_sequence = false; +Sequence::Sequence() : + playhead(0), + using_workarea(false), + workarea_in(0), + workarea_out(0), + wrapper_sequence(false) +{ } Sequence::~Sequence() {} diff --git a/ui/checkboxex.cpp b/ui/checkboxex.cpp index b42c7159e..0682e8b52 100644 --- a/ui/checkboxex.cpp +++ b/ui/checkboxex.cpp @@ -20,6 +20,7 @@ #include "checkboxex.h" +#include "undo/undostack.h" #include "undo/undo.h" CheckboxEx::CheckboxEx(QWidget* parent) : QCheckBox(parent) { diff --git a/ui/graphview.cpp b/ui/graphview.cpp index 7cade8cda..e955db06a 100644 --- a/ui/graphview.cpp +++ b/ui/graphview.cpp @@ -33,6 +33,7 @@ #include "timeline/sequence.h" #include "ui/keyframedrawing.h" #include "undo/undo.h" +#include "undo/undostack.h" #include "effects/effect.h" #include "timeline/clip.h" #include "ui/rectangleselect.h" diff --git a/ui/keyframeview.cpp b/ui/keyframeview.cpp index 7e9bff745..55b0d6b18 100644 --- a/ui/keyframeview.cpp +++ b/ui/keyframeview.cpp @@ -20,6 +20,10 @@ #include "keyframeview.h" +#include +#include +#include + #include "effects/effect.h" #include "ui/collapsiblewidget.h" #include "panels/panels.h" @@ -27,6 +31,7 @@ #include "panels/timeline.h" #include "ui/timelineheader.h" #include "undo/undo.h" +#include "undo/undostack.h" #include "panels/viewer.h" #include "ui/viewerwidget.h" #include "timeline/sequence.h" @@ -38,10 +43,6 @@ #include "effects/keyframe.h" #include "ui/graphview.h" -#include -#include -#include - KeyframeView::KeyframeView(QWidget *parent) : QWidget(parent), visible_in(0), diff --git a/ui/mainwindow.cpp b/ui/mainwindow.cpp index c06ec97b2..d70bda49b 100644 --- a/ui/mainwindow.cpp +++ b/ui/mainwindow.cpp @@ -20,35 +20,6 @@ #include "mainwindow.h" -#include "global/global.h" - -#include "ui/menuhelper.h" - -#include "project/projectelements.h" -#include "timeline/clip.h" - -#include "global/config.h" -#include "global/path.h" -#include "global/debug.h" - -#include "project/proxygenerator.h" -#include "project/projectfilter.h" - -#include "ui/sourcetable.h" -#include "ui/viewerwidget.h" -#include "ui/sourceiconview.h" -#include "ui/timelineheader.h" -#include "ui/icons.h" -#include "ui/cursors.h" -#include "ui/focusfilter.h" - -#include "panels/panels.h" - -#include "dialogs/debugdialog.h" - -#include "rendering/audio.h" -#include "rendering/renderfunctions.h" - #include #include #include @@ -65,7 +36,27 @@ #include #include -Q_DECLARE_METATYPE(ClipPtr); +#include "global/global.h" +#include "ui/menuhelper.h" +#include "project/projectelements.h" +#include "timeline/clip.h" +#include "global/config.h" +#include "global/path.h" +#include "global/debug.h" +#include "project/proxygenerator.h" +#include "project/projectfilter.h" +#include "ui/sourcetable.h" +#include "ui/viewerwidget.h" +#include "ui/sourceiconview.h" +#include "ui/timelineheader.h" +#include "ui/icons.h" +#include "ui/cursors.h" +#include "ui/focusfilter.h" +#include "panels/panels.h" +#include "dialogs/debugdialog.h" +#include "rendering/audio.h" +#include "rendering/renderfunctions.h" +#include "undo/undostack.h" MainWindow* olive::MainWindow; @@ -982,6 +973,7 @@ void MainWindow::closeEvent(QCloseEvent *e) { // stop proxy generator thread olive::proxy_generator.cancel(); + panel_graph_editor->set_row(nullptr); panel_effect_controls->Clear(true); olive::Global->set_sequence(nullptr); diff --git a/ui/menuhelper.cpp b/ui/menuhelper.cpp index 859f5e493..5aea11144 100644 --- a/ui/menuhelper.cpp +++ b/ui/menuhelper.cpp @@ -122,15 +122,21 @@ void MenuHelper::make_clip_functions_menu(QMenu *parent) { parent->addAction(nest_); } -void MenuHelper::make_edit_functions_menu(QMenu *parent) { - parent->addAction(cut_); - parent->addAction(copy_); +void MenuHelper::make_edit_functions_menu(QMenu *parent, bool objects_are_selected) { + if (objects_are_selected) { + parent->addAction(cut_); + parent->addAction(copy_); + } + parent->addAction(paste_); parent->addAction(paste_insert_); - parent->addAction(duplicate_); - parent->addAction(delete_); - parent->addAction(ripple_delete_); - parent->addAction(split_); + + if (objects_are_selected) { + parent->addAction(duplicate_); + parent->addAction(delete_); + parent->addAction(ripple_delete_); + parent->addAction(split_); + } } void MenuHelper::set_bool_action_checked(QAction *a) { diff --git a/ui/menuhelper.h b/ui/menuhelper.h index e1a14d0d9..9e1783b3e 100644 --- a/ui/menuhelper.h +++ b/ui/menuhelper.h @@ -75,8 +75,13 @@ public: * @param parent * * The menu to add items to. + * + * @param objects_are_selected + * + * Some extra functions may be hidden in the event no clip is actually selected. Set this to **FALSE** to hide those + * functions. */ - void make_edit_functions_menu(QMenu* parent); + void make_edit_functions_menu(QMenu* parent, bool objects_are_selected = true); /** * @brief Sets the checked state of a menu item based on a Boolean variable. diff --git a/ui/timelineheader.cpp b/ui/timelineheader.cpp index de9e71902..c95b56e4c 100644 --- a/ui/timelineheader.cpp +++ b/ui/timelineheader.cpp @@ -20,6 +20,13 @@ #include "timelineheader.h" +#include +#include +#include +#include +#include +#include + #include "mainwindow.h" #include "panels/panels.h" #include "panels/timeline.h" @@ -31,13 +38,7 @@ #include "global/global.h" #include "ui/menuhelper.h" #include "global/debug.h" - -#include -#include -#include -#include -#include -#include +#include "undo/undostack.h" #define CLICK_RANGE 5 #define PLAYHEAD_SIZE 6 diff --git a/ui/timelinewidget.cpp b/ui/timelinewidget.cpp index af6f142c8..8087085d3 100644 --- a/ui/timelinewidget.cpp +++ b/ui/timelinewidget.cpp @@ -20,32 +20,6 @@ #include "timelinewidget.h" -#include "global/global.h" -#include "panels/panels.h" -#include "project/projectelements.h" - -#include "rendering/audio.h" -#include "global/config.h" -#include "ui/sourcetable.h" -#include "ui/sourceiconview.h" -#include "undo/undo.h" -#include "ui/viewerwidget.h" -#include "ui/resizablescrollbar.h" -#include "dialogs/newsequencedialog.h" -#include "mainwindow.h" -#include "ui/rectangleselect.h" -#include "rendering/renderfunctions.h" -#include "ui/cursors.h" -#include "ui/menuhelper.h" -#include "ui/focusfilter.h" -#include "dialogs/clippropertiesdialog.h" -#include "global/debug.h" - -#include "effects/effect.h" - -#include "effects/internal/solideffect.h" -#include "effects/internal/texteffect.h" - #include #include #include @@ -61,6 +35,30 @@ #include #include +#include "global/global.h" +#include "panels/panels.h" +#include "project/projectelements.h" +#include "rendering/audio.h" +#include "global/config.h" +#include "ui/sourcetable.h" +#include "ui/sourceiconview.h" +#include "undo/undo.h" +#include "undo/undostack.h" +#include "ui/viewerwidget.h" +#include "ui/resizablescrollbar.h" +#include "dialogs/newsequencedialog.h" +#include "mainwindow.h" +#include "ui/rectangleselect.h" +#include "rendering/renderfunctions.h" +#include "ui/cursors.h" +#include "ui/menuhelper.h" +#include "ui/focusfilter.h" +#include "dialogs/clippropertiesdialog.h" +#include "global/debug.h" +#include "effects/effect.h" +#include "effects/internal/solideffect.h" +#include "effects/internal/texteffect.h" + #define MAX_TEXT_WIDTH 20 #define TRANSITION_BETWEEN_RANGE 40 @@ -90,8 +88,6 @@ void TimelineWidget::show_context_menu(const QPoint& pos) { QMenu menu(this); - // TODO replace with Olive::MenuHelper::make_edit_functions_menu() without losing functionality - QAction* undoAction = menu.addAction(tr("&Undo")); QAction* redoAction = menu.addAction(tr("&Redo")); connect(undoAction, SIGNAL(triggered(bool)), olive::Global.get(), SLOT(undo())); @@ -103,13 +99,7 @@ void TimelineWidget::show_context_menu(const QPoint& pos) { // collect all the selected clips QVector selected_clips = olive::ActiveSequence->SelectedClips(); - if (!selected_clips.isEmpty()) { - // clips are selected - menu.addAction(tr("C&ut"), &olive::FocusFilter, SLOT(cut())); - menu.addAction(tr("Cop&y"), &olive::FocusFilter, SLOT(copy())); - } - - menu.addAction(tr("&Paste"), olive::Global.get(), SLOT(paste())); + olive::MenuHelper.make_edit_functions_menu(&menu, !selected_clips.isEmpty()); if (selected_clips.isEmpty()) { // no clips are selected @@ -119,7 +109,7 @@ void TimelineWidget::show_context_menu(const QPoint& pos) { panel_timeline->cursor_track = getTrackFromScreenPoint(pos.y()); if (panel_timeline->can_ripple_empty_space(panel_timeline->cursor_frame, panel_timeline->cursor_track)) { - QAction* ripple_delete_action = menu.addAction(tr("R&ipple Delete")); + QAction* ripple_delete_action = menu.addAction(tr("R&ipple Delete Empty Space")); connect(ripple_delete_action, SIGNAL(triggered(bool)), panel_timeline, SLOT(ripple_delete_empty_space())); } @@ -128,7 +118,9 @@ void TimelineWidget::show_context_menu(const QPoint& pos) { } if (!selected_clips.isEmpty()) { + menu.addSeparator(); + menu.addAction(tr("&Speed/Duration"), olive::Global.get(), SLOT(open_speed_dialog())); QAction* autoscaleAction = menu.addAction(tr("Auto-s&cale"), this, SLOT(toggle_autoscale())); @@ -277,9 +269,10 @@ void TimelineWidget::dragEnterEvent(QDragEnterEvent *event) { panel_project->process_file_list(file_list); for (int i=0;ilast_imported_media.size();i++) { + Footage* f = panel_project->last_imported_media.at(i)->to_footage(); + // waits for media to have a duration // TODO would be much nicer if this was multithreaded - Footage* f = panel_project->last_imported_media.at(i)->to_footage(); f->ready_lock.lock(); f->ready_lock.unlock(); diff --git a/ui/viewerwidget.cpp b/ui/viewerwidget.cpp index 37a24d540..cfeceb1f2 100644 --- a/ui/viewerwidget.cpp +++ b/ui/viewerwidget.cpp @@ -326,10 +326,6 @@ void ViewerWidget::mousePressEvent(QMouseEvent* event) { gizmo_y_mvmt = 0; selected_gizmo = get_gizmo_from_mouse(event->pos().x(), event->pos().y()); - - if (selected_gizmo != nullptr) { - selected_gizmo->set_previous_value(); - } } dragging = true; } diff --git a/undo/undo.cpp b/undo/undo.cpp index 23d3429bc..172755afb 100644 --- a/undo/undo.cpp +++ b/undo/undo.cpp @@ -42,8 +42,6 @@ #include "project/previewgenerator.h" #include "ui/mainwindow.h" -QUndoStack olive::UndoStack; - MoveClipAction::MoveClipAction(Clip *c, long iin, long iout, long iclip_in, int itrack, bool irelative) { clip = c; @@ -354,6 +352,7 @@ AddClipCommand::~AddClipCommand() {} void AddClipCommand::doUndo() { // clear effects panel + panel_graph_editor->set_row(nullptr); panel_effect_controls->Clear(true); for (int i=0;iupdate_tooltip(); for (int i=0;iclips.size();i++) { - if (seq->clips.at(i) != nullptr) seq->clips.at(i)->refresh(); + if (seq->clips.at(i) != nullptr) { + seq->clips.at(i)->refresh(); + } } if (olive::ActiveSequence == seq) { diff --git a/undo/undo.h b/undo/undo.h index 11853f818..d55ed478d 100644 --- a/undo/undo.h +++ b/undo/undo.h @@ -53,10 +53,6 @@ struct EffectMeta; class EffectRow; class EffectField; -namespace olive { -extern QUndoStack UndoStack; -} - class OliveAction : public QUndoCommand { public: OliveAction(bool iset_window_modified = true); diff --git a/undo/undostack.cpp b/undo/undostack.cpp new file mode 100644 index 000000000..2edc0f0b1 --- /dev/null +++ b/undo/undostack.cpp @@ -0,0 +1,3 @@ +#include "undostack.h" + +QUndoStack olive::UndoStack; diff --git a/undo/undostack.h b/undo/undostack.h new file mode 100644 index 000000000..72086a823 --- /dev/null +++ b/undo/undostack.h @@ -0,0 +1,10 @@ +#ifndef UNDOSTACK_H +#define UNDOSTACK_H + +#include + +namespace olive { +extern QUndoStack UndoStack; +} + +#endif // UNDOSTACK_H