Files
test/source/blender/editors/space_sequencer/sequencer_ops.cc

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

189 lines
7.8 KiB
C++
Raw Normal View History

/* SPDX-FileCopyrightText: 2008 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup spseq
2011-02-27 20:29:51 +00:00
*/
#include <cstdlib>
#include "DNA_space_types.h"
#include "WM_api.hh"
#include "WM_types.hh"
#include "ED_sequencer.hh"
#include "sequencer_intern.hh"
/* ************************** registration **********************************/
void sequencer_operatortypes()
{
/* `sequencer_edit.cc` */
WM_operatortype_append(SEQUENCER_OT_split);
WM_operatortype_append(SEQUENCER_OT_slip);
WM_operatortype_append(SEQUENCER_OT_mute);
WM_operatortype_append(SEQUENCER_OT_unmute);
WM_operatortype_append(SEQUENCER_OT_lock);
WM_operatortype_append(SEQUENCER_OT_unlock);
VSE: ability to connect and disconnect strips in the VSE. Adds the ability to connect and disconnect strips in the VSE. - Connected strips have an icon indicating their status, and attempting to select one connected strip selects all other connected strips in that chain. - If the user attempts to connect a strip that is already connected to other strips, that strip will disconnect itself from others before connecting to new strips. - Preview selection also works in bulk if multiple video strips are connected together in the timeline. - When adding new strips from the Add menu or the File Browser, strips from the same file are connected by default. There's an option to turn this off in Editing > Video Sequencer user preferences. - It is possible to individually tweak strips/handles and ignore connections with Alt+Click. - This shortcut overrides the old keymap item for "Linked Handle" selection. The property still exists if people want to use that shortcut for its old purpose. - To make sure that connections remain valid even after duplication, I've added a condition to `seq_new_fix_links_recursive` that also updates connections using the `seq->tmp` var. (A note -- I've updated the comment for this field in `DNA_sequence_types.h` because the var is only used for duplication now. It was once present in `select_more_less_seq__internal` to be used for linked selection but is gone now). - There are also functions to cut one-way links and make sure that all strips are bidirectionally connected after duplicating. Pull Request: https://projects.blender.org/blender/blender/pulls/124333
2024-08-22 14:54:42 +02:00
WM_operatortype_append(SEQUENCER_OT_connect);
WM_operatortype_append(SEQUENCER_OT_disconnect);
WM_operatortype_append(SEQUENCER_OT_reload);
WM_operatortype_append(SEQUENCER_OT_refresh_all);
2010-07-03 22:25:22 +00:00
WM_operatortype_append(SEQUENCER_OT_reassign_inputs);
WM_operatortype_append(SEQUENCER_OT_swap_inputs);
WM_operatortype_append(SEQUENCER_OT_duplicate);
WM_operatortype_append(SEQUENCER_OT_delete);
WM_operatortype_append(SEQUENCER_OT_offset_clear);
2009-04-12 20:32:42 +00:00
WM_operatortype_append(SEQUENCER_OT_images_separate);
WM_operatortype_append(SEQUENCER_OT_meta_toggle);
WM_operatortype_append(SEQUENCER_OT_meta_make);
WM_operatortype_append(SEQUENCER_OT_meta_separate);
WM_operatortype_append(SEQUENCER_OT_gap_remove);
WM_operatortype_append(SEQUENCER_OT_gap_insert);
WM_operatortype_append(SEQUENCER_OT_snap);
WM_operatortype_append(SEQUENCER_OT_strip_jump);
WM_operatortype_append(SEQUENCER_OT_swap);
WM_operatortype_append(SEQUENCER_OT_swap_data);
WM_operatortype_append(SEQUENCER_OT_rendersize);
WM_operatortype_append(SEQUENCER_OT_export_subtitles);
WM_operatortype_append(SEQUENCER_OT_copy);
WM_operatortype_append(SEQUENCER_OT_paste);
WM_operatortype_append(SEQUENCER_OT_rebuild_proxy);
WM_operatortype_append(SEQUENCER_OT_enable_proxies);
WM_operatortype_append(SEQUENCER_OT_change_effect_input);
WM_operatortype_append(SEQUENCER_OT_change_effect_type);
WM_operatortype_append(SEQUENCER_OT_change_path);
WM_operatortype_append(SEQUENCER_OT_change_scene);
WM_operatortype_append(SEQUENCER_OT_set_range_to_strips);
WM_operatortype_append(SEQUENCER_OT_strip_transform_clear);
WM_operatortype_append(SEQUENCER_OT_strip_transform_fit);
WM_operatortype_append(SEQUENCER_OT_strip_color_tag_set);
WM_operatortype_append(SEQUENCER_OT_cursor_set);
WM_operatortype_append(SEQUENCER_OT_scene_frame_range_update);
/* `sequencer_retiming.cc` */
WM_operatortype_append(SEQUENCER_OT_retiming_reset);
VSE: Improve retiming UI Currently retiming is quite awkward, when you need to retime multiple strips strips in sync. It is possible to use meta strips, but this is still not great. This is resolved by implementing selection. General changes: Gizmos are removed, since they are designed to operate only on active strip and don't support selection. Transform operator code is implemented for retiming data, which allows more sophisticated manipulation. Instead of drawing marker-like symbols, keyframes are drawn to represent retiming data. Retiming handles are now called keys. To have consistent names, DNA structures have been renamed. Retiming data is drawn on strip as overlay. UI changes: Retiming tool is removed. To edit retiming data, press Ctrl + R, select a key and move it. When retiming is edited, retiming menu and context menu shows more relevant features, like making transitions. Strip and retiming key selection can not be combined. It is possible to use box select operator to select keys, if any key is selected. Otherwise strips are selected. Adding retiming keys is possible with I shortcut or from menu. Retiming keys are always drawn at strip left and right boundary. These keys do not really exist until they are selected. This is to simplify retiming of strips that are resized. These keys are called "fake keys" in code. API changes: Functions, properties and types related to retiming handles are renamed to retiming keys: retiming_handle_add() -> retiming_key_add() retiming_handle_move() -> retiming_key_move() retiming_handle_remove() -> retiming_key_remove() retiming_handles -> retiming_keys RetimingHandle -> RetimingKey Retiming editing "mode" is activated by setting `Sequence.show_retiming_keys`. Pull Request: https://projects.blender.org/blender/blender/pulls/109044
2023-09-27 01:45:59 +02:00
WM_operatortype_append(SEQUENCER_OT_retiming_show);
WM_operatortype_append(SEQUENCER_OT_retiming_key_add);
WM_operatortype_append(SEQUENCER_OT_retiming_freeze_frame_add);
WM_operatortype_append(SEQUENCER_OT_retiming_transition_add);
WM_operatortype_append(SEQUENCER_OT_retiming_segment_speed_set);
WM_operatortype_append(SEQUENCER_OT_retiming_key_delete);
/* `sequencer_text_edit.cc` */
WM_operatortype_append(SEQUENCER_OT_text_cursor_move);
WM_operatortype_append(SEQUENCER_OT_text_insert);
WM_operatortype_append(SEQUENCER_OT_text_delete);
WM_operatortype_append(SEQUENCER_OT_text_line_break);
WM_operatortype_append(SEQUENCER_OT_text_select_all);
WM_operatortype_append(SEQUENCER_OT_text_deselect_all);
WM_operatortype_append(SEQUENCER_OT_text_edit_mode_toggle);
WM_operatortype_append(SEQUENCER_OT_text_cursor_set);
WM_operatortype_append(SEQUENCER_OT_text_edit_copy);
WM_operatortype_append(SEQUENCER_OT_text_edit_paste);
WM_operatortype_append(SEQUENCER_OT_text_edit_cut);
/* `sequencer_select.cc` */
WM_operatortype_append(SEQUENCER_OT_select_all);
WM_operatortype_append(SEQUENCER_OT_select);
WM_operatortype_append(SEQUENCER_OT_select_handle);
WM_operatortype_append(SEQUENCER_OT_select_more);
WM_operatortype_append(SEQUENCER_OT_select_less);
WM_operatortype_append(SEQUENCER_OT_select_linked_pick);
WM_operatortype_append(SEQUENCER_OT_select_linked);
WM_operatortype_append(SEQUENCER_OT_select_handles);
WM_operatortype_append(SEQUENCER_OT_select_side);
WM_operatortype_append(SEQUENCER_OT_select_side_of_frame);
WM_operatortype_append(SEQUENCER_OT_select_box);
WM_operatortype_append(SEQUENCER_OT_select_grouped);
/* `sequencer_add.cc` */
2009-04-12 20:32:42 +00:00
WM_operatortype_append(SEQUENCER_OT_scene_strip_add);
WM_operatortype_append(SEQUENCER_OT_scene_strip_add_new);
WM_operatortype_append(SEQUENCER_OT_movieclip_strip_add);
2012-06-07 18:24:36 +00:00
WM_operatortype_append(SEQUENCER_OT_mask_strip_add);
2009-04-12 20:32:42 +00:00
WM_operatortype_append(SEQUENCER_OT_movie_strip_add);
WM_operatortype_append(SEQUENCER_OT_sound_strip_add);
WM_operatortype_append(SEQUENCER_OT_image_strip_add);
WM_operatortype_append(SEQUENCER_OT_effect_strip_add);
/* sequencer_modifiers.c */
WM_operatortype_append(SEQUENCER_OT_strip_modifier_add);
WM_operatortype_append(SEQUENCER_OT_strip_modifier_remove);
WM_operatortype_append(SEQUENCER_OT_strip_modifier_move);
WM_operatortype_append(SEQUENCER_OT_strip_modifier_copy);
WM_operatortype_append(SEQUENCER_OT_strip_modifier_equalizer_redefine);
/* sequencer_view.h */
WM_operatortype_append(SEQUENCER_OT_sample);
WM_operatortype_append(SEQUENCER_OT_view_all);
WM_operatortype_append(SEQUENCER_OT_view_frame);
WM_operatortype_append(SEQUENCER_OT_view_all_preview);
WM_operatortype_append(SEQUENCER_OT_view_zoom_ratio);
WM_operatortype_append(SEQUENCER_OT_view_selected);
WM_operatortype_append(SEQUENCER_OT_view_ghost_border);
/* `sequencer_channels_edit.cc` */
WM_operatortype_append(SEQUENCER_OT_rename_channel);
}
void sequencer_keymap(wmKeyConfig *keyconf)
{
/* Common items ------------------------------------------------------------------ */
WM_keymap_ensure(keyconf, "SequencerCommon", SPACE_SEQ, RGN_TYPE_WINDOW);
/* Strips Region --------------------------------------------------------------- */
WM_keymap_ensure(keyconf, "Sequencer", SPACE_SEQ, RGN_TYPE_WINDOW);
/* Preview Region ----------------------------------------------------------- */
WM_keymap_ensure(keyconf, "SequencerPreview", SPACE_SEQ, RGN_TYPE_WINDOW);
/* Channels Region ----------------------------------------------------------- */
WM_keymap_ensure(keyconf, "Sequencer Channels", SPACE_SEQ, RGN_TYPE_WINDOW);
}
void ED_operatormacros_sequencer()
{
wmOperatorType *ot;
ot = WM_operatortype_append_macro("SEQUENCER_OT_duplicate_move",
"Duplicate Strips",
"Duplicate selected strips and move them",
OPTYPE_UNDO | OPTYPE_REGISTER);
WM_operatortype_macro_define(ot, "SEQUENCER_OT_duplicate");
WM_operatortype_macro_define(ot, "TRANSFORM_OT_seq_slide");
ot = WM_operatortype_append_macro("SEQUENCER_OT_preview_duplicate_move",
"Duplicate Strips",
"Duplicate selected strips and move them",
OPTYPE_UNDO | OPTYPE_REGISTER);
WM_operatortype_macro_define(ot, "SEQUENCER_OT_duplicate");
WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
ot = WM_operatortype_append_macro("SEQUENCER_OT_retiming_add_freeze_frame_slide",
"Add Freeze Frame And Slide",
"Add freeze frame and move it",
OPTYPE_UNDO | OPTYPE_REGISTER);
WM_operatortype_macro_define(ot, "SEQUENCER_OT_retiming_freeze_frame_add");
WM_operatortype_macro_define(ot, "TRANSFORM_OT_seq_slide");
ot = WM_operatortype_append_macro(
"SEQUENCER_OT_retiming_add_transition_slide",
"Add Speed Transition And Slide",
"Add smooth transition between 2 retimed segments and change its duration",
OPTYPE_UNDO | OPTYPE_REGISTER);
WM_operatortype_macro_define(ot, "SEQUENCER_OT_retiming_transition_add");
WM_operatortype_macro_define(ot, "TRANSFORM_OT_seq_slide");
}