UI: Further tweaks to Sequencer sidebar:
- Move strip name to the top (easier to see which strip you are adjusting, and more consistent with other areas) - Move Mute next to this, since it affects everything, both audio and video, and completely disables the clip - Mute now greys out all the Strip panels, since none of them apply if the strip is disabled - Rename Info to Time, since now this panel only includes timecodes and related controls - Move Lock to the Time header, since you are locking the time controls - Move clip resolution to Source, since it's not related to time
This commit is contained in:
@@ -807,6 +807,20 @@ class SequencerButtonsPanel_Output:
|
||||
def poll(cls, context):
|
||||
return cls.has_preview(context)
|
||||
|
||||
class SEQUENCER_PT_strip(SequencerButtonsPanel, Panel):
|
||||
bl_label = ""
|
||||
bl_options = {'HIDE_HEADER'}
|
||||
bl_category = "Strip"
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
strip = act_strip(context)
|
||||
|
||||
row = layout.row()
|
||||
row.label(text="", icon='SEQ_SEQUENCER')
|
||||
row.prop(strip, "name", text="")
|
||||
row.prop(strip, "mute", toggle=True, icon_only=True, emboss=False)
|
||||
|
||||
|
||||
class SEQUENCER_PT_adjust_transform_offset(SequencerButtonsPanel, Panel):
|
||||
bl_label = "Offset"
|
||||
@@ -829,10 +843,12 @@ class SEQUENCER_PT_adjust_transform_offset(SequencerButtonsPanel, Panel):
|
||||
layout.use_property_split = True
|
||||
layout.use_property_decorate = False
|
||||
|
||||
layout.active = strip.use_translation or not strip.mute
|
||||
|
||||
col = layout.column(align=True)
|
||||
col.prop(strip.transform, "offset_x", text="Position X")
|
||||
col.prop(strip.transform, "offset_y", text="Y")
|
||||
col.active = strip.use_translation
|
||||
|
||||
|
||||
|
||||
class SEQUENCER_PT_adjust_transform_crop(SequencerButtonsPanel, Panel):
|
||||
@@ -856,12 +872,13 @@ class SEQUENCER_PT_adjust_transform_crop(SequencerButtonsPanel, Panel):
|
||||
layout.use_property_split = True
|
||||
layout.use_property_decorate = False
|
||||
|
||||
layout.active = strip.use_crop or not strip.mute
|
||||
|
||||
col = layout.column(align=True)
|
||||
col.prop(strip.crop, "min_x")
|
||||
col.prop(strip.crop, "max_x")
|
||||
col.prop(strip.crop, "max_y")
|
||||
col.prop(strip.crop, "min_y")
|
||||
col.active = strip.use_crop
|
||||
|
||||
|
||||
class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
|
||||
@@ -891,6 +908,8 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
|
||||
|
||||
strip = act_strip(context)
|
||||
|
||||
layout.active = not strip.mute
|
||||
|
||||
if strip.input_count > 0:
|
||||
col = layout.column()
|
||||
col.enabled = False
|
||||
@@ -1045,12 +1064,6 @@ class SEQUENCER_PT_source(SequencerButtonsPanel, Panel):
|
||||
|
||||
return strip.type in {'MOVIE', 'IMAGE', 'SOUND'}
|
||||
|
||||
# , 'SCENE', 'MOVIECLIP', 'META',
|
||||
# 'ADD', 'SUBTRACT', 'ALPHA_OVER', 'ALPHA_UNDER',
|
||||
# 'CROSS', 'GAMMA_CROSS', 'MULTIPLY', 'OVER_DROP',
|
||||
# 'WIPE', 'GLOW', 'TRANSFORM', 'COLOR',
|
||||
# 'MULTICAM', 'SPEED', 'ADJUSTMENT', 'COLORMIX' }
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
layout.use_property_split = True
|
||||
@@ -1060,6 +1073,8 @@ class SEQUENCER_PT_source(SequencerButtonsPanel, Panel):
|
||||
strip = act_strip(context)
|
||||
seq_type = strip.type
|
||||
|
||||
layout.active = not strip.mute
|
||||
|
||||
# draw a filename if we have one
|
||||
if seq_type == 'IMAGE':
|
||||
col = layout.column()
|
||||
@@ -1119,6 +1134,25 @@ class SEQUENCER_PT_source(SequencerButtonsPanel, Panel):
|
||||
box.active = strip.views_format == 'STEREO_3D'
|
||||
box.template_image_stereo_3d(strip.stereo_3d_format)
|
||||
|
||||
elem = False
|
||||
|
||||
if strip.type == 'IMAGE':
|
||||
elem = strip.strip_elem_from_frame(frame_current)
|
||||
elif strip.type == 'MOVIE':
|
||||
elem = strip.elements[0]
|
||||
|
||||
if strip.type != 'SOUND':
|
||||
col = layout.column(align=True)
|
||||
col = col.box()
|
||||
split = col.split(factor=0.5, align=False)
|
||||
split.alignment = 'RIGHT'
|
||||
split.label(text="Resolution")
|
||||
if elem and elem.orig_width > 0 and elem.orig_height > 0:
|
||||
split.alignment = 'LEFT'
|
||||
split.label(text="%dx%d" % (elem.orig_width, elem.orig_height), translate=False)
|
||||
else:
|
||||
split.label(text="None")
|
||||
|
||||
|
||||
class SEQUENCER_PT_sound(SequencerButtonsPanel, Panel):
|
||||
bl_label = "Sound"
|
||||
@@ -1144,6 +1178,8 @@ class SEQUENCER_PT_sound(SequencerButtonsPanel, Panel):
|
||||
strip = act_strip(context)
|
||||
sound = strip.sound
|
||||
|
||||
layout.active = not strip.mute
|
||||
|
||||
layout.template_ID(strip, "sound", open="sound.open")
|
||||
if sound is not None:
|
||||
layout.prop(sound, "filepath", text="")
|
||||
@@ -1187,6 +1223,8 @@ class SEQUENCER_PT_scene(SequencerButtonsPanel, Panel):
|
||||
|
||||
strip = act_strip(context)
|
||||
|
||||
layout.active = not strip.mute
|
||||
|
||||
layout.template_ID(strip, "scene")
|
||||
|
||||
scene = strip.scene
|
||||
@@ -1235,6 +1273,8 @@ class SEQUENCER_PT_mask(SequencerButtonsPanel, Panel):
|
||||
|
||||
strip = act_strip(context)
|
||||
|
||||
layout.active = not strip.mute
|
||||
|
||||
layout.template_ID(strip, "mask")
|
||||
|
||||
mask = strip.mask
|
||||
@@ -1245,8 +1285,8 @@ class SEQUENCER_PT_mask(SequencerButtonsPanel, Panel):
|
||||
layout.label(text=iface_("Original frame range: %d-%d (%d)") % (sta, end, end - sta + 1), translate=False)
|
||||
|
||||
|
||||
class SEQUENCER_PT_info(SequencerButtonsPanel, Panel):
|
||||
bl_label = "Info"
|
||||
class SEQUENCER_PT_time(SequencerButtonsPanel, Panel):
|
||||
bl_label = "Time"
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
bl_category = "Strip"
|
||||
|
||||
@@ -1261,6 +1301,13 @@ class SEQUENCER_PT_info(SequencerButtonsPanel, Panel):
|
||||
|
||||
return strip.type
|
||||
|
||||
def draw_header_preset(self, context):
|
||||
layout = self.layout
|
||||
layout.alignment = 'RIGHT'
|
||||
strip = act_strip(context)
|
||||
|
||||
layout.prop(strip, "lock", text="", icon_only=True, emboss=False)
|
||||
|
||||
def draw(self, context):
|
||||
from bpy.utils import smpte_from_frame
|
||||
|
||||
@@ -1289,17 +1336,16 @@ class SEQUENCER_PT_info(SequencerButtonsPanel, Panel):
|
||||
max_length = max(len(x) for x in length_list)
|
||||
max_factor = (1.9 - max_length) / 30
|
||||
|
||||
layout.prop(strip, "name", text="")
|
||||
layout.enabled = not strip.lock
|
||||
layout.active = not strip.mute
|
||||
|
||||
sub = layout.row(align=True)
|
||||
sub.enabled = not strip.lock
|
||||
split = sub.split(factor=0.5 + max_factor)
|
||||
split.alignment = 'RIGHT'
|
||||
split.label(text='Channel')
|
||||
split.prop(strip, "channel", text="")
|
||||
|
||||
sub = layout.column(align=True)
|
||||
sub.enabled = not strip.lock
|
||||
split = sub.split(factor=0.5 + max_factor, align=True)
|
||||
split.alignment = 'RIGHT'
|
||||
split.label(text="Start")
|
||||
@@ -1315,10 +1361,7 @@ class SEQUENCER_PT_info(SequencerButtonsPanel, Panel):
|
||||
split.label(text="Duration")
|
||||
split.prop(strip, "frame_final_duration", text=smpte_from_frame(strip.frame_final_duration))
|
||||
|
||||
layout.use_property_split = True
|
||||
layout.use_property_decorate = False
|
||||
layout.prop(strip, "lock", text="Lock Transform", toggle=False)
|
||||
layout.use_property_split = False
|
||||
|
||||
|
||||
if not isinstance(strip, bpy.types.EffectSequence):
|
||||
|
||||
@@ -1364,22 +1407,6 @@ class SEQUENCER_PT_info(SequencerButtonsPanel, Panel):
|
||||
split.alignment = 'RIGHT'
|
||||
split.label(text=str(playhead) + " ")
|
||||
|
||||
elem = False
|
||||
|
||||
if strip.type == 'IMAGE':
|
||||
elem = strip.strip_elem_from_frame(frame_current)
|
||||
elif strip.type == 'MOVIE':
|
||||
elem = strip.elements[0]
|
||||
|
||||
if strip.type != 'SOUND':
|
||||
split = col.split(factor=0.5 + max_factor, align=False)
|
||||
split.alignment = 'RIGHT'
|
||||
split.label(text="Resolution")
|
||||
if elem and elem.orig_width > 0 and elem.orig_height > 0:
|
||||
split.label(text="%dx%d" % (elem.orig_width, elem.orig_height), translate=False)
|
||||
else:
|
||||
split.label(text="None")
|
||||
|
||||
if strip.type == 'SCENE':
|
||||
scene = strip.scene
|
||||
|
||||
@@ -1418,18 +1445,13 @@ class SEQUENCER_PT_adjust_sound(SequencerButtonsPanel, Panel):
|
||||
|
||||
st = context.space_data
|
||||
strip = act_strip(context)
|
||||
|
||||
sound = strip.sound
|
||||
|
||||
layout.active = not strip.mute
|
||||
|
||||
col = layout.column()
|
||||
|
||||
row = col.row(align=True)
|
||||
sub = row.row(align=True)
|
||||
sub.active = (not strip.mute)
|
||||
|
||||
sub.prop(strip, "volume", text="Volume")
|
||||
sub.prop(strip, "mute", toggle=True, icon_only=True, icon='MUTE_IPO_ON')
|
||||
|
||||
col.prop(strip, "volume", text="Volume")
|
||||
col.prop(strip, "pitch")
|
||||
col.prop(strip, "pan")
|
||||
|
||||
@@ -1457,14 +1479,11 @@ class SEQUENCER_PT_adjust_comp(SequencerButtonsPanel, Panel):
|
||||
|
||||
strip = act_strip(context)
|
||||
|
||||
layout.prop(strip, "blend_type", text="Blend")
|
||||
layout.active = not strip.mute
|
||||
|
||||
row = layout.row(align=True)
|
||||
sub = row.row(align=True)
|
||||
sub.active = (not strip.mute)
|
||||
|
||||
sub.prop(strip, "blend_alpha", text="Opacity", slider=True)
|
||||
sub.prop(strip, "mute", toggle=True, icon_only=True)
|
||||
col = layout.column()
|
||||
col.prop(strip, "blend_type", text="Blend")
|
||||
col.prop(strip, "blend_alpha", text="Opacity", slider=True)
|
||||
|
||||
|
||||
class SEQUENCER_PT_adjust_transform(SequencerButtonsPanel, Panel):
|
||||
@@ -1491,9 +1510,10 @@ class SEQUENCER_PT_adjust_transform(SequencerButtonsPanel, Panel):
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
strip = act_strip(context)
|
||||
|
||||
layout.active = not strip.mute
|
||||
|
||||
split = layout.split()
|
||||
|
||||
col = split.column()
|
||||
@@ -1539,6 +1559,8 @@ class SEQUENCER_PT_adjust_video(SequencerButtonsPanel, Panel):
|
||||
|
||||
strip = act_strip(context)
|
||||
|
||||
layout.active = not strip.mute
|
||||
|
||||
col.prop(strip, "strobe")
|
||||
|
||||
if strip.type == 'MOVIECLIP':
|
||||
@@ -1584,6 +1606,8 @@ class SEQUENCER_PT_adjust_color(SequencerButtonsPanel, Panel):
|
||||
|
||||
strip = act_strip(context)
|
||||
|
||||
layout.active = not strip.mute
|
||||
|
||||
col = layout.column()
|
||||
col.prop(strip, "color_saturation", text="Saturation")
|
||||
col.prop(strip, "color_multiply", text="Multiply")
|
||||
@@ -1994,6 +2018,8 @@ classes = (
|
||||
SEQUENCER_MT_strip_lock_mute,
|
||||
SEQUENCER_MT_context_menu,
|
||||
|
||||
SEQUENCER_PT_strip,
|
||||
|
||||
SEQUENCER_PT_adjust,
|
||||
SEQUENCER_PT_adjust_comp,
|
||||
SEQUENCER_PT_adjust_transform,
|
||||
@@ -2003,7 +2029,7 @@ classes = (
|
||||
SEQUENCER_PT_adjust_color,
|
||||
SEQUENCER_PT_adjust_sound,
|
||||
|
||||
SEQUENCER_PT_info,
|
||||
SEQUENCER_PT_time,
|
||||
SEQUENCER_PT_source,
|
||||
|
||||
SEQUENCER_PT_effect,
|
||||
|
||||
@@ -1606,7 +1606,7 @@ static void rna_def_sequence(BlenderRNA *brna)
|
||||
|
||||
prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MUTE);
|
||||
RNA_def_property_ui_icon(prop, ICON_HIDE_OFF, -1);
|
||||
RNA_def_property_ui_icon(prop, ICON_CHECKBOX_HLT, -1);
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Mute", "Disable strip so that it cannot be viewed in the output");
|
||||
RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_Sequence_mute_update");
|
||||
|
||||
Reference in New Issue
Block a user