def splice_out_button_pressed(): """ Removes 1 - n long continuous clip range from track and closes the created gap. """ if movemodes.selected_track == -1: return # Edit consumes selection, so clear selected from clips movemodes.set_range_selection(movemodes.selected_track, movemodes.selected_range_in, movemodes.selected_range_out, False) track = get_track(movemodes.selected_track) if editevent.track_lock_check_and_user_info(track, splice_out_button_pressed, "splice out"): movemodes.clear_selection_values() return data = { "track": track, "from_index": movemodes.selected_range_in, "to_index": movemodes.selected_range_out } edit_action = edit.remove_multiple_action(data) edit_action.do_edit() # Nothing is selected after edit movemodes.clear_selection_values() updater.repaint_tline()
def display_clip_menu(y, event, frame): # See if we actually hit a clip track = tlinewidgets.get_track(y) if track == None: return False clip_index = current_sequence().get_clip_index(track, frame) if clip_index == -1: return False # Can't do anything to clips in locked tracks if editevent.track_lock_check_and_user_info(track, display_clip_menu, "clip context menu"): return False # Display popup pressed_clip = track.clips[clip_index] if pressed_clip.is_blanck_clip == False: movemodes.select_clip(track.id, clip_index) else: movemodes.select_blank_range(track, pressed_clip) if track.type == appconsts.VIDEO: guicomponents.display_clip_popup_menu(event, pressed_clip, \ track, _clip_menu_item_activated) elif track.type == appconsts.AUDIO: guicomponents.display_audio_clip_popup_menu(event, pressed_clip, \ track, _clip_menu_item_activated) return True
def lift_button_pressed(): """ Removes 1 - n long continuous clip range from track and fills the created gap with a black clip """ if movemodes.selected_track == -1: return # Edit consumes selection, set clips seletion attr to false movemodes.set_range_selection(movemodes.selected_track, movemodes.selected_range_in, movemodes.selected_range_out, False) track = get_track(movemodes.selected_track) if editevent.track_lock_check_and_user_info(track, lift_button_pressed, "lift"): movemodes.clear_selection_values() return data = {"track":track, "from_index":movemodes.selected_range_in, "to_index":movemodes.selected_range_out} edit_action = edit.lift_multiple_action(data) edit_action.do_edit() # Nothing is left selected after edit movemodes.clear_selection_values() updater.repaint_tline()
def lift_button_pressed(): """ Removes 1 - n long continuous clip range from track and fills the created gap with a black clip """ if movemodes.selected_track == -1: return # Edit consumes selection, set clips seletion attr to false movemodes.set_range_selection(movemodes.selected_track, movemodes.selected_range_in, movemodes.selected_range_out, False) track = get_track(movemodes.selected_track) if editevent.track_lock_check_and_user_info(track, lift_button_pressed, "lift"): movemodes.clear_selection_values() return data = { "track": track, "from_index": movemodes.selected_range_in, "to_index": movemodes.selected_range_out } edit_action = edit.lift_multiple_action(data) edit_action.do_edit() # Nothing is left selected after edit movemodes.clear_selection_values() updater.repaint_tline()
def splice_out_button_pressed(): """ Removes 1 - n long continuous clip range from track and closes the created gap. """ if movemodes.selected_track == -1: return # Edit consumes selection, so clear selected from clips movemodes.set_range_selection(movemodes.selected_track, movemodes.selected_range_in, movemodes.selected_range_out, False) track = get_track(movemodes.selected_track) if editevent.track_lock_check_and_user_info(track, splice_out_button_pressed, "splice out"): movemodes.clear_selection_values() return data = {"track":track, "from_index":movemodes.selected_range_in, "to_index":movemodes.selected_range_out} edit_action = edit.remove_multiple_action(data) edit_action.do_edit() # Nothing is selected after edit movemodes.clear_selection_values() updater.repaint_tline()
def three_point_overwrite_pressed(): # Check that state is good for edit if movemodes.selected_track == -1: primary_txt = _("No Clips are selected!") secondary_txt = _( "You need to select clips to overwrite to perform this edit.") dialogutils.info_message(primary_txt, secondary_txt, gui.editor_window.window) return # Get data track = get_track(movemodes.selected_track) if editevent.track_lock_check_and_user_info(track, three_point_overwrite_pressed, "3 point overwrite"): return range_start_frame = track.clip_start(movemodes.selected_range_in) out_clip = track.clips[movemodes.selected_range_out] out_start = track.clip_start(movemodes.selected_range_out) range_end_frame = out_start + out_clip.clip_out - out_clip.clip_in range_length = range_end_frame - range_start_frame + 1 # calculated end is incl. over_clip = _get_new_clip_from_clip_monitor() if over_clip == None: no_monitor_clip_info(gui.editor_window.window) return over_length = over_clip.mark_out - over_clip.mark_in + 1 # + 1 out incl ?????????? what if over_clip.mark_out == -1 ?????????? if over_length < range_length: monitor_clip_too_short(gui.editor_window.window) return over_clip_out = over_clip.mark_in + range_length - 1 # -1 out incl range_in = movemodes.selected_range_in range_out = movemodes.selected_range_out movemodes.clear_selected_clips() # edit consumes selection updater.save_monitor_frame = False # hack to not get wrong value saved in MediaFile.current_frame data = { "track": track, "clip": over_clip, "clip_in": over_clip.mark_in, "clip_out": over_clip_out, "in_index": range_in, "out_index": range_out } action = edit.three_point_overwrite_action(data) action.do_edit() if not editorstate.timeline_visible(): updater.display_sequence_in_monitor() updater.display_tline_cut_frame(track, range_in)
def cut_pressed(): if not timeline_visible(): updater.display_sequence_in_monitor() if EDIT_MODE() == editorstate.ONE_ROLL_TRIM: editevent.oneroll_trim_no_edit_init() return if EDIT_MODE() == editorstate.TWO_ROLL_TRIM: editevent.tworoll_trim_no_edit_init() return tline_frame = PLAYER().current_frame() movemodes.clear_selected_clips() # Iterate tracks and do cut on all active that have non-blanck # clips and frame is not on previous edits for i in range(1, len(current_sequence().tracks)): track = get_track(i) if track.active == False: continue if editevent.track_lock_check_and_user_info( track, cut_pressed, "cut"): # so the other tracks get cut... continue # Get index and clip index = track.get_clip_index_at(int(tline_frame)) try: clip = track.clips[index] # don't cut blanck clip if clip.is_blanck_clip: continue except Exception: continue # Frame after last clip in track # Get cut frame in clip frames clip_start_in_tline = track.clip_start(index) clip_frame = tline_frame - clip_start_in_tline + clip.clip_in # Dont edit if frame on cut. if clip_frame == clip.clip_in: continue # Do edit data = { "track": track, "index": index, "clip": clip, "clip_cut_frame": clip_frame } action = edit.cut_action(data) action.do_edit() updater.repaint_tline()
def splice_out_button_pressed(): """ Removes 1 - n long continuous clip range from track and closes the created gap. """ if movemodes.selected_track == -1: return # Edit consumes selection, so clear selected from clips movemodes.set_range_selection(movemodes.selected_track, movemodes.selected_range_in, movemodes.selected_range_out, False) track = get_track(movemodes.selected_track) if editevent.track_lock_check_and_user_info(track, splice_out_button_pressed, "splice out"): movemodes.clear_selection_values() return # A single clip delete can trigger a special clip cover delete # See if such delete should be attempted. # Exit if done succesfully, do normal splice out and report if failed cover_delete_failed = False if editorpersistance.prefs.trans_cover_delete == True: if movemodes.selected_range_out == movemodes.selected_range_in: clip = track.clips[movemodes.selected_range_in] if hasattr(clip, "rendered_type") and ( track.id >= current_sequence().first_video_index): cover_delete_success = _attempt_clip_cover_delete( clip, track, movemodes.selected_range_in) if cover_delete_success: return # A successful cover delete happened else: cover_delete_failed = True # A successful cover delete failed, do normal delete and gove info # Do delete data = { "track": track, "from_index": movemodes.selected_range_in, "to_index": movemodes.selected_range_out } edit_action = edit.remove_multiple_action(data) edit_action.do_edit() _splice_out_done_update() if cover_delete_failed == True: dialogutils.info_message( _("Fade/Transition cover delete failed!"), _("There wasn't enough material available in adjacent clips.\nA normal Splice Out was done instead." ), gui.editor_window.window)
def cut_pressed(): if not timeline_visible(): updater.display_sequence_in_monitor() if EDIT_MODE() == editorstate.ONE_ROLL_TRIM: editevent.oneroll_trim_no_edit_init() return if EDIT_MODE() == editorstate.TWO_ROLL_TRIM: editevent.tworoll_trim_no_edit_init() return tline_frame = PLAYER().current_frame() movemodes.clear_selected_clips() # Iterate tracks and do cut on all active that have non-blanck # clips and frame is not on previous edits for i in range(1, len(current_sequence().tracks)): track = get_track(i) if track.active == False: continue if editevent.track_lock_check_and_user_info(track, cut_pressed, "cut"): # so the other tracks get cut... continue # Get index and clip index = track.get_clip_index_at(int(tline_frame)) try: clip = track.clips[index] # don't cut blanck clip if clip.is_blanck_clip: continue except Exception: continue # Frame after last clip in track # Get cut frame in clip frames clip_start_in_tline = track.clip_start(index) clip_frame = tline_frame - clip_start_in_tline + clip.clip_in # Dont edit if frame on cut. if clip_frame == clip.clip_in: continue # Do edit data = {"track":track, "index":index, "clip":clip, "clip_cut_frame":clip_frame} action = edit.cut_action(data) action.do_edit() updater.repaint_tline()
def range_overwrite_pressed(): # Get data track = current_sequence().get_first_active_track() if editevent.track_lock_check_and_user_info(track, range_overwrite_pressed, "range overwrite"): return # tractor is has mark in and mark mark_in_frame = current_sequence().tractor.mark_in mark_out_frame = current_sequence().tractor.mark_out range_length = mark_out_frame - mark_in_frame + 1 # end is incl. if mark_in_frame == -1 or mark_out_frame == -1: primary_txt = _("Timeline Range not set!") secondary_txt = _( "You need to set Timeline Range using Mark In and Mark Out buttons\nto perform this edit." ) dialogutils.info_message(primary_txt, secondary_txt, gui.editor_window.window) return # Get over clip and check it overwrite range area over_clip = _get_new_clip_from_clip_monitor() if over_clip == None: no_monitor_clip_info(gui.editor_window.window) return over_length = over_clip.mark_out - over_clip.mark_in + 1 # + 1 out incl if over_length < range_length: monitor_clip_too_short(gui.editor_window.window) return over_clip_out = over_clip.mark_in + range_length - 1 movemodes.clear_selected_clips() # edit consumes selection updater.save_monitor_frame = False # hack to not get wrong value saved in MediaFile.current_frame data = { "track": track, "clip": over_clip, "clip_in": over_clip.mark_in, "clip_out": over_clip_out, "mark_in_frame": mark_in_frame, "mark_out_frame": mark_out_frame + 1 } # +1 because mark is displayed and end of frame end this # confirms to user expectation of # of how this should work action = edit.range_overwrite_action(data) action.do_edit() updater.display_tline_cut_frame(track, track.get_clip_index_at(mark_in_frame))
def append_button_pressed(): track = current_sequence().get_first_active_track() if editevent.track_lock_check_and_user_info(track, append_button_pressed, "insert"): return tline_pos = track.get_length() new_clip = _get_new_clip_from_clip_monitor() if new_clip == None: no_monitor_clip_info(gui.editor_window.window) return updater.save_monitor_frame = False # hack to not get wrong value saved in MediaFile.current_frame editevent.do_clip_insert(track, new_clip, tline_pos)
def three_point_overwrite_pressed(): # Check that state is good for edit if movemodes.selected_track == -1: primary_txt = _("No Clips are selected!") secondary_txt = _("You need to select clips to overwrite to perform this edit.") dialogutils.info_message(primary_txt, secondary_txt, gui.editor_window.window) return # Get data track = get_track(movemodes.selected_track) if editevent.track_lock_check_and_user_info(track, three_point_overwrite_pressed, "3 point overwrite"): return range_start_frame = track.clip_start(movemodes.selected_range_in) out_clip = track.clips[movemodes.selected_range_out] out_start = track.clip_start(movemodes.selected_range_out) range_end_frame = out_start + out_clip.clip_out - out_clip.clip_in range_length = range_end_frame - range_start_frame + 1 # calculated end is incl. over_clip = _get_new_clip_from_clip_monitor() if over_clip == None: no_monitor_clip_info(gui.editor_window.window) return over_length = over_clip.mark_out - over_clip.mark_in + 1 # + 1 out incl ?????????? what if over_clip.mark_out == -1 ?????????? if over_length < range_length: monitor_clip_too_short(gui.editor_window.window) return over_clip_out = over_clip.mark_in + range_length - 1 # -1 out incl range_in = movemodes.selected_range_in range_out = movemodes.selected_range_out movemodes.clear_selected_clips() # edit consumes selection updater.save_monitor_frame = False # hack to not get wrong value saved in MediaFile.current_frame data = {"track":track, "clip":over_clip, "clip_in":over_clip.mark_in, "clip_out":over_clip_out, "in_index":range_in, "out_index":range_out} action = edit.three_point_overwrite_action(data) action.do_edit() updater.display_tline_cut_frame(track, range_in)
def splice_out_button_pressed(): """ Removes 1 - n long continuous clip range from track and closes the created gap. """ if movemodes.selected_track == -1: return # Edit consumes selection, so clear selected from clips movemodes.set_range_selection(movemodes.selected_track, movemodes.selected_range_in, movemodes.selected_range_out, False) track = get_track(movemodes.selected_track) if editevent.track_lock_check_and_user_info(track, splice_out_button_pressed, "splice out"): movemodes.clear_selection_values() return # A single clip delete can trigger a special clip cover delete # See if such delete should be attempted. # Exit if done succesfully, do normal splice out and report if failed cover_delete_failed = False if editorpersistance.prefs.trans_cover_delete == True: if movemodes.selected_range_out == movemodes.selected_range_in: clip = track.clips[movemodes.selected_range_in] if hasattr(clip, "rendered_type") and (track.id >= current_sequence().first_video_index): cover_delete_success = _attempt_clip_cover_delete(clip, track, movemodes.selected_range_in) if cover_delete_success: return # A successful cover delete happened else: cover_delete_failed = True # A successful cover delete failed, do normal delete and gove info # Do delete data = {"track":track, "from_index":movemodes.selected_range_in, "to_index":movemodes.selected_range_out} edit_action = edit.remove_multiple_action(data) edit_action.do_edit() _splice_out_done_update() if cover_delete_failed == True: dialogutils.info_message(_("Fade/Transition cover delete failed!"), _("There wasn't enough material available in adjacent clips.\nA normal Splice Out was done instead."), gui.editor_window.window)
def range_overwrite_pressed(): # Get data track = current_sequence().get_first_active_track() if editevent.track_lock_check_and_user_info(track, range_overwrite_pressed, "range overwrite"): return # tractor is has mark in and mark mark_in_frame = current_sequence().tractor.mark_in mark_out_frame = current_sequence().tractor.mark_out range_length = mark_out_frame - mark_in_frame + 1 # end is incl. if mark_in_frame == -1 or mark_out_frame == -1: primary_txt = _("Timeline Range not set!") secondary_txt = _("You need to set Timeline Range using Mark In and Mark Out buttons\nto perform this edit.") dialogutils.info_message(primary_txt, secondary_txt, gui.editor_window.window) return # Get over clip and check it overwrite range area over_clip = _get_new_clip_from_clip_monitor() if over_clip == None: no_monitor_clip_info(gui.editor_window.window) return over_length = over_clip.mark_out - over_clip.mark_in + 1 # + 1 out incl if over_length < range_length: monitor_clip_too_short(gui.editor_window.window) return over_clip_out = over_clip.mark_in + range_length - 1 movemodes.clear_selected_clips() # edit consumes selection updater.save_monitor_frame = False # hack to not get wrong value saved in MediaFile.current_frame data = {"track":track, "clip":over_clip, "clip_in":over_clip.mark_in, "clip_out":over_clip_out, "mark_in_frame":mark_in_frame, "mark_out_frame":mark_out_frame + 1} # +1 because mark is displayed and end of frame end this # confirms to user expectation of # of how this should work action = edit.range_overwrite_action(data) action.do_edit() updater.display_tline_cut_frame(track, track.get_clip_index_at(mark_in_frame))
def range_overwrite_pressed(): # Get data track = current_sequence().get_first_active_track() if editevent.track_lock_check_and_user_info(track, range_overwrite_pressed, "range overwrite"): return # Get over clip and check it overwrite range area over_clip = _get_new_clip_from_clip_monitor() if over_clip == None: no_monitor_clip_info(gui.editor_window.window) return # tractor is has mark in and mark mark_in_frame = current_sequence().tractor.mark_in mark_out_frame = current_sequence().tractor.mark_out # Case timeline marked if mark_in_frame != -1 and mark_out_frame != -1: range_length = mark_out_frame - mark_in_frame + 1 # end is incl. if over_clip.mark_in == -1: # This actually never hit because mark in and mark out seem to first and last frame if nothing set show_three_point_edit_not_defined() return over_length = over_clip.mark_out - over_clip.mark_in + 1 # + 1 out incl if over_length < range_length: monitor_clip_too_short(gui.editor_window.window) return over_clip_out = over_clip.mark_in + range_length - 1 # Case clip marked elif over_clip.mark_out != -1 and over_clip.mark_in != -1: range_length = over_clip.mark_out - over_clip.mark_in + 1 # end is incl. if mark_in_frame == -1: show_three_point_edit_not_defined() return over_length = track.get_length() - mark_in_frame + 1 # + 1 out incl if over_length < range_length: monitor_clip_too_short(gui.editor_window.window) return over_clip_out = over_clip.mark_out mark_out_frame = mark_in_frame + range_length - 1 # -1 because it gets readded later # case neither clip or timeline has both in and out points else: show_three_point_edit_not_defined() return movemodes.clear_selected_clips() # edit consumes selection updater.save_monitor_frame = False # hack to not get wrong value saved in MediaFile.current_frame data = { "track": track, "clip": over_clip, "clip_in": over_clip.mark_in, "clip_out": over_clip_out, "mark_in_frame": mark_in_frame, "mark_out_frame": mark_out_frame + 1 } # +1 because mark is displayed and end of frame end this # confirms to user expectation of # of how this should work action = edit.range_overwrite_action(data) action.do_edit() updater.display_tline_cut_frame(track, track.get_clip_index_at(mark_in_frame))