def __init__(self): self.widget = Gtk.VBox() self.view = DEFAULT_VIEW self.match_frame_surface = None self.match_frame = -1 self.edit_tline_frame = -1 self.edit_delta = None self.edit_clip_start_on_tline = -1 self.slip_clip_media_length = -1 self.slip_clip_length = -1 self.clip_name = "clip name" self.match_not_updateble = False # Roll and Slip need this flag to know if surface updates needed # top row self.top_row = Gtk.HBox() self.top_edge_panel = cairoarea.CairoDrawableArea2(1, 1, self._draw_top_panel, use_widget_bg=False) self.top_edge_panel.press_func = self._press_event self.top_row.pack_start(self.top_edge_panel, True, True,0) # mid row self.mid_row = Gtk.HBox() self.left_display = cairoarea.CairoDrawableArea2(1, 1, self._draw_match_frame_left, use_widget_bg=False) black_box = Gtk.EventBox() black_box.add(Gtk.Label()) bg_color = Gdk.Color(red=0.0, green=0.0, blue=0.0) black_box.modify_bg(Gtk.StateType.NORMAL, bg_color) self.monitor = black_box self.right_display = cairoarea.CairoDrawableArea2(1, 1, self._draw_match_frame_right, use_widget_bg=False) self.mid_row.pack_start(self.left_display, False, False,0) self.mid_row.pack_start(self.monitor, True, True,0) self.mid_row.pack_start(self.right_display, False, False,0) # bottom row self.bottom_edge_panel = cairoarea.CairoDrawableArea2(1, 1, self._draw_bottom_panel, use_widget_bg=False) self.bottom_row = Gtk.HBox() self.bottom_row.pack_start(self.bottom_edge_panel, True, True,0) # build pane self.widget.pack_start(self.top_row, False, False,0) self.widget.pack_start(self.mid_row , True, True,0) self.widget.pack_start(self.bottom_row, False, False,0) self.CLOSE_MATCH_ICON = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "close_match.png") self.PATTERN_PRODUCER_ICON = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "pattern_producer_trim_view.png") self.BLANK_ICON = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "blank_trim_view.png") global _widget _widget = self
def __init__(self, callback, w=22, h=22): self.widget = cairoarea.CairoDrawableArea2( w, h, self._draw) self.widget.press_func = self._press_event self.callback = callback self.sensitive = True
def __init__(self, editable_property, parent_editor): self.widget = cairoarea.CairoDrawableArea2(GEOMETRY_EDITOR_WIDTH, GEOMETRY_EDITOR_HEIGHT, self._draw) self.widget.press_func = self._press_event self.widget.motion_notify_func = self._motion_notify_event self.widget.release_func = self._release_event self.widget.mouse_scroll_func = self._mouse_scroll_listener self.clip_length = editable_property.get_clip_length() self.pixel_aspect_ratio = editable_property.get_pixel_aspect_ratio() self.current_clip_frame = 0 # Keyframe tuples are of type (frame, rect, opacity) self.keyframes = None # Set using function AbstractScreenEditor.set_keyframes(). Keyframes are in form [frame, shape, opacity] self.keyframe_parser = None # Function used to parse keyframes to tuples is different for different expressions # Parent editor sets this. self.current_mouse_hit = None self.start_x = None self.start_Y = None self.parent_editor = parent_editor self.source_width = -1 # unscaled source image width, set later self.source_height = -1 # unscaled source image height, set later self.coords = None # Calculated later when we have allocation available
def __init__(self, profile, scroll_width, scroll_height): GObject.GObject.__init__(self) self.scale = 1.0 self.draw_overlays = True self.draw_safe_area = True self.has_safe_area = True self.profile_w = profile.width() self.profile_h = profile.height() self.aspect_ratio = float( profile.sample_aspect_num()) / profile.sample_aspect_den() self.scaled_screen_width = self.profile_w * self.aspect_ratio # scale is gonna be 1.0 here self.scaled_screen_height = self.profile_h self.origo = (MIN_PAD, MIN_PAD) self.bg_buf = None self.write_out_layers = False self.write_file_path = None self.edit_area_update_blocked = False self.edit_area = cairoarea.CairoDrawableArea2( int(self.scaled_screen_width + MIN_PAD * 2), self.profile_h + MIN_PAD * 2, self._draw) self.edit_area.press_func = self._press_event self.edit_area.motion_notify_func = self._motion_notify_event self.edit_area.release_func = self._release_event #self.edit_area.mouse_scroll_func = self._mouse_scroll_listener self.scroll_window = Gtk.ScrolledWindow() # GTK somehow auto scrolls to top left when mouse pressed first after contained widget size change!???! We need to restore position manually. self.scroll_window.get_vscrollbar().connect("change-value", self._vscroll_done) self.scroll_window.get_hscrollbar().connect("change-value", self._hscroll_done) self.last_h_scroll = 0.0 self.last_v_scroll = 0.0 self.scroll_window.add_with_viewport(self.edit_area) self.scroll_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.scroll_window.show_all() self.scroll_window.set_size_request( scroll_width, scroll_height) # +2 to not show scrollbars self.scroll_window.set_overlay_scrolling(False) self.add(self.scroll_window) self.scale_select = None # Set from outside self.edit_layers = [] self.active_layer = None self.edit_target_layer = None self.change_active_layer_for_hit = True self.active_layer_changed_listener = None # interface: listener(new_active_index) # note: vieweditor calls activate_layer( ) when non-active layer hit # here so listener needs only to change its active layer, not call activate_layer( ) here self.set_scale_and_update(1.0)
def __init__(self, meters_count): w = SLOT_W * meters_count h = METER_SLOT_H self.widget = cairoarea.CairoDrawableArea2(w, h, self._draw) self.audio_meters = [] # displays both l_Value and r_value for i in range(0, meters_count): meter = AudioMeter(METER_HEIGHT) if i != meters_count - 1: meter.right_channel.draw_dB = True self.audio_meters.append(meter)
def __init__(self): self.band = SHADOW self.widget = cairoarea.CairoDrawableArea2( 42, 18, self._draw) self.widget.press_func = self._press_event self.SHADOW_X = 0 self.MID_X = 15 self.HI_X = 30 self.band_change_listener = None # monkey patched in at creation site
def __init__(self, parent_editor): w = 16 h = 22 self.widget = cairoarea.CairoDrawableArea2(w, h, self._draw) self.widget.press_func = self._press_event self.parent_editor = parent_editor if parent_editor.editor_type == KEYFRAME_EDITOR: self.surface = cairo.ImageSurface.create_from_png( respaths.IMAGE_PATH + "slider_icon.png") else: self.surface = cairo.ImageSurface.create_from_png( respaths.IMAGE_PATH + "kf_active.png") self.surface_x = 3 self.surface_y = 8
def __init__(self): self.meter = AudioMeter(METER_HEIGHT + 40) self.meter.x_pad_l = 6 self.meter.x_pad_r = 14 self.meter.right_channel.draw_dB = True self.meter.right_channel.dB_x_pad = -14 self.meter.meter_width = 5 self.top_pad = 14 self.meter.right_channel.y_top_pad = self.top_pad self.meter.left_channel.y_top_pad = self.top_pad w = SLOT_W - 40 h = METER_SLOT_H + 2 + 40 self.canvas = cairoarea.CairoDrawableArea2(w, h, self._draw) self.widget = Gtk.VBox(False, 0) self.widget.pack_start(self.canvas, False, False, 0)
def __init__(self, parent, clip, length=-1): GObject.GObject.__init__(self) self.frame = 0 self.parent = parent self.preview_surface = None # gets set by parent on preview completion self.preview_info = Gtk.Label() self.preview_info.set_markup("<small>" + _("no preview") + "</small>") preview_info_row = Gtk.HBox() preview_info_row.pack_start(self.preview_info, False, False, 0) preview_info_row.pack_start(Gtk.Label(), True, True, 0) preview_info_row.set_margin_top(6) preview_info_row.set_margin_bottom(8) self.preview_monitor = cairoarea.CairoDrawableArea2( MONITOR_WIDTH, MONITOR_HEIGHT, self._draw_preview) self.no_preview_icon = cairo.ImageSurface.create_from_png( respaths.IMAGE_PATH + NO_PREVIEW_FILE) # Control row self.frame_display = Gtk.Label(_("Clip Frame")) self.frame_display.set_margin_right(2) if length == -1: length = clip.clip_out - clip.clip_in self.frame_select = Gtk.SpinButton.new_with_range(0, length, 1) self.frame_select.set_value(0) self.preview_button = Gtk.Button(_("Preview")) self.preview_button.connect("clicked", lambda w: parent.render_preview_frame()) control_panel = Gtk.HBox(False, 2) control_panel.pack_start(self.frame_display, False, False, 0) control_panel.pack_start(self.frame_select, False, False, 0) control_panel.pack_start(Gtk.Label(), True, True, 0) control_panel.pack_start(self.preview_button, False, False, 0) self.pack_start(preview_info_row, False, False, 0) self.pack_start(self.preview_monitor, False, False, 0) self.pack_start(guiutils.pad_label(4, 4), False, False, 0) self.pack_start(control_panel, False, False, 0) self.pack_start(Gtk.Label(), True, True, 0)
def __init__(self, profile, scroll_width, scroll_height): GObject.GObject.__init__(self) self.scale = 1.0 self.draw_overlays = True self.draw_safe_area = True self.has_safe_area = True self.profile_w = profile.width() self.profile_h = profile.height() self.aspect_ratio = float( profile.sample_aspect_num()) / profile.sample_aspect_den() self.scaled_screen_width = self.profile_w * self.aspect_ratio # scale is gonna be 1.0 here self.scaled_screen_height = self.profile_h self.origo = (MIN_PAD, MIN_PAD) self.bg_buf = None self.write_out_layers = False self.write_file_path = None self.edit_area = cairoarea.CairoDrawableArea2( int(self.scaled_screen_width + MIN_PAD * 2), self.profile_h + MIN_PAD * 2, self._draw) self.edit_area.press_func = self._press_event self.edit_area.motion_notify_func = self._motion_notify_event self.edit_area.release_func = self._release_event self.scroll_window = Gtk.ScrolledWindow() self.scroll_window.add_with_viewport(self.edit_area) self.scroll_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.scroll_window.show_all() self.scroll_window.set_size_request( scroll_width, scroll_height) # +2 to not show scrollbars self.add(self.scroll_window) self.edit_layers = [] self.active_layer = None self.edit_target_layer = None self.change_active_layer_for_hit = True self.active_layer_changed_listener = None # interface: listener(new_active_index) # note: vieweditor calls activate_layer( ) when non-active layer hit # here so listener needs only to change its active layer, not call activate_layer( ) here self.set_scale_and_update(1.0)
def __init__(self, edit_listener, width=260, height=260): self.W = width self.H = height self.widget = cairoarea.CairoDrawableArea2( self.W, self.H, self._draw) self.widget.press_func = self._press_event self.widget.motion_notify_func = self._motion_notify_event self.widget.release_func = self._release_event self.X_PAD = 12 self.Y_PAD = 12 self.CIRCLE_HALF = 8 self.cursor_x = self.X_PAD self.cursor_y = self.H - self.Y_PAD self.edit_listener = edit_listener self.hue = 0.0 self.saturation = 0.0 self.draw_saturation_gradient = True self.selection_cursor = SELECT_CIRCLE
def __init__(self, pix_size, curve, edit_listener): BoxEditor.__init__(self, pix_size) self.curve = curve # lutfilter.CRCurve global BOX_LINE_COLOR, CURVE_COLOR self.curve_color = CURVE_COLOR self.edit_listener = edit_listener # Needs to implement "curve_edit_done()" self.widget = cairoarea.CairoDrawableArea2( self.pix_size + 2, self.pix_size + 2, self._draw) self.widget.press_func = self._press_event self.widget.motion_notify_func = self._motion_notify_event self.widget.release_func = self._release_event self.last_point = None self.edit_on = False if editorpersistance.prefs.dark_theme == True: BOX_LINE_COLOR = (0.8, 0.8, 0.8) CURVE_COLOR = (0.8, 0.8, 0.8) self.curve_color = CURVE_COLOR
def __init__(self, button_width, button_height, button_y, widget_width, widget_height): # Create widget and connect listeners self.widget = cairoarea.CairoDrawableArea2(widget_width, widget_height, self._draw) self.widget.press_func = self._press_event self.widget.motion_notify_func = self._motion_notify_event self.widget.release_func = self._release_event self.pressed_callback_funcs = None # set later self.released_callback_funcs = None # set later self.pressed_button = -1 self.degrees = M_PI / 180.0 self.button_width = button_width self.button_height = button_height self.button_y = button_y self.button_x = 0 # set when first allocation known by extending class self.icons = [] self.image_x = [] self.image_y = [] self.sensitive = [] if editorpersistance.prefs.buttons_style == editorpersistance.GLASS_STYLE: self.glass_style = True else: self.glass_style = False self.no_decorations = False # Dark theme comes with flat buttons self.dark_theme = False if editorpersistance.prefs.theme != appconsts.LIGHT_THEME: self.glass_style = False self.dark_theme = True self.draw_button_gradients = True # old code artifact, remove (set False at object creation site to kill all gradients)
def __init__(self): GObject.GObject.__init__(self) #self.connect("delete-event", lambda w, e:_shutdown()) app_icon = GdkPixbuf.Pixbuf.new_from_file(respaths.IMAGE_PATH + "flowbladetoolicon.png") self.set_icon(app_icon) # Animation selector menu launcher row self.animation_label = Gtk.Label(_animation_instance.info.name) self.present_event_box = Gtk.EventBox() self.present_event_box.add(self.animation_label) self.present_event_box.connect("button-press-event", animations_menu_launched) self.script_menu = toolguicomponents.PressLaunch( animations_menu_launched) selector_row = Gtk.HBox(False, 2) selector_row.pack_start(self.present_event_box, False, False, 0) selector_row.pack_start(self.script_menu.widget, False, False, 0) # Edit area self.value_edit_frame = Gtk.Frame() self.value_edit_frame.set_shadow_type(Gtk.ShadowType.IN) self.value_edit_frame.set_size_request(EDIT_PANEL_WIDTH + 10, EDIT_PANEL_HEIGHT + 10) self.value_edit_box = None # Monitor self.preview_monitor = cairoarea.CairoDrawableArea2( MONITOR_WIDTH, MONITOR_HEIGHT, self._draw_preview) # Render panel self.out_folder = Gtk.FileChooserButton(_("Select Folder")) self.out_folder.set_action(Gtk.FileChooserAction.SELECT_FOLDER) self.out_folder.connect("selection-changed", self.folder_selection_changed) self.out_label = Gtk.Label(label=_("Frames Folder:")) self.frame_name = Gtk.Entry() self.frame_name.set_text("frame") self.extension_label = Gtk.Label() self.extension_label.set_markup("<small>XXXX.png</small>") out_folder_row = guiutils.get_left_justified_box([self.out_label, guiutils.pad_label(12, 2), \ self.out_folder, guiutils.pad_label(24, 2), self.frame_name, \ guiutils.pad_label(2, 2), self.extension_label]) self.encode_check_label = Gtk.Label(_("Encode Video")) self.encode_check = Gtk.CheckButton() self.encode_check.set_active(False) self.encode_check.connect("toggled", lambda w: self.update_encode_sensitive()) self.encode_settings_button = Gtk.Button(_("Encoding settings")) self.encode_settings_button.connect( "clicked", lambda w: _encode_settings_clicked()) self.encode_desc = Gtk.Label() self.encode_desc.set_markup("<small>" + _("not set") + "</small>") self.encode_desc.set_ellipsize(Pango.EllipsizeMode.END) self.encode_desc.set_max_width_chars(32) encode_row = Gtk.HBox(False, 2) encode_row.pack_start(self.encode_check, False, False, 0) encode_row.pack_start(self.encode_check_label, False, False, 0) encode_row.pack_start(guiutils.pad_label(48, 12), False, False, 0) encode_row.pack_start(self.encode_settings_button, False, False, 0) encode_row.pack_start(guiutils.pad_label(6, 12), False, False, 0) encode_row.pack_start(self.encode_desc, False, False, 0) encode_row.pack_start(Gtk.Label(), True, True, 0) encode_row.set_margin_bottom(6) self.render_percentage = Gtk.Label("") self.status_no_render = _("Set Frames Folder for valid render") self.render_status_info = Gtk.Label() self.render_status_info.set_markup("<small>" + self.status_no_render + "</small>") render_status_row = Gtk.HBox(False, 2) render_status_row.pack_start(self.render_percentage, False, False, 0) render_status_row.pack_start(Gtk.Label(), True, True, 0) render_status_row.pack_start(self.render_status_info, False, False, 0) render_status_row.set_margin_bottom(6) self.render_progress_bar = Gtk.ProgressBar() self.render_progress_bar.set_valign(Gtk.Align.CENTER) self.stop_button = guiutils.get_sized_button(_("Stop"), 100, 32) self.stop_button.connect("clicked", lambda w: abort_render()) self.render_button = guiutils.get_sized_button(_("Render"), 100, 32) self.render_button.connect("clicked", lambda w: render_output()) render_row = Gtk.HBox(False, 2) render_row.pack_start(self.render_progress_bar, True, True, 0) render_row.pack_start(guiutils.pad_label(12, 2), False, False, 0) render_row.pack_start(self.stop_button, False, False, 0) render_row.pack_start(self.render_button, False, False, 0) render_vbox = Gtk.VBox(False, 2) render_vbox.pack_start(encode_row, False, False, 0) render_vbox.pack_start(Gtk.Label(), True, True, 0) render_vbox.pack_start(out_folder_row, False, False, 0) render_vbox.pack_start(Gtk.Label(), True, True, 0) render_vbox.pack_start(render_status_row, False, False, 0) render_vbox.pack_start(render_row, False, False, 0) render_vbox.pack_start(guiutils.pad_label(24, 24), False, False, 0) # Build window left_panel = Gtk.VBox(False, 2) left_panel.pack_start(selector_row, False, False, 0) left_panel.pack_start(self.value_edit_frame, True, True, 0) right_panel = Gtk.VBox(False, 2) right_panel.pack_start(self.preview_monitor, False, False, 0) right_panel.pack_start(render_vbox, True, True, 0) #right_panel.pack_start(self.edit_panel, False, False, 0) pane = Gtk.HBox(False, 2) pane.pack_start(left_panel, False, False, 0) pane.pack_start(right_panel, False, False, 0) align = guiutils.set_margins(pane, 12, 12, 12, 12) # Connect global key listener #self.connect("key-press-event", _global_key_down_listener) # Set pane and show window self.add(align) self.set_title(_("Natron Animations")) self.set_position(Gtk.WindowPosition.CENTER) #self.set_widgets_sensitive(False) self.show_all() self.set_resizable(False) #self.set_active_state(False) self.update_render_status_info() self.change_animation()
def __init__(self): GObject.GObject.__init__(self) self.connect("delete-event", lambda w, e:_shutdown()) app_icon = GdkPixbuf.Pixbuf.new_from_file(respaths.IMAGE_PATH + "flowbladetoolicon.png") self.set_icon(app_icon) #---- LEFT PANEL hamburger_launcher_surface = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "hamburger.png") self.hamburger_launcher = guicomponents.PressLaunch(_hamburger_launch_pressed, hamburger_launcher_surface) guiutils.set_margins(self.hamburger_launcher.widget, 0, 8, 0, 8) # Animation selector menu launcher row self.animation_label = Gtk.Label(_animation_instance.info.name) self.present_event_box = Gtk.EventBox() self.present_event_box.add(self.animation_label) self.present_event_box.connect("button-press-event", animations_menu_launched) self.script_menu = toolguicomponents.PressLaunch(animations_menu_launched) selector_row = Gtk.HBox(False, 2) selector_row.pack_start(self.hamburger_launcher.widget, False, False, 0) selector_row.pack_start(self.present_event_box, False, False, 0) selector_row.pack_start(self.script_menu.widget, False, False, 0) selector_row.set_margin_top(2) # Edit area self.value_edit_frame = Gtk.Frame() self.value_edit_frame.set_shadow_type(Gtk.ShadowType.IN) self.value_edit_frame.set_size_request(EDIT_PANEL_WIDTH+ 10, EDIT_PANEL_HEIGHT + 10) self.value_edit_box = None #---- RIGHT PANEL self.preview_info = Gtk.Label() self.preview_info.set_markup("<small>" + _("no preview") + "</small>" ) preview_info_row = Gtk.HBox() preview_info_row.pack_start(self.preview_info, False, False, 0) preview_info_row.pack_start(Gtk.Label(), True, True, 0) preview_info_row.set_margin_top(6) preview_info_row.set_margin_bottom(8) preview_info_row.set_size_request(200, 10) # Monitor self.preview_monitor = cairoarea.CairoDrawableArea2(MONITOR_WIDTH, MONITOR_HEIGHT, self._draw_preview) # Position control panel self.pos_bar = positionbar.PositionBar(False) self.pos_bar.set_listener(self.position_listener) pos_bar_frame = Gtk.Frame() pos_bar_frame.add(self.pos_bar.widget) pos_bar_frame.set_shadow_type(Gtk.ShadowType.ETCHED_IN) pos_bar_frame.set_margin_top(5) pos_bar_frame.set_margin_bottom(4) pos_bar_frame.set_margin_left(6) pos_bar_frame.set_margin_right(2) self.preview_button = Gtk.Button(_("Preview Frame")) self.preview_button.connect("clicked", lambda w: render_preview_frame()) control_panel = Gtk.HBox(False, 2) control_panel.pack_start(pos_bar_frame, True, True, 0) control_panel.pack_start(guiutils.pad_label(2, 2), False, False, 0) control_panel.pack_start(self.preview_button, False, False, 0) # Range setting in_label = Gtk.Label(_("Start:")) self.range_in = Gtk.SpinButton.new_with_range(1, 249, 1) out_label = Gtk.Label(_("End:")) self.range_out = Gtk.SpinButton.new_with_range(2, 250, 1) self.range_in.set_value(1) self.range_out.set_value(250) self.range_in.connect("value-changed", self.range_changed) self.range_out.connect("value-changed", self.range_changed) pos_label = Gtk.Label(_("Frame:")) self.pos_info = Gtk.Label(_("1")) range_row = Gtk.HBox(False, 2) range_row.pack_start(in_label, False, False, 0) range_row.pack_start(self.range_in, False, False, 0) range_row.pack_start(Gtk.Label(), True, True, 0) range_row.pack_start(pos_label, False, False, 0) range_row.pack_start(self.pos_info, False, False, 0) range_row.pack_start(Gtk.Label(), True, True, 0) range_row.pack_start(out_label, False, False, 0) range_row.pack_start(self.range_out, False, False, 0) range_row.set_margin_bottom(24) range_row.set_margin_left(5) # Render panel self.out_folder = Gtk.FileChooserButton(_("Select Folder")) self.out_folder.set_action(Gtk.FileChooserAction.SELECT_FOLDER) self.out_folder.connect("selection-changed", self.folder_selection_changed) self.out_label = Gtk.Label(label=_("Frames Folder:")) self.frame_name = Gtk.Entry() self.frame_name.set_text("frame") self.extension_label = Gtk.Label() self.extension_label.set_markup("<small>XXXX.png</small>") out_folder_row = guiutils.get_left_justified_box([self.out_label, guiutils.pad_label(12, 2), \ self.out_folder, guiutils.pad_label(24, 2), self.frame_name, \ guiutils.pad_label(2, 2), self.extension_label]) self.encode_check_label = Gtk.Label(_("Encode Video")) self.encode_check = Gtk.CheckButton() self.encode_check.set_active(False) self.encode_check.connect("toggled", lambda w:self.update_encode_sensitive()) self.encode_settings_button = Gtk.Button(_("Encoding settings")) self.encode_settings_button.connect("clicked", lambda w:_encode_settings_clicked()) self.encode_desc = Gtk.Label() self.encode_desc.set_markup("<small>" + _("not set") + "</small>") self.encode_desc.set_ellipsize(Pango.EllipsizeMode.END) self.encode_desc.set_max_width_chars(32) encode_row = Gtk.HBox(False, 2) encode_row.pack_start(self.encode_check, False, False, 0) encode_row.pack_start(self.encode_check_label, False, False, 0) encode_row.pack_start(guiutils.pad_label(48, 12), False, False, 0) encode_row.pack_start(self.encode_settings_button, False, False, 0) encode_row.pack_start(guiutils.pad_label(6, 12), False, False, 0) encode_row.pack_start(self.encode_desc, False, False, 0) encode_row.pack_start(Gtk.Label(), True, True, 0) encode_row.set_margin_bottom(6) format_label = Gtk.Label(_("Natron Render Format:")) self.format_selector = Gtk.ComboBoxText() # filled later when current sequence known for format_desc in NATRON_RENDER_FORMATS: self.format_selector.append_text(format_desc) self.format_selector.set_active(NATRON_DEFAULT_RENDER_FORMAT) format_select_row = Gtk.HBox(False, 2) format_select_row.pack_start(format_label, False, False, 0) format_select_row.pack_start(guiutils.pad_label(12, 2), False, False, 0) format_select_row.pack_start(self.format_selector, False, False, 0) format_select_row.set_margin_top(24) self.render_percentage = Gtk.Label("") self.status_no_render = _("Set Frames Folder for valid render") self.render_status_info = Gtk.Label() self.render_status_info.set_markup("<small>" + self.status_no_render + "</small>") render_status_row = Gtk.HBox(False, 2) render_status_row.pack_start(self.render_percentage, False, False, 0) render_status_row.pack_start(Gtk.Label(), True, True, 0) render_status_row.pack_start(self.render_status_info, False, False, 0) render_status_row.set_margin_bottom(6) self.render_progress_bar = Gtk.ProgressBar() self.render_progress_bar.set_valign(Gtk.Align.CENTER) self.stop_button = guiutils.get_sized_button(_("Stop"), 100, 32) #self.stop_button.connect("clicked", lambda w:abort_render()) self.render_button = guiutils.get_sized_button(_("Render"), 100, 32) self.render_button.connect("clicked", lambda w:render_output()) render_row = Gtk.HBox(False, 2) render_row.pack_start(self.render_progress_bar, True, True, 0) render_row.pack_start(guiutils.pad_label(12, 2), False, False, 0) render_row.pack_start(self.stop_button, False, False, 0) render_row.pack_start(self.render_button, False, False, 0) render_vbox = Gtk.VBox(False, 2) render_vbox.pack_start(encode_row, False, False, 0) render_vbox.pack_start(Gtk.Label(), True, True, 0) render_vbox.pack_start(out_folder_row, False, False, 0) render_vbox.pack_start(format_select_row, False, False, 0) render_vbox.pack_start(Gtk.Label(), True, True, 0) render_vbox.pack_start(render_status_row, False, False, 0) render_vbox.pack_start(render_row, False, False, 0) render_vbox.pack_start(guiutils.pad_label(24, 24), False, False, 0) render_vbox.set_margin_left(8) # Bottomrow self.load_anim = Gtk.Button(_("Load Animation")) self.load_anim.connect("clicked", lambda w:load_script_dialog(_load_script_dialog_callback)) self.save_anim = Gtk.Button(_("Save Animation")) self.save_anim.connect("clicked", lambda w:save_script_dialog(_save_script_dialog_callback)) exit_b = guiutils.get_sized_button(_("Close"), 150, 32) exit_b.connect("clicked", lambda w:_shutdown()) editor_buttons_row = Gtk.HBox() editor_buttons_row.pack_start(self.load_anim, False, False, 0) editor_buttons_row.pack_start(self.save_anim, False, False, 0) editor_buttons_row.pack_start(Gtk.Label(), True, True, 0) editor_buttons_row.pack_start(exit_b, False, False, 0) # Build window left_panel = Gtk.VBox(False, 2) left_panel.pack_start(selector_row, False, False, 0) left_panel.pack_start(self.value_edit_frame, True, True, 0) right_panel = Gtk.VBox(False, 0) right_panel.pack_start(preview_info_row, False, False, 0) right_panel.pack_start(self.preview_monitor, False, False, 0) right_panel.pack_start(control_panel, False, False, 0) right_panel.pack_start(range_row, False, False, 0) right_panel.pack_start(render_vbox, True, True, 0) right_panel.set_margin_left(4) sides_pane = Gtk.HBox(False, 2) sides_pane.pack_start(left_panel, False, False, 0) sides_pane.pack_start(right_panel, False, False, 0) pane = Gtk.VBox(False, 2) pane.pack_start(sides_pane, False, False, 0) pane.pack_start(editor_buttons_row, False, False, 0) align = guiutils.set_margins(pane, 2, 12, 12, 12) # Connect global key listener #self.connect("key-press-event", _global_key_down_listener) # Set pane and show window self.add(align) self.set_title(_("Natron Animations")) self.set_position(Gtk.WindowPosition.CENTER) #self.set_widgets_sensitive(False) self.show_all() self.set_resizable(False) #self.set_active_state(False) self.update_render_status_info() self.change_animation()
def __init__(self): GObject.GObject.__init__(self) self.set_modal(True) self.set_transient_for(gui.editor_window.window) self.set_title(_("Add Media Plugin")) self.connect("delete-event", lambda w, e:_close_window()) # categories_list is list of form [("category_name", [category_items]), ...] # with category_items list of form ["item_name", ...] self.plugin_select = guicomponents.CategoriesModelComboBoxWithData(_get_categories_list()) self.plugin_select.set_changed_callback(self._plugin_selection_changed) plugin_label = Gtk.Label(label=_("Media Plugin:")) plugin_select_row = guiutils.get_two_column_box(plugin_label, self.plugin_select.widget, 220) global MONITOR_HEIGHT MONITOR_HEIGHT = int(MONITOR_WIDTH * float(current_sequence().profile.display_aspect_den()) / float(current_sequence().profile.display_aspect_num())) self.screenshot_canvas = cairoarea.CairoDrawableArea2(MONITOR_WIDTH, MONITOR_HEIGHT, self._draw_screenshot) screenshot_row = guiutils.get_centered_box([self.screenshot_canvas ]) guiutils.set_margins(screenshot_row, 12, 12, 0, 0) self.frame_display = Gtk.Label(_("Clip Frame")) self.frame_display.set_margin_right(2) self.frame_select = Gtk.SpinButton.new_with_range (0, 200, 1) self.frame_select.set_value(0) self.preview_button = Gtk.Button(_("Preview")) self.preview_button.connect("clicked", lambda w: self._show_preview()) control_panel = Gtk.HBox(False, 2) control_panel.pack_start(self.frame_display, False, False, 0) control_panel.pack_start(self.frame_select, False, False, 0) control_panel.pack_start(Gtk.Label(), True, True, 0) control_panel.pack_start(self.preview_button, False, False, 0) guiutils.set_margins(control_panel, 0, 24, 0, 0) self.editors_box = Gtk.HBox(False, 0) self.editors_box.set_size_request(270, 185) self.import_select = Gtk.ComboBoxText() self.import_select.append_text(_("Add as Container Clip")) self.import_select.append_text(_("Add as Rendered Media")) self.import_select.set_active(0) self.import_select.connect("changed", lambda w: self._export_action_changed(w)) import_row = guiutils.get_left_justified_box([Gtk.Label(_("Import Action:")), guiutils.pad_label(12,12), self.import_select]) guiutils.set_margins(import_row,8,0,0,0) self.length_spin = Gtk.SpinButton.new_with_range (25, 100000, 1) self.length_spin.set_value(200) length_row = guiutils.get_left_justified_box([Gtk.Label(_("Plugin Media Length:")), guiutils.pad_label(12,12), self.length_spin]) self.encoding_button = Gtk.Button(_("Encode settings")) self.encoding_button.set_sensitive(False) self.encoding_button.connect("clicked", lambda w: self._set_encoding_button_pressed()) self.encoding_info = Gtk.Label() self.encoding_info.set_markup("<small>" + "Not set" + "</small>") self.encoding_info.set_max_width_chars(32) self.encoding_info.set_sensitive(False) encoding_row = guiutils.get_left_justified_box([self.encoding_button, guiutils.pad_label(12,12), self.encoding_info]) import_panel = Gtk.VBox(False, 2) import_panel.pack_start(length_row, False, False, 0) import_panel.pack_start(import_row, False, False, 0) import_panel.pack_start(encoding_row, False, False, 0) import_panel.pack_start(Gtk.Label(), True, True, 0) values_row = Gtk.HBox(True, 8) values_row.pack_start(self.editors_box, False, False, 0) values_row.pack_start(import_panel, False, False, 0) #values_row. close_button = guiutils.get_sized_button(_("Close"), 150, 32) close_button.connect("clicked", lambda w: _close_clicked()) self.add_button = guiutils.get_sized_button(_("Add Media Plugin"), 150, 32) self.add_button.connect("clicked", lambda w: _add_media_plugin()) #self.load_info_2 = Gtk.Label() buttons_row = Gtk.HBox(False, 0) #buttons_row.pack_start(self.load_info_2, False, False, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start(close_button, False, False, 0) buttons_row.pack_start(self.add_button, False, False, 0) guiutils.set_margins(buttons_row, 24, 0, 0, 0) vbox = Gtk.VBox(False, 2) vbox.pack_start(plugin_select_row, False, False, 0) vbox.pack_start(screenshot_row, False, False, 0) vbox.pack_start(control_panel, False, False, 0) vbox.pack_start(values_row, False, False, 0) vbox.pack_start(Gtk.Label(), True, True, 0) vbox.pack_start(buttons_row, False, False, 0) alignment = guiutils.set_margins(vbox, 8, 8, 12, 12) self.add(alignment) self.set_position(Gtk.WindowPosition.CENTER) self.show_all() self.plugin_select.set_selected(_plugins[0].name) self._display_current_render_data()