def _set_workflow_STANDARD(): editorpersistance.prefs.active_tools = [2, 11, 6, 1, 9, 10] # appconsts.TLINE_TOOL_ID_<X> values editorpersistance.prefs.dnd_action = appconsts.DND_ALWAYS_OVERWRITE editorpersistance.prefs.box_for_empty_press_in_overwrite_tool = True editorpersistance.save() modesetting.set_default_edit_mode()
def _set_workflow_STANDARD(): editorpersistance.prefs.active_tools = [2, 6, 8, 4, 5, 7] editorpersistance.prefs.dnd_action = appconsts.DND_ALWAYS_OVERWRITE editorpersistance.prefs.box_for_empty_press_in_overwrite_tool = True editorpersistance.save() modesetting.set_default_edit_mode()
def _set_workflow_FILM_STYLE(): editorpersistance.prefs.active_tools = [1, 2, 3, 4, 5, 6, 7] # appconsts.TLINE_TOOL_ID_<X> values editorpersistance.prefs.dnd_action = appconsts.DND_OVERWRITE_NON_V1 editorpersistance.prefs.box_for_empty_press_in_overwrite_tool = False editorpersistance.save() modesetting.set_default_edit_mode()
def _set_workflow_FILM_STYLE(): editorpersistance.prefs.active_tools = [1, 2, 3, 4, 5, 6, 7] editorpersistance.prefs.dnd_action = appconsts.DND_OVERWRITE_NON_V1 editorpersistance.prefs.box_for_empty_press_in_overwrite_tool = False editorpersistance.save() modesetting.set_default_edit_mode()
def tline_canvas_double_click(frame, x, y): if PLAYER().looping(): return elif PLAYER().is_playing(): PLAYER().stop_playback() if not timeline_visible(): updater.display_sequence_in_monitor() modesetting.set_default_edit_mode() return hit_compositor = tlinewidgets.compositor_hit(frame, x, y, current_sequence().compositors) if hit_compositor != None: compositeeditor.set_compositor(hit_compositor) return track = tlinewidgets.get_track(y) if track == None: return clip_index = current_sequence().get_clip_index(track, frame) if clip_index == -1: return clip = track.clips[clip_index] if clip.is_blanck_clip == True: return data = (clip, track, None, x) updater.open_clip_in_effects_editor(data)
def tline_canvas_double_click(frame, x, y): if PLAYER().looping(): return elif PLAYER().is_playing(): PLAYER().stop_playback() if not timeline_visible(): updater.display_sequence_in_monitor() modesetting.set_default_edit_mode() return hit_compositor = tlinewidgets.compositor_hit(frame, y, current_sequence().compositors) if hit_compositor != None: compositeeditor.set_compositor(hit_compositor) return track = tlinewidgets.get_track(y) if track == None: return clip_index = current_sequence().get_clip_index(track, frame) if clip_index == -1: return clip = track.clips[clip_index] if clip.is_blanck_clip == True: return data = (clip, track, None, x) updater.open_clip_in_effects_editor(data)
def tline_media_drop(media_file, x, y, use_marks=False): track = tlinewidgets.get_track(y) if track == None: return if track.id < 1 or track.id >= (len(current_sequence().tracks) - 1): return if track_lock_check_and_user_info(track): modesetting.set_default_edit_mode() return modesetting.set_default_edit_mode() frame = tlinewidgets.get_frame(x) # Create new clip. if media_file.type != appconsts.PATTERN_PRODUCER: new_clip = current_sequence().create_file_producer_clip(media_file.path, media_file.name, False, media_file.ttl) else: new_clip = current_sequence().create_pattern_producer(media_file) # Set clip in and out if use_marks == False: new_clip.mark_in = 0 new_clip.mark_out = new_clip.get_length() - 1 # - 1 because out is mark_out inclusive if media_file.type == appconsts.IMAGE_SEQUENCE: new_clip.mark_out = media_file.length else: new_clip.mark_in = media_file.mark_in new_clip.mark_out = media_file.mark_out if new_clip.mark_in == -1: new_clip.mark_in = 0 if new_clip.mark_out == -1: new_clip.mark_out = new_clip.get_length() - 1 # - 1 because out is mark_out inclusive if media_file.type == appconsts.IMAGE_SEQUENCE: new_clip.mark_out = media_file.length # Graphics files get added with their default lengths f_name, ext = os.path.splitext(media_file.name) if utils.file_extension_is_graphics_file(ext) and media_file.type != appconsts.IMAGE_SEQUENCE: # image sequences are graphics files but have own length in_fr, out_fr, l = editorpersistance.get_graphics_default_in_out_length() new_clip.mark_in = in_fr new_clip.mark_out = out_fr # Non-insert DND actions if editorpersistance.prefs.dnd_action == appconsts.DND_OVERWRITE_NON_V1: if track.id != current_sequence().first_video_track().id: drop_done = _attempt_dnd_overwrite(track, new_clip, frame) if drop_done == True: return elif editorpersistance.prefs.dnd_action == appconsts.DND_ALWAYS_OVERWRITE: drop_done = _attempt_dnd_overwrite(track, new_clip, frame) if drop_done == True: return do_clip_insert(track, new_clip, frame)
def tline_range_item_drop(rows, x, y): track = tlinewidgets.get_track(y) if track == None: return if track.id < 1 or track.id >= (len(current_sequence().tracks) - 1): return if dialogutils.track_lock_check_and_user_info(track): modesetting.set_default_edit_mode() return frame = tlinewidgets.get_frame(x) clips = medialog.get_clips_for_rows(rows) modesetting.set_default_edit_mode() do_multiple_clip_insert(track, clips, frame)
def tline_range_item_drop(rows, x, y): track = tlinewidgets.get_track(y) if track == None: return if track.id < 1 or track.id >= (len(current_sequence().tracks) - 1): return if dialogutils.track_lock_check_and_user_info(track): modesetting.set_default_edit_mode() return frame = tlinewidgets.get_frame(x) clips = medialog.get_clips_for_rows(rows) modesetting.set_default_edit_mode() do_multiple_clip_insert(track, clips, frame)
def tline_effect_drop(x, y): clip, track, index = tlinewidgets.get_clip_track_and_index_for_pos(x, y) if clip == None: return if track == None: return if track.id < 1 or track.id >= (len(current_sequence().tracks) - 1): return if dialogutils.track_lock_check_and_user_info(track): modesetting.set_default_edit_mode() return if clip != clipeffectseditor.clip: clipeffectseditor.set_clip(clip, track, index) clipeffectseditor.add_currently_selected_effect() # drag start selects the dragged effect
def tline_effect_drop(x, y): clip, track, index = tlinewidgets.get_clip_track_and_index_for_pos(x, y) if clip == None: return if track == None: return if track.id < 1 or track.id >= (len(current_sequence().tracks) - 1): return if dialogutils.track_lock_check_and_user_info(track): modesetting.set_default_edit_mode() return if clip != clipeffectseditor.clip: clipeffectseditor.set_clip(clip, track, index) clipeffectseditor.add_currently_selected_effect() # drag start selects the dragged effect
def init_editor_state(): """ Called after project load or changing current sequence to initalize editor state. """ render.fill_out_profile_widgets() gui.media_view_filter_selector.set_pixbuf(editorstate.media_view_filter) gui.editor_window.window.set_title(editorstate.project.name + " - Flowblade") gui.editor_window.uimanager.get_widget( "/MenuBar/FileMenu/Save").set_sensitive(False) gui.editor_window.uimanager.get_widget( "/MenuBar/EditMenu/Undo").set_sensitive(False) gui.editor_window.uimanager.get_widget( "/MenuBar/EditMenu/Redo").set_sensitive(False) # Center tracks vertical display and init some listeners to # new value and repaint tracks column. tlinewidgets.set_ref_line_y(gui.tline_canvas.widget.get_allocation()) gui.tline_column.init_listeners() gui.tline_column.widget.queue_draw() # Clear editors clipeffectseditor.clear_clip() clipeffectseditor.effect_selection_changed() # to get No Clip text compositeeditor.clear_compositor() # Show first pages on notebooks gui.middle_notebook.set_current_page(0) # Clear clip selection. movemodes.clear_selection_values() # Set initial edit mode modesetting.set_default_edit_mode() # Create array needed to update compositors after all edits editorstate.current_sequence().restack_compositors() proxyediting.set_menu_to_proxy_state() undo.clear_undos() # Enable edit action GUI updates edit.do_gui_update = True
def init_editor_state(): """ Called after project load or changing current sequence to initalize editor state. """ render.fill_out_profile_widgets() gui.media_view_filter_selector.set_pixbuf(editorstate.media_view_filter) gui.editor_window.window.set_title(editorstate.project.name + " - Flowblade") gui.editor_window.uimanager.get_widget("/MenuBar/FileMenu/Save").set_sensitive(False) gui.editor_window.uimanager.get_widget("/MenuBar/EditMenu/Undo").set_sensitive(False) gui.editor_window.uimanager.get_widget("/MenuBar/EditMenu/Redo").set_sensitive(False) # Center tracks vertical display and init some listeners to # new value and repaint tracks column. tlinewidgets.set_ref_line_y(gui.tline_canvas.widget.get_allocation()) gui.tline_column.init_listeners() gui.tline_column.widget.queue_draw() # Clear editors clipeffectseditor.clear_clip() clipeffectseditor.effect_selection_changed() # to get No Clip text compositeeditor.clear_compositor() # Show first pages on notebooks gui.middle_notebook.set_current_page(0) # Clear clip selection. movemodes.clear_selection_values() # Set initial edit mode modesetting.set_default_edit_mode() # Create array needed to update compositors after all edits editorstate.current_sequence().restack_compositors() proxyediting.set_menu_to_proxy_state() undo.clear_undos() # Enable edit action GUI updates edit.do_gui_update = True
def tline_effect_drop(x, y): clip, track, index = tlinewidgets.get_clip_track_and_index_for_pos(x, y) if clip == None: return if track == None: return if track.id < 1 or track.id >= (len(current_sequence().tracks) - 1): return if dialogutils.track_lock_check_and_user_info(track): modesetting.set_default_edit_mode() return selected_track_before = movemodes.selected_track selected_in_before = movemodes.selected_range_in selected_out_before = movemodes.selected_range_out if clipeffectseditor.clip_is_being_edited(clip) == False: clipeffectseditor.set_clip(clip, track, index) clipeffectseditor.add_currently_selected_effect() # drag start selects the dragged effect filter_info = clipeffectseditor.get_currently_selected_filter_info() if selected_track_before != track.id: return if not((selected_in_before <= index) and (selected_out_before >= index)): return if selected_in_before != -1: for add_index in range(selected_in_before, selected_out_before + 1): if add_index == index: continue add_clip = track.clips[add_index] if add_clip.is_blanck_clip == True: continue data = {"clip":add_clip, "filter_info":filter_info, "filter_edit_done_func":clipeffectseditor.filter_edit_done_stack_update} action = edit.add_filter_action(data) action.do_edit()
def _set_workflow_FILM_STYLE(): editorpersistance.prefs.active_tools = [1, 2, 3, 4, 5, 6, 7] editorpersistance.prefs.dnd_action = appconsts.DND_OVERWRITE_NON_V1 editorpersistance.save() modesetting.set_default_edit_mode()
def tline_canvas_mouse_pressed(event, frame): """ Mouse event callback from timeline canvas widget """ editorstate.timeline_mouse_disabled = False # This is used to disable "move and "release" events when they would get bad data. if PLAYER().looping(): return elif PLAYER().is_playing(): PLAYER().stop_playback() # Double click handled separately if event.type == Gdk.EventType._2BUTTON_PRESS: return # Handle and exit parent clip selecting if EDIT_MODE() == editorstate.SELECT_PARENT_CLIP: syncsplitevent.select_sync_parent_mouse_pressed(event, frame) editorstate.timeline_mouse_disabled = True # Set INSERT_MODE modesetting.set_default_edit_mode() return # Handle and exit tline sync clip selecting if EDIT_MODE() == editorstate.SELECT_TLINE_SYNC_CLIP: audiosync.select_sync_clip_mouse_pressed(event, frame) editorstate.timeline_mouse_disabled = True # Set INSERT_MODE modesetting.set_default_edit_mode() return # Hitting timeline in clip display mode displays timeline in # default mode. if not timeline_visible(): updater.display_sequence_in_monitor() if (event.button == 1): # Now that we have correct edit mode we'll reenter # this method to get e.g. a select action tline_canvas_mouse_pressed(event, frame) return if (event.button == 3): # Right mouse + CTRL displays clip menu if we hit clip if (event.get_state() & Gdk.ModifierType.CONTROL_MASK): PLAYER().seek_frame(frame) # Right mouse on timeline seeks frame else: success = display_clip_menu_pop_up(event.y, event, frame) if not success: PLAYER().seek_frame(frame) return # If clip end drag mode is for some reason still active, exit to default edit mode if EDIT_MODE() == editorstate.CLIP_END_DRAG: modesetting.set_default_edit_mode() # This shouldn't happen unless for some reason mouse release didn't hit clipenddragmode listener. print("EDIT_MODE() == editorstate.CLIP_END_DRAG at mouse press!") # Check if match frame close is hit if editorstate.current_is_move_mode() and timeline_visible(): if tlinewidgets.match_frame_close_hit(event.x, event.y) == True: tlinewidgets.set_match_frame(-1, -1, True) updater.repaint_tline() return # Check if compositor is hit and if so, handle compositor editing if editorstate.current_is_move_mode() and timeline_visible(): hit_compositor = tlinewidgets.compositor_hit(frame, event.x, event.y, current_sequence().compositors) if hit_compositor != None: if editorstate.get_compositing_mode() == appconsts.COMPOSITING_MODE_STANDARD_AUTO_FOLLOW: compositeeditor.set_compositor(hit_compositor) compositormodes.set_compositor_selected(hit_compositor) movemodes.clear_selected_clips() editorstate.timeline_mouse_disabled = True return elif editorstate.auto_follow_active() == False or hit_compositor.obey_autofollow == False: movemodes.clear_selected_clips() if event.button == 1 or (event.button == 3 and event.get_state() & Gdk.ModifierType.CONTROL_MASK): compositormodes.set_compositor_mode(hit_compositor) mode_funcs = EDIT_MODE_FUNCS[editorstate.COMPOSITOR_EDIT] press_func = mode_funcs[TL_MOUSE_PRESS] press_func(event, frame) return if event.button == 3: compositormodes.set_compositor_selected(hit_compositor) guicomponents.display_compositor_popup_menu(event, hit_compositor, compositor_menu_item_activated) return elif event.button == 2: updater.zoom_project_length() return compositormodes.clear_compositor_selection() # Check if we should enter clip end drag mode if (event.button == 3 and editorstate.current_is_move_mode() and timeline_visible() and (event.get_state() & Gdk.ModifierType.CONTROL_MASK)): # with CTRL right mouse clipenddragmode.maybe_init_for_mouse_press(event, frame) elif (timeline_visible() and (EDIT_MODE() == editorstate.INSERT_MOVE or EDIT_MODE() == editorstate.OVERWRITE_MOVE) and (tlinewidgets.pointer_context == appconsts.POINTER_CONTEXT_END_DRAG_LEFT or tlinewidgets.pointer_context == appconsts.POINTER_CONTEXT_END_DRAG_RIGHT)): # with pointer context clipenddragmode.maybe_init_for_mouse_press(event, frame) # Handle mouse button presses depending which button was pressed and # editor state. # RIGHT BUTTON: seek frame or display clip menu if not dragging clip end if (event.button == 3 and EDIT_MODE() != editorstate.CLIP_END_DRAG and EDIT_MODE() != editorstate.KF_TOOL): if ((not editorstate.current_is_active_trim_mode()) and timeline_visible()): if not(event.get_state() & Gdk.ModifierType.CONTROL_MASK): success = display_clip_menu_pop_up(event.y, event, frame) if not success: PLAYER().seek_frame(frame) else: # For trim modes set <X>_NO_EDIT edit mode and seek frame. and seek frame trimmodes.set_no_edit_trim_mode() PLAYER().seek_frame(frame) return # LEFT BUTTON: Select new trimmed clip in active one roll trim mode with sensitive cursor. elif (event.button == 1 and EDIT_MODE() == editorstate.ONE_ROLL_TRIM): track = tlinewidgets.get_track(event.y) if track == None: modesetting.set_default_edit_mode(True) return success = trimmodes.set_oneroll_mode(track, frame) if not success: modesetting.set_default_edit_mode(True) return if trimmodes.edit_data["to_side_being_edited"] == True: pointer_context = appconsts.POINTER_CONTEXT_TRIM_LEFT else: pointer_context = appconsts.POINTER_CONTEXT_TRIM_RIGHT gui.editor_window.set_tline_cursor_to_context(pointer_context) gui.editor_window.set_tool_selector_to_mode() if not editorpersistance.prefs.quick_enter_trims: editorstate.timeline_mouse_disabled = True else: trimmodes.oneroll_trim_move(event.x, event.y, frame, None) elif event.button == 2: updater.zoom_project_length() # LEFT BUTTON: Handle left mouse button edits by passing event to current edit mode # handler func elif event.button == 1 or event.button == 3: mode_funcs = EDIT_MODE_FUNCS[EDIT_MODE()] press_func = mode_funcs[TL_MOUSE_PRESS] press_func(event, frame)
def tline_canvas_mouse_pressed(event, frame): """ Mouse event callback from timeline canvas widget """ editorstate.timeline_mouse_disabled = False # This is used to disable "move and "release" events when they would get bad data. if PLAYER().looping(): return elif PLAYER().is_playing(): PLAYER().stop_playback() # Double click handled separately if event.type == Gdk.EventType._2BUTTON_PRESS: return # Handle and exit parent clip selecting if EDIT_MODE() == editorstate.SELECT_PARENT_CLIP: syncsplitevent.select_sync_parent_mouse_pressed(event, frame) editorstate.timeline_mouse_disabled = True # Set INSERT_MODE modesetting.set_default_edit_mode() return # Handle and exit tline sync clip selecting if EDIT_MODE() == editorstate.SELECT_TLINE_SYNC_CLIP: audiosync.select_sync_clip_mouse_pressed(event, frame) editorstate.timeline_mouse_disabled = True # Set INSERT_MODE modesetting.set_default_edit_mode() return # Hitting timeline in clip display mode displays timeline in # default mode. if not timeline_visible(): updater.display_sequence_in_monitor() if (event.button == 1): # Now that we have correct edit mode we'll reenter # this method to get e.g. a select action tline_canvas_mouse_pressed(event, frame) return if (event.button == 3): # Right mouse + CTRL displays clip menu if we hit clip if (event.get_state() & Gdk.ModifierType.CONTROL_MASK): PLAYER().seek_frame(frame) # Right mouse on timeline seeks frame else: success = display_clip_menu_pop_up(event.y, event, frame) if not success: PLAYER().seek_frame(frame) return # If clip end drag mode is for some reason still active, exit to default edit mode if EDIT_MODE() == editorstate.CLIP_END_DRAG: modesetting.set_default_edit_mode() # This shouldn't happen unless for some reason mouse release didn't hit clipenddragmode listener. print "EDIT_MODE() == editorstate.CLIP_END_DRAG at mouse press!" # Check if match frame close is hit if editorstate.current_is_move_mode() and timeline_visible(): if tlinewidgets.match_frame_close_hit(event.x, event.y) == True: tlinewidgets.set_match_frame(-1, -1, True) updater.repaint_tline() return # Check if compositor is hit and if so, handle compositor editing if editorstate.current_is_move_mode() and timeline_visible(): hit_compositor = tlinewidgets.compositor_hit(frame, event.y, current_sequence().compositors) if hit_compositor != None: if editorstate.auto_follow == False or hit_compositor.obey_autofollow == False: movemodes.clear_selected_clips() if event.button == 1 or (event.button == 3 and event.get_state() & Gdk.ModifierType.CONTROL_MASK): compositormodes.set_compositor_mode(hit_compositor) mode_funcs = EDIT_MODE_FUNCS[editorstate.COMPOSITOR_EDIT] press_func = mode_funcs[TL_MOUSE_PRESS] press_func(event, frame) return if event.button == 3: compositormodes.set_compositor_selected(hit_compositor) guicomponents.display_compositor_popup_menu(event, hit_compositor, compositor_menu_item_activated) return elif event.button == 2: updater.zoom_project_length() return compositormodes.clear_compositor_selection() # Check if we should enter clip end drag mode if (event.button == 3 and editorstate.current_is_move_mode() and timeline_visible() and (event.get_state() & Gdk.ModifierType.CONTROL_MASK)): # with CTRL right mouse clipenddragmode.maybe_init_for_mouse_press(event, frame) elif (timeline_visible() and (EDIT_MODE() == editorstate.INSERT_MOVE or EDIT_MODE() == editorstate.OVERWRITE_MOVE) and (tlinewidgets.pointer_context == appconsts.POINTER_CONTEXT_END_DRAG_LEFT or tlinewidgets.pointer_context == appconsts.POINTER_CONTEXT_END_DRAG_RIGHT)): # with pointer context clipenddragmode.maybe_init_for_mouse_press(event, frame) # Handle mouse button presses depending which button was pressed and # editor state. # RIGHT BUTTON: seek frame or display clip menu if not dragging clip end if (event.button == 3 and EDIT_MODE() != editorstate.CLIP_END_DRAG and EDIT_MODE() != editorstate.KF_TOOL): if ((not editorstate.current_is_active_trim_mode()) and timeline_visible()): if not(event.get_state() & Gdk.ModifierType.CONTROL_MASK): success = display_clip_menu_pop_up(event.y, event, frame) if not success: PLAYER().seek_frame(frame) else: # For trim modes set <X>_NO_EDIT edit mode and seek frame. and seek frame trimmodes.set_no_edit_trim_mode() PLAYER().seek_frame(frame) return # LEFT BUTTON: Select new trimmed clip in active one roll trim mode with sensitive cursor. elif (event.button == 1 and EDIT_MODE() == editorstate.ONE_ROLL_TRIM): track = tlinewidgets.get_track(event.y) if track == None: modesetting.set_default_edit_mode(True) return success = trimmodes.set_oneroll_mode(track, frame) if not success: modesetting.set_default_edit_mode(True) return if trimmodes.edit_data["to_side_being_edited"] == True: pointer_context = appconsts.POINTER_CONTEXT_TRIM_LEFT else: pointer_context = appconsts.POINTER_CONTEXT_TRIM_RIGHT gui.editor_window.set_tline_cursor_to_context(pointer_context) gui.editor_window.set_tool_selector_to_mode() if not editorpersistance.prefs.quick_enter_trims: editorstate.timeline_mouse_disabled = True else: trimmodes.oneroll_trim_move(event.x, event.y, frame, None) elif event.button == 2: updater.zoom_project_length() # LEFT BUTTON: Handle left mouse button edits by passing event to current edit mode # handler func elif event.button == 1 or event.button == 3: mode_funcs = EDIT_MODE_FUNCS[EDIT_MODE()] press_func = mode_funcs[TL_MOUSE_PRESS] press_func(event, frame)
def _set_workflow_STANDARD(): editorpersistance.prefs.active_tools = [2, 6, 8, 4, 5, 7] editorpersistance.prefs.dnd_action = appconsts.DND_ALWAYS_OVERWRITE editorpersistance.save() modesetting.set_default_edit_mode()
def key_down(widget, event): """ Global key press listener. """ # Handle ESCAPE if event.keyval == Gdk.KEY_Escape: if audiowaveform.waveform_thread != None: audiowaveform.waveform_thread.abort_rendering() return True elif editorstate.current_is_move_mode() == False: modesetting.set_default_edit_mode() return True elif gui.big_tc.get_visible_child_name() == "BigTCEntry": gui.big_tc.set_visible_child_name("BigTCDisplay") return True # Compositor editors keyevents was_handled = _handle_geometry_editor_keys(event) if was_handled: # Stop widget focus from travelling if arrow key pressed gui.editor_window.window.emit_stop_by_name("key_press_event") return True was_handled = _handle_effects_editor_keys(event) if was_handled: # Stop widget focus from travelling if arrow key pressed gui.editor_window.window.emit_stop_by_name("key_press_event") return True # If timeline widgets are in focus timeline keyevents are available if _timeline_has_focus(): was_handled = _handle_tline_key_event(event) if was_handled: # Stop widget focus from travelling if arrow key pressed for next frame # by stopping signal gui.editor_window.window.emit_stop_by_name("key_press_event") return was_handled # Insert shortcut keys need more focus then timeline shortcuts. # these may already have been handled in timeline focus events was_handled = _handle_extended_tline_focus_events(event) if was_handled: # Stop event handling here return True # Pressing timeline button obivously leaves user expecting # to have focus in timeline """ TODO: this needs something if gui.sequence_editor_b.has_focus(): _handle_tline_key_event(event) # Stop event handling here return True """ # Clip button or posbar focus with clip displayed leaves playback keyshortcuts available """ if (gui.clip_editor_b.has_focus() TODO: this needs something or (gui.pos_bar.widget.is_focus() and (not timeline_visible()))): _handle_clip_key_event(event) # Stop event handling here return True """ if gui.monitor_switch.widget.has_focus() and timeline_visible(): _handle_tline_key_event(event) return True if gui.monitor_switch.widget.has_focus() and (not timeline_visible()): _handle_clip_key_event(event) return True if gui.pos_bar.widget.is_focus() and (not timeline_visible()): _handle_clip_key_event(event) return True # Handle non-timeline delete if event.keyval == Gdk.KEY_Delete: return _handle_delete() # Home if event.keyval == Gdk.KEY_Home: if PLAYER().is_playing(): monitorevent.stop_pressed() PLAYER().seek_frame(0) _move_to_beginning() return True # End if event.keyval == Gdk.KEY_End: if PLAYER().is_playing(): monitorevent.stop_pressed() PLAYER().seek_end() _move_to_end() return True # Select all with CTRL + A in media panel if event.keyval == Gdk.KEY_a: if (event.get_state() & Gdk.ModifierType.CONTROL_MASK): if gui.media_list_view.widget.has_focus() or gui.media_list_view.widget.get_focus_child() != None: gui.media_list_view.select_all() return True if event.keyval == Gdk.KEY_F11: menuactions.toggle_fullscreen() return True #debug if event.keyval == Gdk.KEY_F12: if (event.get_state() & Gdk.ModifierType.CONTROL_MASK): pass return True # Key event was not handled here. return False
def key_down(widget, event): """ Global key press listener. """ # Handle ESCAPE if event.keyval == Gdk.KEY_Escape: if audiowaveform.waveform_thread != None: audiowaveform.waveform_thread.abort_rendering() return True elif editorstate.current_is_move_mode() == False: modesetting.set_default_edit_mode() return True elif gui.big_tc.get_visible_child_name() == "BigTCEntry": gui.big_tc.set_visible_child_name("BigTCDisplay") return True # Compositor editors keyevents was_handled = _handle_geometry_editor_keys(event) if was_handled: # Stop widget focus from travelling if arrow key pressed gui.editor_window.window.emit_stop_by_name("key_press_event") return True was_handled = _handle_effects_editor_keys(event) if was_handled: # Stop widget focus from travelling if arrow key pressed gui.editor_window.window.emit_stop_by_name("key_press_event") return True # If timeline widgets are in focus timeline keyevents are available if _timeline_has_focus(): was_handled = _handle_tline_key_event(event) if was_handled: # Stop widget focus from travelling if arrow key pressed for next frame # by stopping signal gui.editor_window.window.emit_stop_by_name("key_press_event") return was_handled # Insert shortcut keys need more focus then timeline shortcuts. # these may already have been handled in timeline focus events was_handled = _handle_extended_tline_focus_events(event) if was_handled: # Stop event handling here return True # Pressing timeline button obivously leaves user expecting # to have focus in timeline """ TODO: this needs something if gui.sequence_editor_b.has_focus(): _handle_tline_key_event(event) # Stop event handling here return True """ # Clip button or posbar focus with clip displayed leaves playback keyshortcuts available """ if (gui.clip_editor_b.has_focus() TODO: this needs something or (gui.pos_bar.widget.is_focus() and (not timeline_visible()))): _handle_clip_key_event(event) # Stop event handling here return True """ if gui.monitor_switch.widget.has_focus() and timeline_visible(): _handle_tline_key_event(event) return True if gui.monitor_switch.widget.has_focus() and (not timeline_visible()): _handle_clip_key_event(event) return True if gui.pos_bar.widget.is_focus() and (not timeline_visible()): _handle_clip_key_event(event) return True # Handle non-timeline delete if event.keyval == Gdk.KEY_Delete: return _handle_delete() # Home if event.keyval == Gdk.KEY_Home: if PLAYER().is_playing(): monitorevent.stop_pressed() PLAYER().seek_frame(0) _move_to_beginning() return True # End if event.keyval == Gdk.KEY_End: if PLAYER().is_playing(): monitorevent.stop_pressed() PLAYER().seek_end() _move_to_end() return True # Select all with CTRL + A in media panel if event.keyval == Gdk.KEY_a: if (event.get_state() & Gdk.ModifierType.CONTROL_MASK): if gui.media_list_view.widget.has_focus() or gui.media_list_view.widget.get_focus_child() != None: gui.media_list_view.select_all() return True if event.keyval == Gdk.KEY_F11: menuactions.toggle_fullscreen() return True #debug if event.keyval == Gdk.KEY_F12: if (event.get_state() & Gdk.ModifierType.CONTROL_MASK): tlineaction.ripple_delete_button_pressed() return True # Key event was not handled here. return False