Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
clip.data['position'] = left_edge
elif action == MENU_ALIGN_RIGHT:
position = float(clip.data["position"])
start_of_clip = float(clip.data["start"])
end_of_clip = float(clip.data["end"])
right_clip_edge = position + (end_of_clip - start_of_clip)
clip.data['position'] = position + (right_edge - right_clip_edge)
# Save changes
self.update_clip_data(clip.data, only_basic_props=False, ignore_reader=True)
# Loop through each selected transition (update position to align clips)
for tran_id in tran_ids:
# Get existing transition object
tran = Transition.get(id=tran_id)
if not tran:
# Invalid transition, skip to next item
continue
if action == MENU_ALIGN_LEFT:
tran.data['position'] = left_edge
elif action == MENU_ALIGN_RIGHT:
position = float(tran.data["position"])
start_of_tran = float(tran.data["start"])
end_of_tran = float(tran.data["end"])
right_tran_edge = position + (end_of_tran - start_of_tran)
tran.data['position'] = position + (right_edge - right_tran_edge)
# Save changes
self.update_transition_data(tran.data, only_basic_props=False)
log.info("Generate right splice waveform for clip id: %s" % right_clip.id)
self.Show_Waveform_Triggered(right_clip.id)
# Save changes
self.update_clip_data(clip.data, only_basic_props=False, ignore_reader=True)
if has_audio_data:
# Re-generate waveform since volume curve has changed
log.info("Generate left splice waveform for clip id: %s" % clip.id)
self.Show_Waveform_Triggered(clip.id)
# Loop through each transition (using the list of ids)
for trans_id in trans_ids:
# Get existing transition object
trans = Transition.get(id=trans_id)
if not trans:
# Invalid transition, skip to next item
continue
if action == MENU_SLICE_KEEP_LEFT or action == MENU_SLICE_KEEP_BOTH:
# Get details of original transition
position_of_tran = float(trans.data["position"])
# Set new 'end' of transition
trans.data["end"] = playhead_position - position_of_tran
elif action == MENU_SLICE_KEEP_RIGHT:
# Get details of transition clip
position_of_tran = float(trans.data["position"])
end_of_tran = float(trans.data["end"])
property_type = property[1]["type"]
closest_point_x = property[1]["closest_point_x"]
property_type = property[1]["type"]
property_key = property[0]
clip_id, item_type = item.data()
# Find this clip
c = None
clip_updated = False
if item_type == "clip":
# Get clip object
c = Clip.get(id=clip_id)
elif item_type == "transition":
# Get transition object
c = Transition.get(id=clip_id)
elif item_type == "effect":
# Get effect object
c = Effect.get(id=clip_id)
if c:
# Update clip attribute
if property_key in c.data:
log.info("remove keyframe: %s" % c.data)
# Determine type of keyframe (normal or color)
keyframe_list = []
if property_type == "color":
keyframe_list = [c.data[property_key]["red"], c.data[property_key]["blue"], c.data[property_key]["green"]]
else:
keyframe_list = [c.data[property_key]]
def update_transition_data(self, transition_json, only_basic_props=True):
""" Create an updateAction and send it to the update manager """
# read clip json
if not isinstance(transition_json, dict):
transition_data = json.loads(transition_json)
else:
transition_data = transition_json
# Search for matching clip in project data (if any)
existing_item = Transition.get(id=transition_data["id"])
needs_resize = True
if not existing_item:
# Create a new clip (if not exists)
existing_item = Transition()
needs_resize = False
existing_item.data = transition_data
# Get FPS from project
fps = get_app().project.get(["fps"])
fps_float = float(fps["num"]) / float(fps["den"])
duration = existing_item.data["end"] - existing_item.data["start"]
# Update the brightness and contrast keyframes to match the duration of the transition
# This is a hack until I can think of something better
brightness = None
contrast = None
action.triggered.connect(self.Action_Triggered)
# Add effects for these clips (if any)
for effect in clip.data.get('effects'):
effect = Effect.get(id=effect.get('id'))
if effect:
item_name = effect.title()
item_icon = QIcon(QPixmap(os.path.join(info.PATH, "effects", "icons", "%s.png" % effect.data.get('class_name').lower())))
action = menu.addAction(' > %s' % _(item_name))
action.setIcon(item_icon)
action.setData({'item_id': effect.id, 'item_type': 'effect'})
action.triggered.connect(self.Action_Triggered)
# Add selected transitions
for item_id in get_app().window.selected_transitions:
trans = Transition.get(id=item_id)
if trans:
item_name = _(trans.title())
item_icon = QIcon(QPixmap(trans.data.get('reader',{}).get('path')))
action = menu.addAction(_(item_name))
action.setIcon(item_icon)
action.setData({'item_id': item_id, 'item_type': 'transition'})
action.triggered.connect(self.Action_Triggered)
# Add selected effects
for item_id in get_app().window.selected_effects:
effect = Effect.get(id=item_id)
if effect:
item_name = _(effect.title())
item_icon = QIcon(QPixmap(os.path.join(info.PATH, "effects", "icons", "%s.png" % effect.data.get('class_name').lower())))
action = menu.addAction(_(item_name))
action.setIcon(item_icon)
def Reverse_Transition_Triggered(self, tran_ids):
"""Callback for reversing a transition"""
log.info("Reverse_Transition_Triggered")
# Loop through all selected transitions
for tran_id in tran_ids:
# Get existing clip object
tran = Transition.get(id=tran_id)
if not tran:
# Invalid transition, skip to next item
continue
# Loop through brightness keyframes
tran_data_copy = deepcopy(tran.data)
new_index = len(tran.data["brightness"]["Points"])
for point in tran.data["brightness"]["Points"]:
new_index -= 1
tran_data_copy["brightness"]["Points"][new_index]["co"]["Y"] = point["co"]["Y"]
if "handle_left" in point:
tran_data_copy["brightness"]["Points"][new_index]["handle_left"]["Y"] = point["handle_left"]["Y"]
tran_data_copy["brightness"]["Points"][new_index]["handle_right"]["Y"] = point["handle_right"]["Y"]
# Save changes
self.update_transition_data(tran_data_copy, only_basic_props=False)
# Set new 'end' of transition
trans.data["end"] = playhead_position - position_of_tran
elif action == MENU_SLICE_KEEP_RIGHT:
# Get details of transition clip
position_of_tran = float(trans.data["position"])
end_of_tran = float(trans.data["end"])
# Set new 'end' of transition
trans.data["position"] = playhead_position
trans.data["end"] = end_of_tran - (playhead_position - position_of_tran)
if action == MENU_SLICE_KEEP_BOTH:
# Add the 2nd transition (the right side, since the left side has already been adjusted above)
# Get right side transition object
right_tran = Transition.get(id=trans_id)
if not right_tran:
# Invalid transition, skip to next item
continue
# Remove the ID property from the transition (so it becomes a new one)
right_tran.id = None
right_tran.type = 'insert'
right_tran.data.pop('id')
right_tran.key.pop(1)
# Get details of original transition
position_of_tran = float(right_tran.data["position"])
end_of_tran = float(right_tran.data["end"])
# Set new 'end' of right_tran
right_tran.data["position"] = playhead_position
def update_transition_data(self, transition_json):
""" Create an updateAction and send it to the update manager """
# read clip json
if not isinstance(transition_json, dict):
transition_data = json.loads(transition_json)
else:
transition_data = transition_json
# Search for matching clip in project data (if any)
existing_item = Transition.get(id=transition_data["id"])
if not existing_item:
# Create a new clip (if not exists)
existing_item = Transition()
existing_item.data = transition_data
existing_item.save()
# Get list of marker and important positions (like selected clip bounds)
for marker in Marker.filter():
all_marker_positions.append(marker.data["position"])
# Loop through selected clips (and add key positions)
for clip_id in self.selected_clips:
# Get selected object
selected_clip = Clip.get(id=clip_id)
if selected_clip:
all_marker_positions.append(selected_clip.data["position"])
all_marker_positions.append(selected_clip.data["position"] + (selected_clip.data["end"] - selected_clip.data["start"]))
# Loop through selected transitions (and add key positions)
for tran_id in self.selected_transitions:
# Get selected object
selected_tran = Transition.get(id=tran_id)
if selected_tran:
all_marker_positions.append(selected_tran.data["position"])
all_marker_positions.append(selected_tran.data["position"] + (selected_tran.data["end"] - selected_tran.data["start"]))
# Loop through all markers, and find the closest one to the right
closest_position = None
for marker_position in sorted(all_marker_positions):
# Is marker smaller than position?
if marker_position > current_position and (abs(marker_position - current_position) > 0.1):
# Is marker larger than previous marker
if closest_position and marker_position < closest_position:
# Set a new closest marker
closest_position = marker_position
elif not closest_position:
# First one found
closest_position = marker_position