53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
# Copyright (C) 2016-2020 by Nathan Lovato, Daniel Oakey, Razvan Radulescu, and contributors
|
|
import bpy
|
|
|
|
from .utils.functions import get_mouse_frame_and_channel
|
|
from .utils.global_settings import SequenceTypes
|
|
from .utils.doc import doc_name, doc_idname, doc_brief, doc_description
|
|
|
|
|
|
class POWER_SEQUENCER_OT_grab(bpy.types.Operator):
|
|
"""
|
|
*brief* Grab and move sequences. Extends Blender's built-in grab tool
|
|
|
|
|
|
Grab and move sequences. If you have no strips selected, it automatically
|
|
finds the strip closest to the mouse and selects it. If you only select
|
|
one or multiple crossfades, selects the handles on either side of the
|
|
crossfades before moving sequences, using POWER_SEQUENCER_OT_crossfade_edit
|
|
"""
|
|
|
|
doc = {
|
|
"name": doc_name(__qualname__),
|
|
"demo": "",
|
|
"description": doc_description(__doc__),
|
|
"shortcuts": [({"type": "G", "value": "PRESS"}, {}, "")],
|
|
"keymap": "Sequencer",
|
|
}
|
|
bl_idname = doc_idname(__qualname__)
|
|
bl_label = doc["name"]
|
|
bl_description = doc_brief(doc["description"])
|
|
bl_options = {"REGISTER", "UNDO"}
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
return context.selected_sequences
|
|
|
|
def invoke(self, context, event):
|
|
frame, channel = get_mouse_frame_and_channel(context, event)
|
|
if not context.selected_sequences:
|
|
bpy.ops.power_sequencer.select_closest_to_mouse(frame=frame, channel=channel)
|
|
return self.execute(context)
|
|
|
|
def execute(self, context):
|
|
if len(context.selected_sequences) == 0:
|
|
return {"FINISHED"}
|
|
|
|
strip = context.selected_sequences[0]
|
|
if len(context.selected_sequences) == 1 and strip.type in SequenceTypes.TRANSITION:
|
|
context.scene.sequence_editor.active_strip = strip
|
|
return bpy.ops.power_sequencer.crossfade_edit()
|
|
else:
|
|
return bpy.ops.transform.seq_slide("INVOKE_DEFAULT")
|