UI: VSE strip menu reorganization

Add Inputs and Transform submenus.
This commit is contained in:
Aaron Carlisle
2017-10-09 13:47:05 +11:00
committed by Campbell Barton
parent e360d003ea
commit e9d06f0866
2 changed files with 121 additions and 98 deletions

View File

@@ -21,10 +21,10 @@ import bpy
from bpy.types import Header, Menu, Panel from bpy.types import Header, Menu, Panel
from rna_prop_ui import PropertyPanel from rna_prop_ui import PropertyPanel
from bl_ui.properties_grease_pencil_common import ( from bl_ui.properties_grease_pencil_common import (
GreasePencilDataPanel, GreasePencilDataPanel,
GreasePencilPaletteColorPanel, GreasePencilPaletteColorPanel,
GreasePencilToolsPanel, GreasePencilToolsPanel,
) )
from bpy.app.translations import pgettext_iface as iface_ from bpy.app.translations import pgettext_iface as iface_
@@ -44,7 +44,7 @@ def draw_color_balance(layout, color_balance):
col.separator() col.separator()
col.prop(color_balance, "lift", text="") col.prop(color_balance, "lift", text="")
col.prop(color_balance, "invert_lift", text="Invert", icon='ARROW_LEFTRIGHT') col.prop(color_balance, "invert_lift", text="Invert", icon='ARROW_LEFTRIGHT')
split.template_color_picker(color_balance, "lift", value_slider=True, cubic=True) split.template_color_picker(color_balance, "lift", value_slider=True, cubic=True)
box = layout.box() box = layout.box()
split = box.split(percentage=0.35) split = box.split(percentage=0.35)
@@ -197,14 +197,18 @@ class SEQUENCER_MT_view(Menu):
layout.operator_context = 'INVOKE_DEFAULT' layout.operator_context = 'INVOKE_DEFAULT'
if is_preview: if is_preview:
layout.operator_context = 'INVOKE_REGION_PREVIEW' layout.operator_context = 'INVOKE_REGION_PREVIEW'
layout.operator("sequencer.view_all_preview", text="Fit Preview in Window") layout.operator("sequencer.view_all_preview", text="Fit Preview in window")
layout.separator() layout.separator()
ratios = ((1, 8), (1, 4), (1, 2), (1, 1), (2, 1), (4, 1), (8, 1)) ratios = ((1, 8), (1, 4), (1, 2), (1, 1), (2, 1), (4, 1), (8, 1))
for a, b in ratios: for a, b in ratios:
layout.operator("sequencer.view_zoom_ratio", text=iface_("Zoom %d:%d") % (a, b), translate=False).ratio = a / b layout.operator(
"sequencer.view_zoom_ratio",
text=iface_("Zoom %d:%d") % (a, b),
translate=False,
).ratio = a / b
layout.separator() layout.separator()
@@ -276,30 +280,6 @@ class SEQUENCER_MT_marker(Menu):
marker_menu_generic(layout) marker_menu_generic(layout)
class SEQUENCER_MT_change(Menu):
bl_label = "Change"
def draw(self, context):
layout = self.layout
strip = act_strip(context)
layout.operator_context = 'INVOKE_REGION_WIN'
layout.operator_menu_enum("sequencer.change_effect_input", "swap")
layout.operator_menu_enum("sequencer.change_effect_type", "type")
prop = layout.operator("sequencer.change_path", text="Path/Files")
if strip:
stype = strip.type
if stype == 'IMAGE':
prop.filter_image = True
elif stype == 'MOVIE':
prop.filter_movie = True
elif stype == 'SOUND':
prop.filter_sound = True
class SEQUENCER_MT_frame(Menu): class SEQUENCER_MT_frame(Menu):
bl_label = "Frame" bl_label = "Frame"
@@ -388,6 +368,60 @@ class SEQUENCER_MT_add_effect(Menu):
layout.operator("sequencer.effect_strip_add", text="Adjustment Layer").type = 'ADJUSTMENT' layout.operator("sequencer.effect_strip_add", text="Adjustment Layer").type = 'ADJUSTMENT'
class SEQUENCER_MT_strip_transform(Menu):
bl_label = "Transform"
def draw(self, context):
layout = self.layout
layout.operator("transform.transform", text="Grab/Move").mode = 'TRANSLATION'
layout.operator("transform.transform", text="Grab/Extend from Frame").mode = 'TIME_EXTEND'
layout.operator("sequencer.slip", text="Slip Strip Contents")
layout.separator()
layout.operator_menu_enum("sequencer.swap", "side")
layout.separator()
layout.operator("sequencer.gap_remove").all = False
layout.operator("sequencer.gap_insert")
class SEQUENCER_MT_strip_input(Menu):
bl_label = "Inputs"
def draw(self, context):
layout = self.layout
strip = act_strip(context)
layout.operator("sequencer.reload", text="Reload Strips")
layout.operator("sequencer.reload", text="Reload Strips and Adjust Length").adjust_length = True
prop = layout.operator("sequencer.change_path", text="Change Path/Files")
layout.operator("sequencer.swap_data", text="Swap Data")
if strip:
stype = strip.type
if stype == 'IMAGE':
prop.filter_image = True
elif stype == 'MOVIE':
prop.filter_movie = True
elif stype == 'SOUND':
prop.filter_sound = True
class SEQUENCER_MT_strip_lock_mute(Menu):
bl_label = "Lock/Mute"
def draw(self, context):
layout = self.layout
layout.operator("sequencer.lock")
layout.operator("sequencer.unlock")
layout.operator("sequencer.mute").unselected = False
layout.operator("sequencer.unmute").unselected = False
layout.operator("sequencer.mute", text="Mute Deselected Strips").unselected = True
class SEQUENCER_MT_strip(Menu): class SEQUENCER_MT_strip(Menu):
bl_label = "Strip" bl_label = "Strip"
@@ -396,79 +430,62 @@ class SEQUENCER_MT_strip(Menu):
layout.operator_context = 'INVOKE_REGION_WIN' layout.operator_context = 'INVOKE_REGION_WIN'
layout.operator("transform.transform", text="Grab/Move").mode = 'TRANSLATION' layout.operator("ed.undo")
layout.operator("transform.transform", text="Grab/Extend from Frame").mode = 'TIME_EXTEND' layout.operator("ed.redo")
layout.operator("sequencer.gap_remove").all = False layout.operator("ed.undo_history")
layout.operator("sequencer.gap_insert")
# uiItemO(layout, NULL, 0, "sequencer.strip_snap"); // TODO - add this operator
layout.separator() layout.separator()
layout.menu("SEQUENCER_MT_strip_transform")
layout.operator("sequencer.cut", text="Cut (Hard) at Frame").type = 'HARD' layout.operator("sequencer.snap")
layout.operator("sequencer.cut", text="Cut (Soft) at Frame").type = 'SOFT'
layout.operator("sequencer.slip", text="Slip Strip Contents")
layout.operator("sequencer.images_separate")
layout.operator("sequencer.offset_clear") layout.operator("sequencer.offset_clear")
layout.separator()
layout.operator("sequencer.duplicate_move")
layout.operator("sequencer.delete", text="Delete...")
layout.separator()
layout.operator("sequencer.cut", text="Cut (Hard) at frame").type = 'HARD'
layout.operator("sequencer.cut", text="Cut (Soft) at frame").type = 'SOFT'
layout.separator()
layout.operator("sequencer.deinterlace_selected_movies") layout.operator("sequencer.deinterlace_selected_movies")
layout.operator("sequencer.rebuild_proxy") layout.operator("sequencer.rebuild_proxy")
layout.separator()
layout.operator("sequencer.duplicate_move")
layout.operator("sequencer.delete")
strip = act_strip(context) strip = act_strip(context)
if strip: if strip:
stype = strip.type stype = strip.type
# XXX note strip.type is never equal to 'EFFECT', look at seq_type_items within rna_sequencer.c if stype in {
if stype == 'EFFECT': 'CROSS', 'ADD', 'SUBTRACT', 'ALPHA_OVER', 'ALPHA_UNDER',
pass 'GAMMA_CROSS', 'MULTIPLY', 'OVER_DROP', 'WIPE', 'GLOW',
# layout.separator() 'TRANSFORM', 'COLOR', 'SPEED', 'MULTICAM', 'ADJUSTMENT',
# layout.operator("sequencer.effect_change") 'GAUSSIAN_BLUR', 'TEXT',
# layout.operator("sequencer.effect_reassign_inputs") }:
elif stype == 'IMAGE':
layout.separator() layout.separator()
# layout.operator("sequencer.image_change") layout.operator_menu_enum("sequencer.change_effect_input", "swap")
layout.operator("sequencer.rendersize") layout.operator_menu_enum("sequencer.change_effect_type", "type")
elif stype == 'SCENE': layout.operator("sequencer.reassign_inputs")
pass layout.operator("sequencer.swap_inputs")
# layout.separator() elif stype in {'IMAGE', 'MOVIE'}:
# layout.operator("sequencer.scene_change", text="Change Scene")
elif stype == 'MOVIE':
layout.separator() layout.separator()
# layout.operator("sequencer.movie_change")
layout.operator("sequencer.rendersize") layout.operator("sequencer.rendersize")
layout.operator("sequencer.images_separate")
elif stype == 'SOUND': elif stype == 'SOUND':
layout.separator() layout.separator()
layout.operator("sequencer.crossfade_sounds") layout.operator("sequencer.crossfade_sounds")
elif stype == 'META':
layout.separator()
layout.operator("sequencer.meta_separate")
layout.separator() layout.separator()
layout.operator("sequencer.meta_make") layout.operator("sequencer.meta_make")
layout.operator("sequencer.meta_separate")
layout.separator() layout.separator()
layout.operator("sequencer.reload", text="Reload Strips") layout.menu("SEQUENCER_MT_strip_input")
layout.operator("sequencer.reload", text="Reload Strips and Adjust Length").adjust_length = True
layout.operator("sequencer.reassign_inputs")
layout.operator("sequencer.swap_inputs")
layout.separator() layout.separator()
layout.operator("sequencer.lock") layout.menu("SEQUENCER_MT_strip_lock_mute")
layout.operator("sequencer.unlock")
layout.operator("sequencer.mute").unselected = False
layout.operator("sequencer.unmute").unselected = False
layout.operator("sequencer.mute", text="Mute Deselected Strips").unselected = True
layout.operator("sequencer.snap")
layout.operator_menu_enum("sequencer.swap", "side")
layout.separator()
layout.operator("sequencer.swap_data")
layout.menu("SEQUENCER_MT_change")
class SequencerButtonsPanel: class SequencerButtonsPanel:
@@ -532,7 +549,6 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel, Panel):
row = layout.row() row = layout.row()
row.prop(strip, "mute", toggle=True, icon_only=True, icon='MUTE_IPO_OFF') row.prop(strip, "mute", toggle=True, icon_only=True, icon='MUTE_IPO_OFF')
col = layout.column(align=True) col = layout.column(align=True)
row = col.row(align=True) row = col.row(align=True)
@@ -582,10 +598,12 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
if not strip: if not strip:
return False return False
return strip.type in {'ADD', 'SUBTRACT', 'ALPHA_OVER', 'ALPHA_UNDER', return strip.type in {
'CROSS', 'GAMMA_CROSS', 'MULTIPLY', 'OVER_DROP', 'ADD', 'SUBTRACT', 'ALPHA_OVER', 'ALPHA_UNDER',
'WIPE', 'GLOW', 'TRANSFORM', 'COLOR', 'SPEED', 'CROSS', 'GAMMA_CROSS', 'MULTIPLY', 'OVER_DROP',
'MULTICAM', 'GAUSSIAN_BLUR', 'TEXT'} 'WIPE', 'GLOW', 'TRANSFORM', 'COLOR', 'SPEED',
'MULTICAM', 'GAUSSIAN_BLUR', 'TEXT',
}
def draw(self, context): def draw(self, context):
layout = self.layout layout = self.layout
@@ -700,7 +718,6 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
col.separator() col.separator()
col.label(text="Two or more channels are needed below this strip", icon='INFO') col.label(text="Two or more channels are needed below this strip", icon='INFO')
elif strip.type == 'TEXT': elif strip.type == 'TEXT':
col = layout.column() col = layout.column()
col.prop(strip, "text") col.prop(strip, "text")
@@ -748,11 +765,13 @@ class SEQUENCER_PT_input(SequencerButtonsPanel, Panel):
if not strip: if not strip:
return False return False
return strip.type in {'MOVIE', 'IMAGE', 'SCENE', 'MOVIECLIP', 'META', return strip.type in {
'ADD', 'SUBTRACT', 'ALPHA_OVER', 'ALPHA_UNDER', 'MOVIE', 'IMAGE', 'SCENE', 'MOVIECLIP', 'META',
'CROSS', 'GAMMA_CROSS', 'MULTIPLY', 'OVER_DROP', 'ADD', 'SUBTRACT', 'ALPHA_OVER', 'ALPHA_UNDER',
'WIPE', 'GLOW', 'TRANSFORM', 'COLOR', 'CROSS', 'GAMMA_CROSS', 'MULTIPLY', 'OVER_DROP',
'MULTICAM', 'SPEED', 'ADJUSTMENT'} 'WIPE', 'GLOW', 'TRANSFORM', 'COLOR',
'MULTICAM', 'SPEED', 'ADJUSTMENT',
}
def draw(self, context): def draw(self, context):
layout = self.layout layout = self.layout
@@ -985,11 +1004,13 @@ class SEQUENCER_PT_filter(SequencerButtonsPanel, Panel):
if not strip: if not strip:
return False return False
return strip.type in {'MOVIE', 'IMAGE', 'SCENE', 'MOVIECLIP', 'MASK', return strip.type in {
'META', 'ADD', 'SUBTRACT', 'ALPHA_OVER', 'MOVIE', 'IMAGE', 'SCENE', 'MOVIECLIP', 'MASK',
'ALPHA_UNDER', 'CROSS', 'GAMMA_CROSS', 'MULTIPLY', 'META', 'ADD', 'SUBTRACT', 'ALPHA_OVER',
'OVER_DROP', 'WIPE', 'GLOW', 'TRANSFORM', 'COLOR', 'ALPHA_UNDER', 'CROSS', 'GAMMA_CROSS', 'MULTIPLY',
'MULTICAM', 'SPEED', 'ADJUSTMENT'} 'OVER_DROP', 'WIPE', 'GLOW', 'TRANSFORM', 'COLOR',
'MULTICAM', 'SPEED', 'ADJUSTMENT',
}
def draw(self, context): def draw(self, context):
layout = self.layout layout = self.layout
@@ -1269,11 +1290,13 @@ classes = (
SEQUENCER_MT_view_toggle, SEQUENCER_MT_view_toggle,
SEQUENCER_MT_select, SEQUENCER_MT_select,
SEQUENCER_MT_marker, SEQUENCER_MT_marker,
SEQUENCER_MT_change,
SEQUENCER_MT_frame, SEQUENCER_MT_frame,
SEQUENCER_MT_add, SEQUENCER_MT_add,
SEQUENCER_MT_add_effect, SEQUENCER_MT_add_effect,
SEQUENCER_MT_strip, SEQUENCER_MT_strip,
SEQUENCER_MT_strip_transform,
SEQUENCER_MT_strip_input,
SEQUENCER_MT_strip_lock_mute,
SEQUENCER_PT_edit, SEQUENCER_PT_edit,
SEQUENCER_PT_effect, SEQUENCER_PT_effect,
SEQUENCER_PT_input, SEQUENCER_PT_input,

View File

@@ -1232,7 +1232,7 @@ static int sequencer_snap_invoke(bContext *C, wmOperator *op, const wmEvent *UNU
void SEQUENCER_OT_snap(struct wmOperatorType *ot) void SEQUENCER_OT_snap(struct wmOperatorType *ot)
{ {
/* identifiers */ /* identifiers */
ot->name = "Snap Strips"; ot->name = "Snap Strips to Frame";
ot->idname = "SEQUENCER_OT_snap"; ot->idname = "SEQUENCER_OT_snap";
ot->description = "Frame where selected strips will be snapped"; ot->description = "Frame where selected strips will be snapped";