def _init_view_menu(self, menu_item): menu_item.set_submenu(None) menu = Gtk.Menu() mb_menu_item = Gtk.MenuItem(_("Middlebar Layout").encode('utf-8')) mb_menu = Gtk.Menu() tc_left = Gtk.RadioMenuItem() tc_left.set_label(_("Timecode Left").encode('utf-8')) tc_left.set_active(True) tc_left.connect("activate", lambda w: middlebar._show_buttons_TC_LEFT_layout(w)) mb_menu.append(tc_left) tc_middle = Gtk.RadioMenuItem.new_with_label([tc_left], _("Timecode Center").encode('utf-8')) tc_middle.connect("activate", lambda w: middlebar._show_buttons_TC_MIDDLE_layout(w)) mb_menu.append(tc_middle) if editorpersistance.prefs.midbar_tc_left == True: tc_left.set_active(True) else: tc_middle.set_active(True) mb_menu_item.set_submenu(mb_menu) menu.append(mb_menu_item) tabs_menu_item = Gtk.MenuItem(_("Tabs Position").encode('utf-8')) tabs_menu = Gtk.Menu() tabs_up = Gtk.RadioMenuItem() tabs_up.set_label( _("Up").encode('utf-8')) tabs_up.connect("activate", lambda w: self._show_tabs_up(w)) tabs_menu.append(tabs_up) tabs_down = Gtk.RadioMenuItem.new_with_label([tabs_up], _("Down").encode('utf-8')) tabs_down.connect("activate", lambda w: self._show_tabs_down(w)) if editorpersistance.prefs.tabs_on_top == True: tabs_up.set_active(True) else: tabs_down.set_active(True) tabs_menu.append(tabs_down) tabs_menu_item.set_submenu(tabs_menu) menu.append(tabs_menu_item) sep = Gtk.SeparatorMenuItem() menu.append(sep) if not (editorstate.screen_size_small_height() == True or editorstate.screen_size_small_height() == True): show_monitor_info_item = Gtk.CheckMenuItem(_("Show Monitor Sequence Profile").encode('utf-8')) show_monitor_info_item.set_active(editorpersistance.prefs.show_sequence_profile) show_monitor_info_item.connect("toggled", lambda w: middlebar._show_monitor_info_toggled(w)) menu.append(show_monitor_info_item) show_vu_item = Gtk.CheckMenuItem(_("Show Master Volume Meter").encode('utf-8')) show_vu_item.set_active(editorpersistance.prefs.show_vu_meter) show_vu_item.connect("toggled", lambda w: self._show_vu_meter(w)) menu.append(show_vu_item) sep = Gtk.SeparatorMenuItem() menu.append(sep) interp_menu_item = Gtk.MenuItem(_("Monitor Playback Interpolation").encode('utf-8')) interp_menu = Gtk.Menu() interp_nearest = Gtk.RadioMenuItem() interp_nearest.set_label(_("Nearest Neighbour (fast)").encode('utf-8')) interp_nearest.connect("activate", lambda w: monitorevent.set_monitor_playback_interpolation("nearest")) interp_menu.append(interp_nearest) interp_bilinear = Gtk.RadioMenuItem.new_with_label([interp_nearest], _("Bilinear (good)").encode('utf-8')) interp_bilinear.connect("activate", lambda w: monitorevent.set_monitor_playback_interpolation("bilinear")) interp_menu.append(interp_bilinear) interp_bicubic = Gtk.RadioMenuItem.new_with_label([interp_nearest], _("Bicubic (better)").encode('utf-8')) interp_bicubic.set_active(True) interp_bicubic.connect("activate", lambda w: monitorevent.set_monitor_playback_interpolation("bicubic")) interp_menu.append(interp_bicubic) interp_hyper = Gtk.RadioMenuItem.new_with_label([interp_nearest], _("Hyper/Lanczos (best)").encode('utf-8')) interp_hyper.connect("activate", lambda w: monitorevent.set_monitor_playback_interpolation("hyper")) interp_menu.append(interp_hyper) interp_menu_item.set_submenu(interp_menu) menu.append(interp_menu_item) sep = Gtk.SeparatorMenuItem() menu.append(sep) zoom_in_menu_item = Gtk.MenuItem(_("Zoom In").encode('utf-8')) zoom_in_menu_item.connect("activate", lambda w: updater.zoom_in()) menu.append(zoom_in_menu_item) zoom_out_menu_item = Gtk.MenuItem(_("Zoom Out").encode('utf-8')) zoom_out_menu_item.connect("activate", lambda w: updater.zoom_out()) menu.append(zoom_out_menu_item) zoom_fit_menu_item = Gtk.MenuItem(_("Zoom Fit").encode('utf-8')) zoom_fit_menu_item.connect("activate", lambda w: updater.zoom_project_length()) menu.append(zoom_fit_menu_item) menu_item.set_submenu(menu)
def tline_canvas_mouse_pressed(event, frame): """ Mouse event callback from timeline canvas widget """ global mouse_disabled if PLAYER().looping(): return elif PLAYER().is_playing(): PLAYER().stop_playback() # Double click handled separately if event.type == gtk.gdk._2BUTTON_PRESS: return # Handle and exit parent clip selecting if EDIT_MODE() == editorstate.SELECT_PARENT_CLIP: syncsplitevent.select_sync_parent_mouse_pressed(event, frame) mouse_disabled = True # Set INSERT_MODE 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): mouse_disabled == True # Right mouse + CTRL displays clip menu if we hit clip if (event.state & gtk.gdk.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 # 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: movemodes.clear_selected_clips() if event.button == 1: 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) elif event.button == 3: mouse_disabled == True compositormodes.set_compositor_selected(hit_compositor) guicomponents.display_compositor_popup_menu(event, hit_compositor, compositor_menu_item_activated) elif event.button == 2: updater.zoom_project_length() return compositormodes.clear_compositor_selection() # Handle mouse button presses depending which button was pressed and # editor state. # RIGHT BUTTON: seek frame or display clip menu if (event.button == 3): if ((not editorstate.current_is_active_trim_mode()) and timeline_visible()): if not(event.state & gtk.gdk.CONTROL_MASK): success = display_clip_menu_pop_up(event.y, event, frame) if not success: PLAYER().seek_frame(frame) else: 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 + CTRL: Select new trimmed clip in one roll trim mode elif (event.button == 1 and (event.state & gtk.gdk.CONTROL_MASK) and EDIT_MODE() == editorstate.ONE_ROLL_TRIM): track = tlinewidgets.get_track(event.y) if track == None: if editorpersistance.prefs.empty_click_exits_trims == True: set_default_edit_mode(True) return success = trimmodes.set_oneroll_mode(track, frame) if (not success) and editorpersistance.prefs.empty_click_exits_trims == True: set_default_edit_mode(True) return gui.editor_window.set_cursor_to_mode() gui.editor_window.set_mode_selector_to_mode() if not editorpersistance.prefs.quick_enter_trims: mouse_disabled = True else: trimmodes.oneroll_trim_move(event.x, event.y, frame, None) # LEFT BUTTON + CTRL: Select new trimmed clip in two roll trim mode elif (event.button == 1 and (event.state & gtk.gdk.CONTROL_MASK) and EDIT_MODE() == editorstate.TWO_ROLL_TRIM): track = tlinewidgets.get_track(event.y) if track == None: if editorpersistance.prefs.empty_click_exits_trims == True: set_default_edit_mode(True) return success = trimmodes.set_tworoll_mode(track, frame) if (not success) and editorpersistance.prefs.empty_click_exits_trims == True: set_default_edit_mode(True) return if not editorpersistance.prefs.quick_enter_trims: mouse_disabled = True else: trimmodes.tworoll_trim_move(event.x, event.y, frame, None) # LEFT BUTTON: Handle left mouse button edits by passing event to current edit mode # handler func elif event.button == 1: mode_funcs = EDIT_MODE_FUNCS[EDIT_MODE()] press_func = mode_funcs[TL_MOUSE_PRESS] press_func(event, frame) elif event.button == 2: updater.zoom_project_length()
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 _init_view_menu(self, menu_item): menu_item.remove_submenu() menu = gtk.Menu() mb_menu_item = gtk.MenuItem(_("Middlebar Layout").encode('utf-8')) mb_menu = gtk.Menu() tc_left = gtk.RadioMenuItem(None, _("Timecode Left").encode('utf-8')) tc_left.set_active(True) tc_left.connect("activate", lambda w: middlebar._show_buttons_TC_LEFT_layout(w)) mb_menu.append(tc_left) tc_middle = gtk.RadioMenuItem(tc_left, _("Timecode Center").encode('utf-8')) tc_middle.connect( "activate", lambda w: middlebar._show_buttons_TC_MIDDLE_layout(w)) mb_menu.append(tc_middle) if editorpersistance.prefs.midbar_tc_left == True: tc_left.set_active(True) else: tc_middle.set_active(True) mb_menu_item.set_submenu(mb_menu) menu.append(mb_menu_item) tabs_menu_item = gtk.MenuItem(_("Tabs Position").encode('utf-8')) tabs_menu = gtk.Menu() tabs_up = gtk.RadioMenuItem(None, _("Up").encode('utf-8')) tabs_up.connect("activate", lambda w: self._show_tabs_up(w)) tabs_menu.append(tabs_up) tabs_down = gtk.RadioMenuItem(tabs_up, _("Down").encode('utf-8')) tabs_down.connect("activate", lambda w: self._show_tabs_down(w)) if editorpersistance.prefs.tabs_on_top == True: tabs_up.set_active(True) else: tabs_down.set_active(True) tabs_menu.append(tabs_down) tabs_menu_item.set_submenu(tabs_menu) menu.append(tabs_menu_item) sep = gtk.SeparatorMenuItem() menu.append(sep) show_monitor_info_item = gtk.CheckMenuItem( _("Show Monitor Sequence Profile").encode('utf-8')) show_monitor_info_item.set_active( editorpersistance.prefs.show_sequence_profile) show_monitor_info_item.connect( "toggled", lambda w: middlebar._show_monitor_info_toggled(w)) menu.append(show_monitor_info_item) show_vu_item = gtk.CheckMenuItem( _("Show Master Volume Meter").encode('utf-8')) show_vu_item.set_active(editorpersistance.prefs.show_vu_meter) show_vu_item.connect("toggled", lambda w: self._show_vu_meter(w)) menu.append(show_vu_item) sep = gtk.SeparatorMenuItem() menu.append(sep) interp_menu_item = gtk.MenuItem( _("Monitor Playback Interpolation").encode('utf-8')) interp_menu = gtk.Menu() interp_nearest = gtk.RadioMenuItem( None, _("Nearest Neighbour").encode('utf-8')) interp_nearest.connect( "activate", lambda w: monitorevent. set_monitor_playback_interpolation("nearest")) interp_menu.append(interp_nearest) interp_bilinear = gtk.RadioMenuItem(interp_nearest, _("Bilinear").encode('utf-8')) interp_bilinear.connect( "activate", lambda w: monitorevent. set_monitor_playback_interpolation("bilinear")) interp_menu.append(interp_bilinear) interp_bicubic = gtk.RadioMenuItem(interp_nearest, _("Bicubic").encode('utf-8')) interp_bicubic.set_active(True) interp_bicubic.connect( "activate", lambda w: monitorevent. set_monitor_playback_interpolation("bicubic")) interp_menu.append(interp_bicubic) interp_hyper = gtk.RadioMenuItem(interp_nearest, _("Hyper/Lanczos").encode('utf-8')) interp_hyper.connect( "activate", lambda w: monitorevent.set_monitor_playback_interpolation("hyper")) interp_menu.append(interp_hyper) interp_menu_item.set_submenu(interp_menu) menu.append(interp_menu_item) sep = gtk.SeparatorMenuItem() menu.append(sep) zoom_in_menu_item = gtk.MenuItem(_("Zoom In").encode('utf-8')) zoom_in_menu_item.connect("activate", lambda w: updater.zoom_in()) menu.append(zoom_in_menu_item) zoom_out_menu_item = gtk.MenuItem(_("Zoom Out").encode('utf-8')) zoom_out_menu_item.connect("activate", lambda w: updater.zoom_out()) menu.append(zoom_out_menu_item) zoom_fit_menu_item = gtk.MenuItem(_("Zoom Fit").encode('utf-8')) zoom_fit_menu_item.connect("activate", lambda w: updater.zoom_project_length()) menu.append(zoom_fit_menu_item) menu_item.set_submenu(menu)
def tline_canvas_mouse_pressed(event, frame): """ Mouse event callback from timeline canvas widget """ global mouse_disabled 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) mouse_disabled = True # Set INSERT_MODE 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): mouse_disabled == True # 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: editorstate.edit_mode = editorstate.INSERT_MOVE # 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 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: 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) elif event.button == 3: mouse_disabled == True compositormodes.set_compositor_selected(hit_compositor) guicomponents.display_compositor_popup_menu( event, hit_compositor, compositor_menu_item_activated) 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)): 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): 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: # 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 + CTRL: Select new trimmed clip in one roll trim mode elif (event.button == 1 and (event.get_state() & Gdk.ModifierType.CONTROL_MASK) and EDIT_MODE() == editorstate.ONE_ROLL_TRIM): track = tlinewidgets.get_track(event.y) if track == None: if editorpersistance.prefs.empty_click_exits_trims == True: set_default_edit_mode(True) return success = trimmodes.set_oneroll_mode(track, frame) if (not success ) and editorpersistance.prefs.empty_click_exits_trims == True: set_default_edit_mode(True) return gui.editor_window.set_cursor_to_mode() gui.editor_window.set_mode_selector_to_mode() if not editorpersistance.prefs.quick_enter_trims: mouse_disabled = True else: trimmodes.oneroll_trim_move(event.x, event.y, frame, None) # LEFT BUTTON + CTRL: Select new trimmed clip in two roll trim mode elif (event.button == 1 and (event.get_state() & Gdk.ModifierType.CONTROL_MASK) and EDIT_MODE() == editorstate.TWO_ROLL_TRIM): track = tlinewidgets.get_track(event.y) if track == None: if editorpersistance.prefs.empty_click_exits_trims == True: set_default_edit_mode(True) return success = trimmodes.set_tworoll_mode(track, frame) if (not success ) and editorpersistance.prefs.empty_click_exits_trims == True: set_default_edit_mode(True) return if not editorpersistance.prefs.quick_enter_trims: mouse_disabled = True else: trimmodes.tworoll_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 _init_view_menu(self, menu_item): menu = menu_item.get_submenu() # Full Screen -tem is already in menu, we need separator here sep = Gtk.SeparatorMenuItem() menu.append(sep) mb_menu_item = Gtk.MenuItem(_("Middlebar Layout").encode('utf-8')) mb_menu = Gtk.Menu() tc_left = Gtk.RadioMenuItem() tc_left.set_label(_("Timecode Left").encode('utf-8')) tc_left.set_active(True) tc_left.connect("activate", lambda w: middlebar._show_buttons_TC_LEFT_layout(w)) mb_menu.append(tc_left) tc_middle = Gtk.RadioMenuItem.new_with_label([tc_left], _("Timecode Center").encode('utf-8')) tc_middle.connect("activate", lambda w: middlebar._show_buttons_TC_MIDDLE_layout(w)) mb_menu.append(tc_middle) if editorpersistance.prefs.midbar_tc_left == True: tc_left.set_active(True) else: tc_middle.set_active(True) mb_menu_item.set_submenu(mb_menu) menu.append(mb_menu_item) tabs_menu_item = Gtk.MenuItem(_("Tabs Position").encode('utf-8')) tabs_menu = Gtk.Menu() tabs_up = Gtk.RadioMenuItem() tabs_up.set_label( _("Up").encode('utf-8')) tabs_up.connect("activate", lambda w: self._show_tabs_up(w)) tabs_menu.append(tabs_up) tabs_down = Gtk.RadioMenuItem.new_with_label([tabs_up], _("Down").encode('utf-8')) tabs_down.connect("activate", lambda w: self._show_tabs_down(w)) if editorpersistance.prefs.tabs_on_top == True: tabs_up.set_active(True) else: tabs_down.set_active(True) tabs_menu.append(tabs_down) tabs_menu_item.set_submenu(tabs_menu) menu.append(tabs_menu_item) sep = Gtk.SeparatorMenuItem() menu.append(sep) if not (editorstate.screen_size_small_height() == True or editorstate.screen_size_small_height() == True): show_monitor_info_item = Gtk.CheckMenuItem(_("Show Monitor Sequence Profile").encode('utf-8')) show_monitor_info_item.set_active(editorpersistance.prefs.show_sequence_profile) show_monitor_info_item.connect("toggled", lambda w: middlebar._show_monitor_info_toggled(w)) menu.append(show_monitor_info_item) show_vu_item = Gtk.CheckMenuItem(_("Show Master Volume Meter").encode('utf-8')) show_vu_item.set_active(editorpersistance.prefs.show_vu_meter) show_vu_item.connect("toggled", lambda w: self._show_vu_meter(w)) menu.append(show_vu_item) sep = Gtk.SeparatorMenuItem() menu.append(sep) interp_menu_item = Gtk.MenuItem(_("Monitor Playback Interpolation").encode('utf-8')) interp_menu = Gtk.Menu() interp_nearest = Gtk.RadioMenuItem() interp_nearest.set_label(_("Nearest Neighbour (fast)").encode('utf-8')) interp_nearest.connect("activate", lambda w: monitorevent.set_monitor_playback_interpolation("nearest")) interp_menu.append(interp_nearest) interp_bilinear = Gtk.RadioMenuItem.new_with_label([interp_nearest], _("Bilinear (good)").encode('utf-8')) interp_bilinear.connect("activate", lambda w: monitorevent.set_monitor_playback_interpolation("bilinear")) interp_menu.append(interp_bilinear) interp_bicubic = Gtk.RadioMenuItem.new_with_label([interp_nearest], _("Bicubic (better)").encode('utf-8')) interp_bicubic.set_active(True) interp_bicubic.connect("activate", lambda w: monitorevent.set_monitor_playback_interpolation("bicubic")) interp_menu.append(interp_bicubic) interp_hyper = Gtk.RadioMenuItem.new_with_label([interp_nearest], _("Hyper/Lanczos (best)").encode('utf-8')) interp_hyper.connect("activate", lambda w: monitorevent.set_monitor_playback_interpolation("hyper")) interp_menu.append(interp_hyper) interp_menu_item.set_submenu(interp_menu) menu.append(interp_menu_item) sep = Gtk.SeparatorMenuItem() menu.append(sep) zoom_in_menu_item = Gtk.MenuItem(_("Zoom In").encode('utf-8')) zoom_in_menu_item.connect("activate", lambda w: updater.zoom_in()) menu.append(zoom_in_menu_item) zoom_out_menu_item = Gtk.MenuItem(_("Zoom Out").encode('utf-8')) zoom_out_menu_item.connect("activate", lambda w: updater.zoom_out()) menu.append(zoom_out_menu_item) zoom_fit_menu_item = Gtk.MenuItem(_("Zoom Fit").encode('utf-8')) zoom_fit_menu_item.connect("activate", lambda w: updater.zoom_project_length()) menu.append(zoom_fit_menu_item)