def get_project_info_panel(): project_name_label = Gtk.Label(label=PROJECT().name) name_row = guiutils.get_left_justified_box([project_name_label]) name_panel = guiutils.get_named_frame(_("Name"), name_row, 4) profile = PROJECT().profile desc_label = Gtk.Label(label=profile.description()) info_box = guicomponents.get_profile_info_small_box(profile) vbox = Gtk.VBox() vbox.pack_start(guiutils.get_left_justified_box([desc_label]), False, True, 0) vbox.pack_start(info_box, False, True, 0) profile_panel = guiutils.get_named_frame(_("Profile"), vbox, 4) events_list = ProjectEventListView() events_list.fill_data_model() events_panel = guiutils.get_named_frame(_("Project Events"), events_list, 4) project_info_vbox = Gtk.VBox() project_info_vbox.pack_start(name_panel, False, True, 0) project_info_vbox.pack_start(profile_panel, False, True, 0) project_info_vbox.set_size_request(250, PROJECT_INFO_PANEL_HEIGHT) project_info_hbox = Gtk.HBox() project_info_hbox.pack_start(project_info_vbox, False, False, 0) project_info_hbox.pack_start(events_panel, True, True, 0) widgets.project_name_label = project_name_label widgets.desc_label = desc_label widgets.info_box = info_box widgets.events_list = events_list return project_info_hbox
def __init__(self, autosave_file): self.is_shutting_down = False # Window self.window = Gtk.Window(Gtk.WindowType.TOPLEVEL) self.window.connect("delete-event", lambda w, e:self.close_window()) app_icon = GdkPixbuf.Pixbuf.new_from_file(respaths.IMAGE_PATH + "flowbladebatchappicon.png") self.window.set_icon(app_icon) self.last_saved_job = None self.start_time = time.monotonic() self.autosave_file = autosave_file self.render_progress_bar = Gtk.ProgressBar() self.render_progress_bar.set_text("0 %") prog_align = guiutils.set_margins(self.render_progress_bar, 0, 0, 6, 0) prog_align.set_size_request(550, 30) self.elapsed_value = Gtk.Label() self.current_render_value = Gtk.Label() self.items_value = Gtk.Label() est_label = guiutils.get_right_justified_box([guiutils.bold_label(_("Elapsed:"))]) items_label = guiutils.get_right_justified_box([guiutils.bold_label(_("Jobs Remaining Item:"))]) current_label = guiutils.get_right_justified_box([guiutils.bold_label(_("Current Job:"))]) est_label.set_size_request(250, 20) current_label.set_size_request(250, 20) items_label.set_size_request(250, 20) self.status_label = Gtk.Label() self.status_label.set_text(_("Rendering")) cancel_button = Gtk.Button(_("Cancel All Jobs")) cancel_button.connect("clicked", lambda w: self.cancel_all()) control_row = Gtk.HBox(False, 0) control_row.pack_start(self.status_label, False, False, 0) control_row.pack_start(Gtk.Label(), True, True, 0) control_row.pack_start(cancel_button, False, False, 0) info_vbox = Gtk.VBox(False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([est_label, self.elapsed_value]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([items_label, self.items_value]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([current_label, self.current_render_value]), False, False, 0) progress_vbox = Gtk.VBox(False, 2) progress_vbox.pack_start(info_vbox, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 8), False, False, 0) progress_vbox.pack_start(prog_align, False, False, 0) progress_vbox.pack_start(control_row, False, False, 0) alignment = guiutils.set_margins(progress_vbox, 12, 12, 12, 12) alignment.show_all() # Set pane and show window self.window.add(alignment) self.window.set_title(_("Jobs Render Progress")) self.window.set_position(Gtk.WindowPosition.CENTER) self.window.show_all()
def get_project_info_panel(): project_name_label = gtk.Label(PROJECT().name) name_row = guiutils.get_left_justified_box([project_name_label]) name_panel = guiutils.get_named_frame(_("Name"), name_row, 4) profile = PROJECT().profile desc_label = gtk.Label(profile.description()) info_box = guicomponents.get_profile_info_small_box(profile) vbox = gtk.VBox() vbox.pack_start(guiutils.get_left_justified_box([desc_label]), False, True, 0) vbox.pack_start(info_box, False, True, 0) profile_panel = guiutils.get_named_frame(_("Profile"), vbox, 4) events_list = ProjectEventListView() events_list.set_size_request(270, 300) events_list.fill_data_model() events_panel = guiutils.get_named_frame(_("Project Events"), events_list, 4) project_info_vbox = gtk.VBox() project_info_vbox.pack_start(name_panel, False, True, 0) project_info_vbox.pack_start(profile_panel, False, True, 0) project_info_vbox.pack_start(events_panel, True, True, 0) align = gtk.Alignment(0.5, 0.5, 1.0, 1.0) align.set_padding(0, 0, 0, 0) align.add(project_info_vbox) widgets.project_name_label = project_name_label widgets.desc_label = desc_label widgets.info_box = info_box widgets.events_list = events_list return align
def _create_rotomask_editor(filt, editable_properties): property_editor_widgets_create_func = lambda: _create_rotomask_property_editor_widgets(editable_properties) kf_json_prop = filter(lambda ep: ep.name == "spline", editable_properties)[0] kf_editor = keyframeeditor.RotoMaskKeyFrameEditor(kf_json_prop, propertyparse.rotomask_json_value_string_to_kf_array) kfs_value_label = Gtk.Label(str(len(kf_editor.clip_editor.keyframes))) kf_row = guiutils.get_left_justified_box([guiutils.pad_label(12, 12), guiutils.bold_label(_("Keyframes") + ": "), kfs_value_label]) kf, curve_points = kf_editor.clip_editor.keyframes[0] curve_points_value_label = Gtk.Label(str(len(curve_points))) cps_row = guiutils.get_left_justified_box([guiutils.pad_label(12, 12), guiutils.bold_label(_("Curve Points") + ": "), curve_points_value_label]) value_labels = [kfs_value_label, curve_points_value_label] lauch_button = Gtk.Button(_("Lauch RotoMask editor")) lauch_button.connect("clicked", lambda b:_roto_lauch_pressed(filt, editable_properties, property_editor_widgets_create_func, value_labels)) vbox = Gtk.VBox(False, 4) vbox.pack_start(guiutils.bold_label(_("RotoMask info")), False, False, 0) vbox.pack_start(kf_row, False, False, 0) vbox.pack_start(cps_row, False, False, 0) vbox.pack_start(guiutils.pad_label(12, 12), False, False, 0) vbox.pack_start(lauch_button, False, False, 0) vbox.pack_start(Gtk.Label(), True, True, 0) vbox.no_separator = True return vbox
def get_top_level_project_info_panel(): project_name_label = Gtk.Label(label=PROJECT().name) name_row = guiutils.get_left_justified_box([project_name_label]) name_panel = guiutils.get_named_frame(_("Project"), name_row, 0, 6, 4, _("A <b>Project</b> contains one or more <b>Sequences</b> of edited media and a collection of media files stored in <b>Bins.</b>")) profile = PROJECT().profile desc_label = Gtk.Label(label=profile.description()) info_box = guicomponents.get_profile_info_small_box(profile) vbox = Gtk.VBox() vbox.pack_start(guiutils.get_left_justified_box([desc_label]), False, True, 0) vbox.pack_start(info_box, False, True, 0) profile_panel = guiutils.get_named_frame(_("Profile"), vbox, 0, 6, 4, _("<b>Profile</b> determines frame rate per second, image size in pixels and pixel aspect ratio for all <b>Sequences</b> in <b>Project</b> .")) events_list = ProjectEventListView() events_list.fill_data_model() events_panel = guiutils.get_named_frame(_("Project Events"), events_list, 0) project_info_vbox = Gtk.VBox() project_info_vbox.pack_start(name_panel, False, True, 0) project_info_vbox.pack_start(profile_panel, False, True, 0) guiutils.set_margins(project_info_vbox, 4,4,4,4) widgets.project_name_label = project_name_label widgets.desc_label = desc_label widgets.info_box = info_box widgets.events_list = events_list return project_info_vbox
def __init__(self): self.dialog = gtk.Dialog( _("Creating Proxy Files"), gui.editor_window.window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Stop").encode('utf-8'), gtk.RESPONSE_REJECT)) self.render_progress_bar = gtk.ProgressBar() self.render_progress_bar.set_text("0 %") prog_align = gtk.Alignment(0.5, 0.5, 1.0, 0.0) prog_align.set_padding(0, 0, 0, 0) prog_align.add(self.render_progress_bar) prog_align.set_size_request(550, 30) self.elapsed_value = gtk.Label() self.current_render_value = gtk.Label() self.items_value = gtk.Label() est_label = guiutils.get_right_justified_box( [guiutils.bold_label(_("Elapsed:"))]) current_label = guiutils.get_right_justified_box( [guiutils.bold_label(_("Current Media File:"))]) items_label = guiutils.get_right_justified_box( [guiutils.bold_label(_("Rendering Item:"))]) est_label.set_size_request(250, 20) current_label.set_size_request(250, 20) items_label.set_size_request(250, 20) info_vbox = gtk.VBox(False, 0) info_vbox.pack_start( guiutils.get_left_justified_box([est_label, self.elapsed_value]), False, False, 0) info_vbox.pack_start( guiutils.get_left_justified_box( [current_label, self.current_render_value]), False, False, 0) info_vbox.pack_start( guiutils.get_left_justified_box([items_label, self.items_value]), False, False, 0) progress_vbox = gtk.VBox(False, 2) progress_vbox.pack_start(info_vbox, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 8), False, False, 0) progress_vbox.pack_start(prog_align, False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(12, 12, 12, 12) alignment.add(progress_vbox) alignment.show_all() self.dialog.vbox.pack_start(alignment, True, True, 0) self.dialog.set_has_separator(False) self.dialog.connect('response', self.stop_pressed) self.dialog.show()
def __init__(self, xdg_folder, folder, info_text, warning_level): self.xdg_folder = xdg_folder self.folder = folder self.warning_level = warning_level self.destroy_button = Gtk.Button(_("Destroy data")) self.destroy_button.connect("clicked", self.destroy_pressed) self.destroy_guard_check = Gtk.CheckButton() self.destroy_guard_check.set_active(False) self.destroy_guard_check.connect("toggled", self.destroy_guard_toggled) self.size_info = Gtk.Label() self.size_info.set_text(self.get_folder_size_str()) folder_label = Gtk.Label("/<i>" + folder + "</i>") folder_label.set_use_markup(True) info = Gtk.HBox(True, 2) info.pack_start( guiutils.get_left_justified_box([guiutils.bold_label(info_text)]), True, True, 0) info.pack_start( guiutils.get_left_justified_box( [guiutils.pad_label(40, 12), folder_label]), True, True, 0) info.pack_start( guiutils.get_left_justified_box( [guiutils.pad_label(12, 12), self.size_info]), True, True, 0) button_area = Gtk.HBox(False, 2) if self.warning_level == PROJECT_DATA_WARNING: button_area.pack_start(self.destroy_guard_check, True, True, 0) self.destroy_button.set_sensitive(False) button_area.pack_start(self.destroy_button, True, True, 0) if self.warning_level == PROJECT_DATA_WARNING: warning_icon = Gtk.Image.new_from_stock(Gtk.STOCK_DIALOG_WARNING, Gtk.IconSize.SMALL_TOOLBAR) warning_icon.set_tooltip_text( _("Destroying this data may change contents of existing\nprojects and make some projects unopenable." )) button_area.pack_start(warning_icon, False, False, 0) else: button_area.pack_start(guiutils.pad_label(16, 16), False, False, 0) button_area.set_size_request(150, 24) row = Gtk.HBox(False, 2) row.pack_start(info, True, True, 0) row.pack_start(button_area, False, False, 0) self.vbox = Gtk.VBox(False, 2) self.vbox.pack_start(row, False, False, 0)
def _show_paths(media_asset): orig_path_label = gtk.Label(_("<b>Original path:</b> ")) orig_path_label.set_use_markup(True) orig_path = guiutils.get_left_justified_box([orig_path_label, gtk.Label(media_asset.orig_path)]) relink_path_label = gtk.Label(_("<b>Relink path:</b> ")) relink_path_label.set_use_markup(True) relink_path = guiutils.get_left_justified_box([relink_path_label, gtk.Label(media_asset.relink_path)]) panel = gtk.VBox() panel.pack_start(orig_path, False, False, 0) panel.pack_start(guiutils.pad_label(12, 12), False, False, 0) panel.pack_start(relink_path, False, False, 0) dialogutils.panel_ok_dialog("Media Asset Paths", panel)
def __init__(self): # Window self.window = Gtk.Window(Gtk.WindowType.TOPLEVEL) self.window.connect("delete-event", lambda w, e:_start_single_render_shutdown()) app_icon = GdkPixbuf.Pixbuf.new_from_file(respaths.IMAGE_PATH + "flowbladesinglerendericon.png") self.window.set_icon(app_icon) self.est_time_left = Gtk.Label() self.current_render = Gtk.Label() self.current_render_time = Gtk.Label() est_r = guiutils.get_right_justified_box([guiutils.bold_label(_("Estimated Left:"))]) current_r = guiutils.get_right_justified_box([guiutils.bold_label(_("File:"))]) current_r_t = guiutils.get_right_justified_box([guiutils.bold_label(_("Elapsed:"))]) est_r.set_size_request(250, 20) current_r.set_size_request(250, 20) current_r_t.set_size_request(250, 20) info_vbox = Gtk.VBox(False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([current_r, self.current_render]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([current_r_t, self.current_render_time]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([est_r, self.est_time_left]), False, False, 0) self.stop_render_button = Gtk.Button(_("Stop Render")) self.stop_render_button.connect("clicked", lambda w, e: _start_single_render_shutdown(), None) self.render_progress_bar = Gtk.ProgressBar() self.progress_label = Gtk.Label("0 %") button_row = Gtk.HBox(False, 0) button_row.pack_start(self.progress_label, False, False, 0) button_row.pack_start(Gtk.Label(), True, True, 0) button_row.pack_start(self.stop_render_button, False, False, 0) top_vbox = Gtk.VBox(False, 0) top_vbox.pack_start(info_vbox, False, False, 0) top_vbox.pack_start(guiutils.get_pad_label(12, 12), False, False, 0) top_vbox.pack_start(self.render_progress_bar, False, False, 0) top_vbox.pack_start(guiutils.get_pad_label(12, 12), False, False, 0) top_vbox.pack_start(button_row, False, False, 0) top_align = guiutils.set_margins(top_vbox, 12, 12, 12, 12) top_align.set_size_request(SINGLE_WINDOW_WIDTH, 20) # Set pane and show window self.window.add(top_align) self.window.set_title(_("Flowblade Timeline Render")) self.window.set_position(Gtk.WindowPosition.CENTER) self.window.show_all()
def __init__(self): self.dialog = Gtk.Dialog( _("Creating Proxy Files"), gui.editor_window.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Stop").encode('utf-8'), Gtk.ResponseType.REJECT)) self.render_progress_bar = Gtk.ProgressBar() self.render_progress_bar.set_text("0 %") prog_align = guiutils.set_margins(self.render_progress_bar, 0, 0, 6, 0) prog_align.set_size_request(550, 30) self.elapsed_value = Gtk.Label() self.current_render_value = Gtk.Label() self.items_value = Gtk.Label() est_label = guiutils.get_right_justified_box( [guiutils.bold_label(_("Elapsed:"))]) current_label = guiutils.get_right_justified_box( [guiutils.bold_label(_("Current Media File:"))]) items_label = guiutils.get_right_justified_box( [guiutils.bold_label(_("Rendering Item:"))]) est_label.set_size_request(250, 20) current_label.set_size_request(250, 20) items_label.set_size_request(250, 20) info_vbox = Gtk.VBox(False, 0) info_vbox.pack_start( guiutils.get_left_justified_box([est_label, self.elapsed_value]), False, False, 0) info_vbox.pack_start( guiutils.get_left_justified_box( [current_label, self.current_render_value]), False, False, 0) info_vbox.pack_start( guiutils.get_left_justified_box([items_label, self.items_value]), False, False, 0) progress_vbox = Gtk.VBox(False, 2) progress_vbox.pack_start(info_vbox, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 8), False, False, 0) progress_vbox.pack_start(prog_align, False, False, 0) alignment = guiutils.set_margins(progress_vbox, 12, 12, 12, 12) alignment.show_all() self.dialog.vbox.pack_start(alignment, True, True, 0) dialogutils.set_outer_margins(self.dialog.vbox) self.dialog.connect('response', self.stop_pressed) self.dialog.show()
def _show_paths(media_asset): orig_path_label = Gtk.Label(label=_("<b>Original path:</b> ")) orig_path_label.set_use_markup(True) orig_path = guiutils.get_left_justified_box([orig_path_label, Gtk.Label(label=media_asset.orig_path)]) relink_path_label = Gtk.Label(label=_("<b>Relink path:</b> ")) relink_path_label.set_use_markup(True) relink_path = guiutils.get_left_justified_box([relink_path_label, Gtk.Label(label=media_asset.relink_path)]) panel = Gtk.VBox() panel.pack_start(orig_path, False, False, 0) panel.pack_start(guiutils.pad_label(12, 12), False, False, 0) panel.pack_start(relink_path, False, False, 0) dialogutils.panel_ok_dialog("Media Asset Paths", panel)
def _build_editor_row(self, label_text, widget): row = Gtk.HBox(False, 2) left_box = guiutils.get_left_justified_box([Gtk.Label(label=label_text)]) left_box.set_size_request(SIMPLE_EDITOR_LEFT_WIDTH, guiutils.TWO_COLUMN_BOX_HEIGHT) row.pack_start(left_box, False, True, 0) row.pack_start(widget, True, True, 0) return row
def get_clip_effects_editor_panel(group_combo_box, effects_list_view): create_widgets() stack_label = guiutils.bold_label(_("Clip Filters Stack")) label_row = guiutils.get_left_justified_box([stack_label]) guiutils.set_margins(label_row, 0, 4, 0, 0) ad_buttons_box = Gtk.HBox(True,1) ad_buttons_box.pack_start(widgets.add_effect_b, True, True, 0) ad_buttons_box.pack_start(widgets.del_effect_b, True, True, 0) stack_buttons_box = Gtk.HBox(False,1) stack_buttons_box.pack_start(ad_buttons_box, True, True, 0) stack_buttons_box.pack_start(widgets.toggle_all, False, False, 0) effect_stack = widgets.effect_stack_view for group in mltfilters.groups: group_name, filters_array = group group_combo_box.append_text(group_name) group_combo_box.set_active(0) # Same callback function works for filter select window too group_combo_box.connect("changed", lambda w,e: _group_selection_changed(w,effects_list_view), None) widgets.group_combo = group_combo_box widgets.effect_list_view = effects_list_view set_enabled(False) exit_button_vbox = Gtk.VBox(False, 2) exit_button_vbox.pack_start(widgets.exit_button, False, False, 0) info_row = Gtk.HBox(False, 2) info_row.pack_start(widgets.hamburger_launcher.widget, False, False, 0) info_row.pack_start(Gtk.Label(), True, True, 0) info_row.pack_start(widgets.clip_info, False, False, 0) info_row.pack_start(Gtk.Label(), True, True, 0) combo_row = Gtk.HBox(False, 2) combo_row.pack_start(group_combo_box, True, True, 0) group_name, filters_array = mltfilters.groups[0] effects_list_view.fill_data_model(filters_array) effects_list_view.treeview.get_selection().select_path("0") effects_vbox = Gtk.VBox(False, 2) effects_vbox.pack_start(label_row, False, False, 0) effects_vbox.pack_start(stack_buttons_box, False, False, 0) effects_vbox.pack_start(effect_stack, True, True, 0) effects_vbox.pack_start(combo_row, False, False, 0) effects_vbox.pack_start(effects_list_view, True, True, 0) widgets.group_combo.set_tooltip_text(_("Select Filter Group")) widgets.effect_list_view.set_tooltip_text(_("Current group Filters")) return effects_vbox, info_row
def get_clip_effects_editor_panel(group_combo_box, effects_list_view): create_widgets() stack_label = guiutils.bold_label(_("Clip Filters Stack")) label_row = guiutils.get_left_justified_box([stack_label]) guiutils.set_margins(label_row, 0, 4, 0, 0) ad_buttons_box = Gtk.HBox(True, 1) ad_buttons_box.pack_start(widgets.add_effect_b, True, True, 0) ad_buttons_box.pack_start(widgets.del_effect_b, True, True, 0) stack_buttons_box = Gtk.HBox(False, 1) stack_buttons_box.pack_start(ad_buttons_box, True, True, 0) stack_buttons_box.pack_start(widgets.toggle_all, False, False, 0) effect_stack = widgets.effect_stack_view for group in mltfilters.groups: group_name, filters_array = group group_combo_box.append_text(group_name) group_combo_box.set_active(0) # Same callback function works for filter select window too group_combo_box.connect( "changed", lambda w, e: _group_selection_changed(w, effects_list_view), None) widgets.group_combo = group_combo_box widgets.effect_list_view = effects_list_view set_enabled(False) exit_button_vbox = Gtk.VBox(False, 2) exit_button_vbox.pack_start(widgets.exit_button, False, False, 0) info_row = Gtk.HBox(False, 2) info_row.pack_start(widgets.hamburger_launcher.widget, False, False, 0) info_row.pack_start(Gtk.Label(), True, True, 0) info_row.pack_start(widgets.clip_info, False, False, 0) info_row.pack_start(Gtk.Label(), True, True, 0) combo_row = Gtk.HBox(False, 2) combo_row.pack_start(group_combo_box, True, True, 0) group_name, filters_array = mltfilters.groups[0] effects_list_view.fill_data_model(filters_array) effects_list_view.treeview.get_selection().select_path("0") effects_vbox = Gtk.VBox(False, 2) effects_vbox.pack_start(label_row, False, False, 0) effects_vbox.pack_start(stack_buttons_box, False, False, 0) effects_vbox.pack_start(effect_stack, True, True, 0) effects_vbox.pack_start(combo_row, False, False, 0) effects_vbox.pack_start(effects_list_view, True, True, 0) widgets.group_combo.set_tooltip_text(_("Select Filter Group")) widgets.effect_list_view.set_tooltip_text(_("Current group Filters")) return effects_vbox, info_row
def build_editor(self, label_text, widget): widget.set_tooltip_text(self.tooltip) left_box = guiutils.get_left_justified_box( [Gtk.Label(label=label_text)]) left_box.set_size_request(SIMPLE_EDITOR_LEFT_WIDTH, guiutils.TWO_COLUMN_BOX_HEIGHT) self.pack_start(left_box, False, True, 0) self.pack_start(widget, True, True, 0)
def __init__(self): self.dialog = gtk.Dialog(_("Creating Proxy Files"), gui.editor_window.window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Stop").encode('utf-8'), gtk.RESPONSE_REJECT)) self.render_progress_bar = gtk.ProgressBar() self.render_progress_bar.set_text("0 %") prog_align = gtk.Alignment(0.5, 0.5, 1.0, 0.0) prog_align.set_padding(0, 0, 0, 0) prog_align.add(self.render_progress_bar) prog_align.set_size_request(550, 30) self.elapsed_value = gtk.Label() self.current_render_value = gtk.Label() self.items_value = gtk.Label() est_label = guiutils.get_right_justified_box([guiutils.bold_label(_("Elapsed:"))]) current_label = guiutils.get_right_justified_box([guiutils.bold_label(_("Current Media File:"))]) items_label = guiutils.get_right_justified_box([guiutils.bold_label(_("Rendering Item:"))]) est_label.set_size_request(250, 20) current_label.set_size_request(250, 20) items_label.set_size_request(250, 20) info_vbox = gtk.VBox(False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([est_label, self.elapsed_value]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([current_label, self.current_render_value]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([items_label, self.items_value]), False, False, 0) progress_vbox = gtk.VBox(False, 2) progress_vbox.pack_start(info_vbox, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 8), False, False, 0) progress_vbox.pack_start(prog_align, False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(12, 12, 12, 12) alignment.add(progress_vbox) alignment.show_all() self.dialog.vbox.pack_start(alignment, True, True, 0) self.dialog.set_has_separator(False) self.dialog.connect('response', self.stop_pressed) self.dialog.show()
def get_fade_panel(fade_data): type_combo_box = Gtk.ComboBoxText() type_combo_box.append_text(_("Fade In")) type_combo_box.append_text(_("Fade Out")) type_combo_box.set_active(0) type_row = get_two_column_box(Gtk.Label(label=_("Type:")), type_combo_box) color_button = Gtk.ColorButton.new_with_rgba(Gdk.RGBA(0, 0, 0, 1)) color_button_box = guiutils.get_left_justified_box([color_button]) color_label = Gtk.Label(label=_("Color:")) color_row = get_two_column_box(color_label, color_button_box) length_entry = Gtk.Entry() fade_length = 30 if editorstate.fade_length > 0: # use last invocation length if available fade_length = editorstate.fade_length length_entry.set_text(str(fade_length)) length_row = get_two_column_box(Gtk.Label(label=_("Length:")), length_entry) # Encoding widgets encodings_cb = Gtk.ComboBoxText() for encoding in renderconsumer.encoding_options: encodings_cb.append_text(encoding.name) encodings_cb.set_active(0) quality_cb = Gtk.ComboBoxText() transition_widgets = (encodings_cb, quality_cb) encodings_cb.connect( "changed", lambda w, e: _transition_encoding_changed(transition_widgets), None) _fill_transition_quality_combo_box(transition_widgets, 10) _set_saved_encoding(transition_widgets) # Build panel edit_vbox = Gtk.VBox(False, 2) edit_vbox.pack_start(type_row, False, False, 0) edit_vbox.pack_start(length_row, False, False, 0) edit_vbox.pack_start(color_row, False, False, 0) enconding_vbox = Gtk.VBox(False, 2) enconding_vbox.pack_start(encodings_cb, False, False, 0) enconding_vbox.pack_start(quality_cb, False, False, 0) vbox = Gtk.VBox(False, 2) vbox.pack_start(get_named_frame(_("Transition Options"), edit_vbox), True, True, 0) vbox.pack_start(get_named_frame(_("Encoding"), enconding_vbox), True, True, 0) alignment = guiutils.set_margins(vbox, 12, 24, 12, 12) return (alignment, type_combo_box, length_entry, encodings_cb, quality_cb, color_button)
def get_fade_panel(fade_data): type_combo_box = Gtk.ComboBoxText() type_combo_box.append_text(_("Fade In")) type_combo_box.append_text(_("Fade Out")) type_combo_box.set_active(0) type_row = get_two_column_box(Gtk.Label(label=_("Type:")), type_combo_box) color_button = Gtk.ColorButton.new_with_rgba(Gdk.RGBA(0,0,0,1)) color_button_box = guiutils.get_left_justified_box([color_button]) color_label = Gtk.Label(label=_("Color:")) color_row = get_two_column_box(color_label, color_button_box) length_entry = Gtk.Entry() fade_length = 30 if editorstate.fade_length > 0: # use last invocation length if available fade_length = editorstate.fade_length length_entry.set_text(str(fade_length)) length_row = get_two_column_box(Gtk.Label(label=_("Length:")), length_entry) # Encoding widgets encodings_cb = Gtk.ComboBoxText() for encoding in renderconsumer.encoding_options: encodings_cb.append_text(encoding.name) encodings_cb.set_active(0) quality_cb = Gtk.ComboBoxText() transition_widgets = (encodings_cb, quality_cb) encodings_cb.connect("changed", lambda w,e: _transition_encoding_changed(transition_widgets), None) _fill_transition_quality_combo_box(transition_widgets, 10) _set_saved_encoding(transition_widgets) # Build panel edit_vbox = Gtk.VBox(False, 2) edit_vbox.pack_start(type_row, False, False, 0) edit_vbox.pack_start(length_row, False, False, 0) edit_vbox.pack_start(color_row, False, False, 0) enconding_vbox = Gtk.VBox(False, 2) enconding_vbox.pack_start(encodings_cb, False, False, 0) enconding_vbox.pack_start(quality_cb, False, False, 0) vbox = Gtk.VBox(False, 2) vbox.pack_start(get_named_frame(_("Transition Options"), edit_vbox), True, True, 0) vbox.pack_start(get_named_frame(_("Encoding"), enconding_vbox), True, True, 0) alignment = guiutils.set_margins(vbox, 12, 24, 12, 12) return (alignment, type_combo_box, length_entry, encodings_cb, quality_cb, color_button)
def __init__(self): self.dialog = Gtk.Dialog(_("Creating Proxy Files"), gui.editor_window.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Stop").encode('utf-8'), Gtk.ResponseType.REJECT)) self.render_progress_bar = Gtk.ProgressBar() self.render_progress_bar.set_text("0 %") prog_align = guiutils.set_margins(self.render_progress_bar, 0, 0, 6, 0) prog_align.set_size_request(550, 30) self.elapsed_value = Gtk.Label() self.current_render_value = Gtk.Label() self.items_value = Gtk.Label() est_label = guiutils.get_right_justified_box([guiutils.bold_label(_("Elapsed:"))]) current_label = guiutils.get_right_justified_box([guiutils.bold_label(_("Current Media File:"))]) items_label = guiutils.get_right_justified_box([guiutils.bold_label(_("Rendering Item:"))]) est_label.set_size_request(250, 20) current_label.set_size_request(250, 20) items_label.set_size_request(250, 20) info_vbox = Gtk.VBox(False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([est_label, self.elapsed_value]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([current_label, self.current_render_value]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([items_label, self.items_value]), False, False, 0) progress_vbox = Gtk.VBox(False, 2) progress_vbox.pack_start(info_vbox, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 8), False, False, 0) progress_vbox.pack_start(prog_align, False, False, 0) alignment = guiutils.set_margins(progress_vbox, 12, 12, 12, 12) alignment.show_all() self.dialog.vbox.pack_start(alignment, True, True, 0) dialogutils.set_outer_margins(self.dialog.vbox) self.dialog.connect('response', self.stop_pressed) self.dialog.show()
def __init__(self, folder, info_text, warning_level): self.folder = folder self.warning_level = warning_level self.destroy_button = Gtk.Button(_("Destroy data")) self.destroy_button.connect("clicked", self.destroy_pressed) self.destroy_guard_check = Gtk.CheckButton() self.destroy_guard_check.set_active(False) self.destroy_guard_check.connect("toggled", self.destroy_guard_toggled) self.size_info = Gtk.Label() self.size_info.set_text(self.get_folder_size_str()) folder_label = Gtk.Label("/<i>" + folder + "</i>") folder_label.set_use_markup(True) info = Gtk.HBox(True, 2) info.pack_start(guiutils.get_left_justified_box([guiutils.bold_label(info_text)]), True, True, 0) info.pack_start(guiutils.get_left_justified_box([guiutils.pad_label(40, 12), folder_label]), True, True, 0) info.pack_start(guiutils.get_left_justified_box([guiutils.pad_label(12, 12), self.size_info]), True, True, 0) button_area = Gtk.HBox(False, 2) if self.warning_level == PROJECT_DATA_WARNING: button_area.pack_start(self.destroy_guard_check, True, True, 0) self.destroy_button.set_sensitive(False) button_area.pack_start(self.destroy_button, True, True, 0) if self.warning_level == PROJECT_DATA_WARNING: warning_icon = Gtk.Image.new_from_stock(Gtk.STOCK_DIALOG_WARNING, Gtk.IconSize.SMALL_TOOLBAR) warning_icon.set_tooltip_text( _("Destroying this data may change contents of existing\nprojects and make some projects unopenable.")) button_area.pack_start(warning_icon, False, False, 0) else: button_area.pack_start(guiutils.pad_label(16, 16), False, False, 0) button_area.set_size_request(150, 24) row = Gtk.HBox(False, 2) row.pack_start(info, True, True, 0) row.pack_start(button_area, False, False, 0) self.vbox = Gtk.VBox(False, 2) self.vbox.pack_start(row, False, False, 0)
def _performance_panel(): # Jan-2017 - SvdB # Add a panel for performance settings. The first setting is allowing multiple threads to render # the files. This is used for the real_time parameter to mlt in renderconsumer.py. # The effect depends on the computer running the program. # Max. number of threads is set to number of CPU cores. Default is 1. # Allow Frame Dropping should help getting real time output on low performance computers. prefs = editorpersistance.prefs warning_icon = Gtk.Image.new_from_stock(Gtk.STOCK_DIALOG_WARNING, Gtk.IconSize.DIALOG) warning_label = Gtk.Label(label=_( "Changing these values may cause problems with playback and rendering.\nThe safe values are Render Threads:1, Allow Frame Dropping: No." )) spin_adj = Gtk.Adjustment(value=prefs.perf_render_threads, lower=1, upper=multiprocessing.cpu_count(), step_incr=1) perf_render_threads = Gtk.SpinButton(adjustment=spin_adj) #perf_render_threads.set_adjustment(spin_adj) perf_render_threads.set_numeric(True) perf_drop_frames = Gtk.CheckButton() perf_drop_frames.set_active(prefs.perf_drop_frames) # Tooltips perf_render_threads.set_tooltip_text( _("Between 1 and the number of CPU Cores")) perf_drop_frames.set_tooltip_text( _("Allow Frame Dropping for real-time rendering, when needed")) # Layout row0 = _row(guiutils.get_left_justified_box([warning_icon, warning_label])) row1 = _row( guiutils.get_two_column_box(Gtk.Label(label=_("Render Threads:")), perf_render_threads, PREFERENCES_LEFT)) row2 = _row( guiutils.get_checkbox_row_box( perf_drop_frames, Gtk.Label(label=_("Allow Frame Dropping")))) vbox = Gtk.VBox(False, 2) vbox.pack_start(row0, False, False, 0) vbox.pack_start(guiutils.pad_label(12, 12), False, False, 0) vbox.pack_start(row1, False, False, 0) vbox.pack_start(row2, False, False, 0) vbox.pack_start(Gtk.Label(), True, True, 0) guiutils.set_margins(vbox, 12, 0, 12, 12) return vbox, (perf_render_threads, perf_drop_frames)
def get_fade_panel(fade_data): type_combo_box = gtk.combo_box_new_text() type_combo_box.append_text(_("Fade In")) type_combo_box.append_text(_("Fade Out")) type_combo_box.set_active(0) type_row = get_two_column_box(gtk.Label(_("Type:")), type_combo_box) color_button = gtk.ColorButton(gtk.gdk.Color(0.0, 0.0, 0.0)) color_button_box = guiutils.get_left_justified_box([color_button]) color_label = gtk.Label(_("Color:")) color_row = get_two_column_box(color_label, color_button_box) length_entry = gtk.Entry() length_entry.set_text(str(30)) length_row = get_two_column_box(gtk.Label(_("Length:")), length_entry) # Encoding widgets encodings_cb = gtk.combo_box_new_text() for encoding in renderconsumer.encoding_options: encodings_cb.append_text(encoding.name) encodings_cb.set_active(0) quality_cb = gtk.combo_box_new_text() transition_widgets = (encodings_cb, quality_cb) encodings_cb.connect("changed", lambda w,e: _transition_encoding_changed(transition_widgets), None) _fill_transition_quality_combo_box(transition_widgets) # Build panel edit_vbox = gtk.VBox(False, 2) edit_vbox.pack_start(type_row, False, False, 0) edit_vbox.pack_start(length_row, False, False, 0) edit_vbox.pack_start(color_row, False, False, 0) enconding_vbox = gtk.VBox(False, 2) enconding_vbox.pack_start(encodings_cb, False, False, 0) enconding_vbox.pack_start(quality_cb, False, False, 0) vbox = gtk.VBox(False, 2) vbox.pack_start(get_named_frame(_("Transition Options"), edit_vbox)) vbox.pack_start(get_named_frame(_("Encoding"), enconding_vbox)) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(12, 24, 12, 12) alignment.add(vbox) return (alignment, type_combo_box, length_entry, encodings_cb, quality_cb, color_button)
def get_top_level_project_info_panel(): project_name_label = Gtk.Label(label=PROJECT().name) name_row = guiutils.get_left_justified_box([project_name_label]) name_panel = guiutils.get_named_frame( _("Project"), name_row, 0, 6, 4, _("A <b>Project</b> contains one or more <b>Sequences</b> of edited media and a collection of media files stored in <b>Bins.</b>" )) profile = PROJECT().profile desc_label = Gtk.Label(label=profile.description()) info_box = guicomponents.get_profile_info_small_box(profile) vbox = Gtk.VBox() vbox.pack_start(guiutils.get_left_justified_box([desc_label]), False, True, 0) vbox.pack_start(info_box, False, True, 0) profile_panel = guiutils.get_named_frame( _("Profile"), vbox, 0, 6, 4, _("<b>Profile</b> determines frame rate per second, image size in pixels and pixel aspect ratio for all <b>Sequences</b> in <b>Project</b> ." )) events_list = ProjectEventListView() events_list.fill_data_model() events_panel = guiutils.get_named_frame(_("Project Events"), events_list, 0) project_info_vbox = Gtk.VBox() project_info_vbox.pack_start(name_panel, False, True, 0) project_info_vbox.pack_start(profile_panel, False, True, 0) guiutils.set_margins(project_info_vbox, 4, 4, 4, 4) widgets.project_name_label = project_name_label widgets.desc_label = desc_label widgets.info_box = info_box widgets.events_list = events_list return project_info_vbox
def get_fade_panel(fade_data): type_combo_box = gtk.combo_box_new_text() type_combo_box.append_text(_("Fade In")) type_combo_box.append_text(_("Fade Out")) type_combo_box.set_active(0) type_row = get_two_column_box(gtk.Label(_("Type:")), type_combo_box) color_button = gtk.ColorButton(gtk.gdk.Color(0.0, 0.0, 0.0)) color_button_box = guiutils.get_left_justified_box([color_button]) color_label = gtk.Label(_("Color:")) color_row = get_two_column_box(color_label, color_button_box) length_entry = gtk.Entry() length_entry.set_text(str(30)) length_row = get_two_column_box(gtk.Label(_("Length:")), length_entry) # Encoding widgets encodings_cb = gtk.combo_box_new_text() for encoding in renderconsumer.encoding_options: encodings_cb.append_text(encoding.name) encodings_cb.set_active(0) quality_cb = gtk.combo_box_new_text() transition_widgets = (encodings_cb, quality_cb) encodings_cb.connect( "changed", lambda w, e: _transition_encoding_changed(transition_widgets), None) _fill_transition_quality_combo_box(transition_widgets) # Build panel edit_vbox = gtk.VBox(False, 2) edit_vbox.pack_start(type_row, False, False, 0) edit_vbox.pack_start(length_row, False, False, 0) edit_vbox.pack_start(color_row, False, False, 0) enconding_vbox = gtk.VBox(False, 2) enconding_vbox.pack_start(encodings_cb, False, False, 0) enconding_vbox.pack_start(quality_cb, False, False, 0) vbox = gtk.VBox(False, 2) vbox.pack_start(get_named_frame(_("Transition Options"), edit_vbox)) vbox.pack_start(get_named_frame(_("Encoding"), enconding_vbox)) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(12, 24, 12, 12) alignment.add(vbox) return (alignment, type_combo_box, length_entry, encodings_cb, quality_cb, color_button)
def __init__(self): Gtk.Dialog.__init__( self, _("Welcome To Flowblade 2"), None, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Select Preset Workflow and Continue").encode('utf-8'), Gtk.ResponseType.ACCEPT)) self.DEFAULT_SELECTION = 1 info_label_text_1 = _( "To audio sync clips you need move action origin clip by " ) # + str(data.clip_tline_media_offset - data.media_offset_frames) + _(" frames.") info_label_1 = Gtk.Label(info_label_text_1) info_label_text_2 = _( "To audio sync clips you need move action origin clip by " ) # + str(data.clip_tline_media_offset - data.media_offset_frames) + _(" frames.") info_label_2 = Gtk.Label(info_label_text_2) preset_workflow_text_1 = _( "workflow 1 " ) # + str(data.clip_tline_media_offset - data.media_offset_frames) + _(" frames.") workflow_select_item_1 = self.get_workflow_select_item( 1, preset_workflow_text_1) preset_workflow_text_2 = _( "workflow 2 " ) # + str(data.clip_tline_media_offset - data.media_offset_frames) + _(" frames.") workflow_select_item_2 = self.get_workflow_select_item( 2, preset_workflow_text_1) panel_vbox = Gtk.VBox(False, 2) panel_vbox.pack_start(guiutils.get_pad_label(24, 12), False, False, 0) panel_vbox.pack_start(guiutils.get_left_justified_box([info_label_1]), False, False, 0) panel_vbox.pack_start(workflow_select_item_1, False, False, 0) panel_vbox.pack_start(workflow_select_item_2, False, False, 0) panel_vbox.pack_start(info_label_2, False, False, 0) panel_vbox.pack_start(guiutils.get_pad_label(24, 24), False, False, 0) alignment = dialogutils.get_alignment2(panel_vbox) self.vbox.pack_start(alignment, True, True, 0) dialogutils.set_outer_margins(self.vbox) dialogs._default_behaviour(self) self.connect('response', self.done) self.show_all()
def _performance_panel(): # Jan-2017 - SvdB # Add a panel for performance settings. The first setting is allowing multiple threads to render # the files. This is used for the real_time parameter to mlt in renderconsumer.py. # The effect depends on the computer running the program. # Max. number of threads is set to number of CPU cores. Default is 1. # Allow Frame Dropping should help getting real time output on low performance computers. prefs = editorpersistance.prefs warning_icon = Gtk.Image.new_from_stock(Gtk.STOCK_DIALOG_WARNING, Gtk.IconSize.DIALOG) warning_label = Gtk.Label(label=_("Changing these values may cause problems with playback and rendering.\nThe safe values are Render Threads:1, Allow Frame Dropping: No.")) # Widgets spin_adj = Gtk.Adjustment(prefs.perf_render_threads, 1, multiprocessing.cpu_count(), 1) perf_render_threads = Gtk.SpinButton() perf_render_threads.set_adjustment(spin_adj) perf_render_threads.set_numeric(True) perf_drop_frames = Gtk.CheckButton() perf_drop_frames.set_active(prefs.perf_drop_frames) # Tooltips perf_render_threads.set_tooltip_text(_("Between 1 and the number of CPU Cores")) perf_drop_frames.set_tooltip_text(_("Allow Frame Dropping for real-time rendering, when needed")) # Layout row0 = _row(guiutils.get_left_justified_box([warning_icon, warning_label])) row1 = _row(guiutils.get_two_column_box(Gtk.Label(label=_("Render Threads:")), perf_render_threads, PREFERENCES_LEFT)) row2 = _row(guiutils.get_checkbox_row_box(perf_drop_frames, Gtk.Label(label=_("Allow Frame Dropping")))) vbox = Gtk.VBox(False, 2) vbox.pack_start(row0, False, False, 0) vbox.pack_start(guiutils.pad_label(12, 12), False, False, 0) vbox.pack_start(row1, False, False, 0) vbox.pack_start(row2, False, False, 0) vbox.pack_start(Gtk.Label(), True, True, 0) guiutils.set_margins(vbox, 12, 0, 12, 12) return vbox, (perf_render_threads, perf_drop_frames)
def __init__(self, files_to_render, already_have_proxies, not_video_files, is_proxy_file, other_project_proxies, proxy_w, proxy_h, proxy_file_extension): dialog_title = _("Proxy Render Info") self.files_to_render = files_to_render self.other_project_proxies = other_project_proxies self.already_have_proxies = already_have_proxies self.proxy_w = proxy_w self.proxy_h = proxy_h self.proxy_file_extension = proxy_file_extension self.issues = 1 if (len(files_to_render) + len(already_have_proxies) + len(other_project_proxies)) == 0 and not_video_files > 0: self.dialog = gtk.Dialog( dialog_title, gui.editor_window.window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Close").encode('utf-8'), gtk.RESPONSE_CLOSE)) info_box = dialogutils.get_warning_message_dialog_panel( _("Nothing will be rendered"), _("No video files were selected.\nOnly video files can have proxy files." ), True) self.dialog.connect('response', dialogutils.dialog_destroy) else: self.dialog = gtk.Dialog( dialog_title, gui.editor_window.window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Cancel").encode('utf-8'), gtk.RESPONSE_CANCEL, _("Do Render Action").encode('utf-8'), gtk.RESPONSE_OK)) self.dialog.connect('response', self.response) rows = "" if len(already_have_proxies) > 0 and len( other_project_proxies) > 0: text = _( "Proxies exist that were created by this and other projects for " ) + str( len(already_have_proxies) + len(other_project_proxies)) + _(" file(s).\n") rows = rows + self.issues_str() + text elif len(already_have_proxies) > 0 and len( other_project_proxies) == 0: text = _("Proxies have already been created for ") + str( len(already_have_proxies)) + _(" file(s).\n") rows = rows + self.issues_str() + text elif len(other_project_proxies) > 0: text = _( "Proxies exist that were created by other projects for " ) + str(len(other_project_proxies)) + _(" file(s).\n") rows = rows + self.issues_str() + text if not_video_files > 0: text = _("You are trying to create proxies for ") + str( not_video_files) + _(" non-video file(s).\n") rows = rows + self.issues_str() + text if is_proxy_file > 0: text = _("You are trying to create proxies for ") + str( not_video_files) + _(" proxy file(s).\n") rows = rows + self.issues_str() + text issues_box = dialogutils.get_warning_message_dialog_panel( "There are some issues with proxy render request", rows, True) self.action_select = gtk.combo_box_new_text() self.action_select.append_text( _("Render Unrendered Possible & Use existing")) self.action_select.append_text(_("Rerender All Possible")) self.action_select.set_active(0) action_row = guiutils.get_left_justified_box([ guiutils.get_pad_label(24, 10), gtk.Label(_("Select Render Action: ")), self.action_select ]) info_box = gtk.VBox() info_box.pack_start(issues_box, False, False, 0) info_box.pack_start(action_row, False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(0, 0, 0, 0) alignment.add(info_box) alignment.show_all() self.dialog.vbox.pack_start(alignment, True, True, 0) self.dialog.set_has_separator(False) self.dialog.show()
def __init__(self, files_to_render, already_have_proxies, not_video_files, is_proxy_file, other_project_proxies, proxy_w, proxy_h, proxy_file_extension): dialog_title = _("Proxy Render Info") self.files_to_render = files_to_render self.other_project_proxies = other_project_proxies self.already_have_proxies = already_have_proxies self.proxy_w = proxy_w self.proxy_h = proxy_h self.proxy_file_extension = proxy_file_extension self.issues = 1 if (len(files_to_render) + len(already_have_proxies) + len(other_project_proxies)) == 0 and not_video_files > 0: self.dialog = Gtk.Dialog( dialog_title, gui.editor_window.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Close").encode('utf-8'), Gtk.ResponseType.CLOSE)) info_box = dialogutils.get_warning_message_dialog_panel( _("Nothing will be rendered"), _("No video files were selected.\nOnly video files can have proxy files." ), True) self.dialog.connect('response', dialogutils.dialog_destroy) else: self.dialog = Gtk.Dialog( dialog_title, gui.editor_window.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Cancel").encode('utf-8'), Gtk.ResponseType.CANCEL, _("Do Render Action").encode('utf-8'), Gtk.ResponseType.OK)) self.dialog.connect('response', self.response) rows = "" if len(already_have_proxies) > 0 and len( other_project_proxies) > 0: text = _( "Proxies exist that were created by this and other projects for " ) + str( len(already_have_proxies) + len(other_project_proxies)) + _(" file(s).\n") rows = rows + self.issues_str() + text elif len(already_have_proxies) > 0 and len( other_project_proxies) == 0: text = _("Proxies have already been created for ") + str( len(already_have_proxies)) + _(" file(s).\n") rows = rows + self.issues_str() + text elif len(other_project_proxies) > 0: text = _( "Proxies exist that were created by other projects for " ) + str(len(other_project_proxies)) + _(" file(s).\n") rows = rows + self.issues_str() + text if not_video_files > 0: text = _("You are trying to create proxies for ") + str( not_video_files) + _(" non-video file(s).\n") rows = rows + self.issues_str() + text if is_proxy_file > 0: text = _("You are trying to create proxies for ") + str( not_video_files) + _(" proxy file(s).\n") rows = rows + self.issues_str() + text issues_box = dialogutils.get_warning_message_dialog_panel( "There are some issues with proxy render request", rows, True) proxy_mode = editorstate.PROJECT().proxy_data.proxy_mode if proxy_mode == appconsts.USE_PROXY_MEDIA: info_label = Gtk.Label( _("<b>Rerendering proxies currently not possible!</b>\nChange to 'Use Original Media' mode to rerender proxies." )) info_label.set_use_markup(True) info_row = guiutils.get_left_justified_box( [guiutils.get_pad_label(24, 10), info_label]) self.action_select = Gtk.ComboBoxText() self.action_select.append_text( _("Render Unrendered Possible & Use existing")) if proxy_mode != appconsts.USE_PROXY_MEDIA: self.action_select.append_text(_("Rerender All Possible")) self.action_select.set_active(0) action_row = guiutils.get_left_justified_box([ guiutils.get_pad_label(24, 10), Gtk.Label(label=_("Select Render Action: ")), self.action_select ]) info_box = Gtk.VBox() info_box.pack_start(issues_box, False, False, 0) if proxy_mode == appconsts.USE_PROXY_MEDIA: info_box.pack_start(info_row, False, False, 0) info_box.pack_start(guiutils.get_pad_label(12, 24), False, False, 0) info_box.pack_start(action_row, False, False, 0) guiutils.set_margins(info_box, 12, 48, 12, 0) self.dialog.vbox.pack_start(info_box, True, True, 0) dialogutils.set_outer_margins(self.dialog.vbox) self.dialog.show_all()
def get_left_justified_box(widgets): return guiutils.get_left_justified_box(widgets)
def get_transition_panel(trans_data): type_combo_box = Gtk.ComboBoxText() name, t_service_id = mlttransitions.rendered_transitions[0] type_combo_box.append_text(name) name, t_service_id = mlttransitions.rendered_transitions[1] type_combo_box.append_text(name) name, t_service_id = mlttransitions.rendered_transitions[2] type_combo_box.append_text(name) type_combo_box.set_active(0) type_row = get_two_column_box(Gtk.Label(label=_("Type:")), type_combo_box) wipe_luma_combo_box = Gtk.ComboBoxText() keys = mlttransitions.wipe_lumas.keys() keys.sort() for k in keys: wipe_luma_combo_box.append_text(k) wipe_luma_combo_box.set_active(0) wipe_label = Gtk.Label(label=_("Wipe Pattern:")) wipe_row = get_two_column_box(wipe_label, wipe_luma_combo_box) color_button = Gtk.ColorButton.new_with_rgba(Gdk.RGBA(0,0,0,1)) color_button_box = guiutils.get_left_justified_box([color_button]) color_label = Gtk.Label(label=_("Dip Color:")) color_row = get_two_column_box(color_label, color_button_box) wipe_luma_combo_box.set_sensitive(False) color_button.set_sensitive(False) wipe_label.set_sensitive(False) color_label.set_sensitive(False) transition_type_widgets = (type_combo_box, wipe_luma_combo_box, color_button, wipe_label, color_label) type_combo_box.connect("changed", lambda w,e: _transition_type_changed(transition_type_widgets), None) length_entry = Gtk.Entry() length_entry.set_text(str(30)) length_row = get_two_column_box(Gtk.Label(label=_("Length:")), length_entry) filler = Gtk.Label() filler.set_size_request(10,10) out_clip_label = Gtk.Label(label=_("From Clip Handle:")) out_clip_value = Gtk.Label(label=trans_data["from_handle"]) in_clip_label = Gtk.Label(label=_("To Clip Handle:")) in_clip_value = Gtk.Label(label=trans_data["to_handle"]) max_label = Gtk.Label(label=_("Max. Transition Length:")) max_value = Gtk.Label(label=trans_data["max_length"]) out_handle_row = get_two_column_box(out_clip_label, out_clip_value) in_handle_row = get_two_column_box(in_clip_label, in_clip_value) max_row = get_two_column_box(max_label, max_value) # Encoding widgets encodings_cb = Gtk.ComboBoxText() for encoding in renderconsumer.encoding_options: encodings_cb.append_text(encoding.name) encodings_cb.set_active(0) quality_cb = Gtk.ComboBoxText() transition_widgets = (encodings_cb, quality_cb) encodings_cb.connect("changed", lambda w,e: _transition_encoding_changed(transition_widgets), None) _fill_transition_quality_combo_box(transition_widgets) # Build panel edit_vbox = Gtk.VBox(False, 2) edit_vbox.pack_start(type_row, False, False, 0) edit_vbox.pack_start(length_row, False, False, 0) edit_vbox.pack_start(wipe_row, False, False, 0) edit_vbox.pack_start(color_row, False, False, 0) data_vbox = Gtk.VBox(False, 2) data_vbox.pack_start(out_handle_row, False, False, 0) data_vbox.pack_start(in_handle_row, False, False, 0) data_vbox.pack_start(max_row, False, False, 0) enconding_vbox = Gtk.VBox(False, 2) enconding_vbox.pack_start(encodings_cb, False, False, 0) enconding_vbox.pack_start(quality_cb, False, False, 0) vbox = Gtk.VBox(False, 2) vbox.pack_start(get_named_frame(_("Transition Options"), edit_vbox), True, True, 0) vbox.pack_start(get_named_frame(_("Clips info"), data_vbox), True, True, 0) vbox.pack_start(get_named_frame(_("Encoding"), enconding_vbox), True, True, 0) alignment = guiutils.set_margins(vbox, 12, 24, 12, 12) return (alignment, type_combo_box, length_entry, encodings_cb, quality_cb, wipe_luma_combo_box, color_button)
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.connect("delete-event", lambda w, e:_shutdown()) app_icon = GdkPixbuf.Pixbuf.new_from_file(respaths.IMAGE_PATH + "flowbladetoolicon.png") self.set_icon(app_icon) hamburger_launcher_surface = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "hamburger.png") self.hamburger_launcher = guicomponents.PressLaunch(self.hamburger_launch_pressed, hamburger_launcher_surface) # Load media row self.load_button = Gtk.Button(_("Load Clip")) self.load_button.connect("clicked", lambda w: open_clip_dialog()) self.media_info = Gtk.Label() self.media_info.set_markup("<small>" + _("no clip loaded") + "</small>") load_row = Gtk.HBox(False, 2) load_row.pack_start(self.hamburger_launcher.widget, False, False, 0) load_row.pack_start(guiutils.get_pad_label(6, 2), False, False, 0) load_row.pack_start(self.load_button, False, False, 0) load_row.pack_start(guiutils.get_pad_label(6, 2), False, False, 0) load_row.pack_start(self.media_info, False, False, 0) load_row.pack_start(Gtk.Label(), True, True, 0) load_row.set_margin_bottom(4) # Clip monitor 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 # This could be any GTK+ widget (that is not "windowless"), only its XWindow draw rect # is used to position and scale SDL overlay that actually displays video. self.monitor.set_size_request(MONITOR_WIDTH, MONITOR_HEIGHT) left_vbox = Gtk.VBox(False, 0) left_vbox.pack_start(load_row, False, False, 0) left_vbox.pack_start(self.monitor, True, True, 0) 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) right_vbox = Gtk.VBox(False, 2) right_vbox.pack_start(preview_info_row, False, False, 0) right_vbox.pack_start(self.preview_monitor, True, True, 0) # Monitors panel monitors_panel = Gtk.HBox(False, 2) monitors_panel.pack_start(left_vbox, False, False, 0) monitors_panel.pack_start(Gtk.Label(), True, True, 0) monitors_panel.pack_start(right_vbox, False, False, 0) # Control row self.tc_display = guicomponents.MonitorTCDisplay() self.tc_display.use_internal_frame = True self.tc_display.widget.set_valign(Gtk.Align.CENTER) self.tc_display.use_internal_fps = True 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.control_buttons = glassbuttons.GmicButtons() pressed_callback_funcs = [prev_pressed, next_pressed, mark_in_pressed, mark_out_pressed, marks_clear_pressed, to_mark_in_pressed, to_mark_out_pressed] self.control_buttons.set_callbacks(pressed_callback_funcs) self.preview_button = Gtk.Button(_("Preview")) self.preview_button.connect("clicked", lambda w: render_preview_frame()) control_panel = Gtk.HBox(False, 2) control_panel.pack_start(self.tc_display.widget, False, False, 0) control_panel.pack_start(pos_bar_frame, True, True, 0) control_panel.pack_start(self.control_buttons.widget, False, False, 0) control_panel.pack_start(guiutils.pad_label(2, 2), False, False, 0) control_panel.pack_start(self.preview_button, False, False, 0) preview_panel = Gtk.VBox(False, 2) preview_panel.pack_start(monitors_panel, False, False, 0) preview_panel.pack_start(control_panel, False, False, 0) preview_panel.set_margin_bottom(8) # Script area self.preset_label = Gtk.Label() self.present_event_box = Gtk.EventBox() self.present_event_box.add(self.preset_label) self.present_event_box.connect("button-press-event", script_menu_lauched) self.script_menu = toolguicomponents.PressLaunch(script_menu_lauched) self.action_select = Gtk.CheckButton() self.action_select.set_active(False) self.action_label = Gtk.Label(_("Add to Script")) preset_row = Gtk.HBox(False, 2) preset_row.pack_start(self.present_event_box, False, False, 0) preset_row.pack_start(self.script_menu.widget, False, False, 0) preset_row.pack_start(guiutils.pad_label(2, 30), False, False, 0) preset_row.pack_start(Gtk.Label(), True, True, 0) preset_row.pack_start(self.action_select, False, False, 0) preset_row.pack_start(self.action_label, False, False, 0) self.script_view = Gtk.TextView() self.script_view.set_sensitive(False) self.script_view.set_pixels_above_lines(2) self.script_view.set_left_margin(2) self.script_view.set_wrap_mode(Gtk.WrapMode.CHAR) script_sw = Gtk.ScrolledWindow() script_sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) script_sw.add(self.script_view) script_sw.set_size_request(MONITOR_WIDTH - 100, 125) self.out_view = Gtk.TextView() self.out_view.set_sensitive(False) self.out_view.set_pixels_above_lines(2) self.out_view.set_left_margin(2) self.out_view.set_wrap_mode(Gtk.WrapMode.WORD) fd = Pango.FontDescription.from_string("Sans 8") self.out_view.override_font(fd) out_sw = Gtk.ScrolledWindow() out_sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) out_sw.add(self.out_view) out_sw.set_size_request(MONITOR_WIDTH - 150, 100) script_vbox = Gtk.VBox(False, 2) script_vbox.pack_start(preset_row, False, False, 0) script_vbox.pack_start(script_sw, True, True, 0) script_vbox.pack_start(out_sw, True, True, 0) # Render panel self.mark_in_label = guiutils.bold_label(_("Mark In:")) self.mark_out_label = guiutils.bold_label(_("Mark Out:")) self.length_label = guiutils.bold_label(_("Length:")) self.mark_in_info = Gtk.Label("-") self.mark_out_info = Gtk.Label("-") self.length_info = Gtk.Label("-") in_row = guiutils.get_two_column_box(self.mark_in_label, self.mark_in_info, 150) out_row = guiutils.get_two_column_box(self.mark_out_label, self.mark_out_info, 150) length_row = guiutils.get_two_column_box(self.length_label, self.length_info, 150) marks_row = Gtk.VBox(False, 2) marks_row.pack_start(in_row, True, True, 0) marks_row.pack_start(out_row, True, True, 0) marks_row.pack_start(length_row, True, True, 0) 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 Mark In, Mark Out and 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(marks_row, False, False, 0) render_vbox.pack_start(Gtk.Label(), True, True, 0) 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) # Script work panel script_work_panel = Gtk.HBox(False, 2) script_work_panel.pack_start(script_vbox, False, False, 0) script_work_panel.pack_start(guiutils.pad_label(12, 2), False, False, 0) script_work_panel.pack_start(render_vbox, True, True, 0) self.load_script = Gtk.Button(_("Load Script")) self.load_script.connect("clicked", lambda w:load_script_dialog(_load_script_dialog_callback)) self.save_script = Gtk.Button(_("Save Script")) self.save_script.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()) self.close_button = exit_b editor_buttons_row = Gtk.HBox() editor_buttons_row.pack_start(self.load_script, False, False, 0) editor_buttons_row.pack_start(self.save_script, 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 pane = Gtk.VBox(False, 2) pane.pack_start(preview_panel, False, False, 0) pane.pack_start(script_work_panel, False, False, 0) pane.pack_start(editor_buttons_row, False, False, 0) align = guiutils.set_margins(pane, 12, 12, 12, 12) script = gmicscript.get_default_script() self.script_view.get_buffer().set_text(script.script) self.preset_label.set_text(script.name) self.update_encode_sensitive() # Connect global key listener self.connect("key-press-event", _global_key_down_listener) # Set pane and show window self.add(align) self.set_title(_("G'MIC Effects")) self.set_position(Gtk.WindowPosition.CENTER) self.set_widgets_sensitive(False) self.show_all() self.set_resizable(False) self.set_active_state(False)
def get_transition_panel(trans_data): type_combo_box = gtk.combo_box_new_text() name, t_service_id = mlttransitions.rendered_transitions[0] type_combo_box.append_text(name) name, t_service_id = mlttransitions.rendered_transitions[1] type_combo_box.append_text(name) name, t_service_id = mlttransitions.rendered_transitions[2] type_combo_box.append_text(name) type_combo_box.set_active(0) type_row = get_two_column_box(gtk.Label(_("Type:")), type_combo_box) wipe_luma_combo_box = gtk.combo_box_new_text() keys = mlttransitions.wipe_lumas.keys() keys.sort() for k in keys: wipe_luma_combo_box.append_text(k) wipe_luma_combo_box.set_active(0) wipe_label = gtk.Label(_("Wipe Pattern:")) wipe_row = get_two_column_box(wipe_label, wipe_luma_combo_box) color_button = gtk.ColorButton(gtk.gdk.Color(0.0, 0.0, 0.0)) color_button_box = guiutils.get_left_justified_box([color_button]) color_label = gtk.Label(_("Dip Color:")) color_row = get_two_column_box(color_label, color_button_box) wipe_luma_combo_box.set_sensitive(False) color_button.set_sensitive(False) wipe_label.set_sensitive(False) color_label.set_sensitive(False) transition_type_widgets = (type_combo_box, wipe_luma_combo_box, color_button, wipe_label, color_label) type_combo_box.connect( "changed", lambda w, e: _transition_type_changed(transition_type_widgets), None) length_entry = gtk.Entry() length_entry.set_text(str(30)) length_row = get_two_column_box(gtk.Label(_("Length:")), length_entry) filler = gtk.Label() filler.set_size_request(10, 10) out_clip_label = gtk.Label(_("From Clip Handle:")) out_clip_value = gtk.Label(trans_data["from_handle"]) in_clip_label = gtk.Label(_("To Clip Handle:")) in_clip_value = gtk.Label(trans_data["to_handle"]) max_label = gtk.Label(_("Max. Transition Length:")) max_value = gtk.Label(trans_data["max_length"]) out_handle_row = get_two_column_box(out_clip_label, out_clip_value) in_handle_row = get_two_column_box(in_clip_label, in_clip_value) max_row = get_two_column_box(max_label, max_value) # Encoding widgets encodings_cb = gtk.combo_box_new_text() for encoding in renderconsumer.encoding_options: encodings_cb.append_text(encoding.name) encodings_cb.set_active(0) quality_cb = gtk.combo_box_new_text() transition_widgets = (encodings_cb, quality_cb) encodings_cb.connect( "changed", lambda w, e: _transition_encoding_changed(transition_widgets), None) _fill_transition_quality_combo_box(transition_widgets) # Build panel edit_vbox = gtk.VBox(False, 2) edit_vbox.pack_start(type_row, False, False, 0) edit_vbox.pack_start(length_row, False, False, 0) edit_vbox.pack_start(wipe_row, False, False, 0) edit_vbox.pack_start(color_row, False, False, 0) data_vbox = gtk.VBox(False, 2) data_vbox.pack_start(out_handle_row, False, False, 0) data_vbox.pack_start(in_handle_row, False, False, 0) data_vbox.pack_start(max_row, False, False, 0) enconding_vbox = gtk.VBox(False, 2) enconding_vbox.pack_start(encodings_cb, False, False, 0) enconding_vbox.pack_start(quality_cb, False, False, 0) vbox = gtk.VBox(False, 2) vbox.pack_start(get_named_frame(_("Transition Options"), edit_vbox)) vbox.pack_start(get_named_frame(_("Clips info"), data_vbox)) vbox.pack_start(get_named_frame(_("Encoding"), enconding_vbox)) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(12, 24, 12, 12) alignment.add(vbox) return (alignment, type_combo_box, length_entry, encodings_cb, quality_cb, wipe_luma_combo_box, color_button)
def __init__(self): # Window self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete-event", lambda w, e: shutdown()) app_icon = gtk.gdk.pixbuf_new_from_file(respaths.IMAGE_PATH + "flowbladebatchappicon.png") self.window.set_icon_list(app_icon) self.est_time_left = gtk.Label() self.current_render = gtk.Label() self.current_render_time = gtk.Label() est_r = guiutils.get_right_justified_box( [guiutils.bold_label(_("Estimated Left:"))]) current_r = guiutils.get_right_justified_box( [guiutils.bold_label(_("Current Render:"))]) current_r_t = guiutils.get_right_justified_box( [guiutils.bold_label(_("Elapsed:"))]) est_r.set_size_request(250, 20) current_r.set_size_request(250, 20) current_r_t.set_size_request(250, 20) info_vbox = gtk.VBox(False, 0) info_vbox.pack_start( guiutils.get_left_justified_box([current_r, self.current_render]), False, False, 0) info_vbox.pack_start( guiutils.get_left_justified_box( [current_r_t, self.current_render_time]), False, False, 0) info_vbox.pack_start( guiutils.get_left_justified_box([est_r, self.est_time_left]), False, False, 0) self.items_rendered = gtk.Label() items_r = gtk.Label(_("Items Rendered:")) self.render_started_label = gtk.Label() started_r = gtk.Label(_("Render Started:")) bottom_info_vbox = gtk.HBox(True, 0) bottom_info_vbox.pack_start( guiutils.get_left_justified_box([items_r, self.items_rendered]), True, True, 0) bottom_info_vbox.pack_start( guiutils.get_left_justified_box( [started_r, self.render_started_label]), True, True, 0) self.not_rendering_txt = _("Not Rendering") self.render_progress_bar = gtk.ProgressBar() self.render_progress_bar.set_text(self.not_rendering_txt) self.remove_selected = gtk.Button(_("Delete Selected")) self.remove_selected.connect( "clicked", lambda w, e: self.remove_selected_clicked(), None) self.remove_finished = gtk.Button(_("Delete Finished")) self.remove_finished.connect( "clicked", lambda w, e: self.remove_finished_clicked(), None) self.reload_button = gtk.Button(_("Reload Queue")) self.reload_button.connect("clicked", lambda w, e: self.reload_queue(), None) self.render_button = guiutils.get_render_button() self.render_button.connect("clicked", lambda w, e: self.launch_render(), None) self.stop_render_button = gtk.Button(_("Stop Render")) self.stop_render_button.set_sensitive(False) self.stop_render_button.connect("clicked", lambda w, e: self.abort_render(), None) button_row = gtk.HBox(False, 0) button_row.pack_start(self.remove_selected, False, False, 0) button_row.pack_start(self.remove_finished, False, False, 0) button_row.pack_start(gtk.Label(), True, True, 0) #button_row.pack_start(self.reload_button, True, True, 0) #button_row.pack_start(gtk.Label(), True, True, 0) button_row.pack_start(self.stop_render_button, False, False, 0) button_row.pack_start(self.render_button, False, False, 0) top_vbox = gtk.VBox(False, 0) top_vbox.pack_start(info_vbox, False, False, 0) top_vbox.pack_start(guiutils.get_pad_label(12, 12), False, False, 0) top_vbox.pack_start(self.render_progress_bar, False, False, 0) top_vbox.pack_start(guiutils.get_pad_label(12, 12), False, False, 0) top_vbox.pack_start(button_row, False, False, 0) top_align = gtk.Alignment(0.5, 0.5, 1.0, 1.0) top_align.set_padding(12, 12, 12, 12) top_align.add(top_vbox) self.queue_view = RenderQueueView() self.queue_view.fill_data_model(render_queue) self.queue_view.set_size_request(WINDOW_WIDTH, QUEUE_HEIGHT) bottom_align = gtk.Alignment(0.5, 0.5, 1.0, 1.0) bottom_align.set_padding(0, 2, 8, 8) bottom_align.add(bottom_info_vbox) # Content pane pane = gtk.VBox(False, 1) pane.pack_start(top_align, False, False, 0) pane.pack_start(self.queue_view, True, True, 0) pane.pack_start(bottom_align, False, False, 0) # Set pane and show window self.window.add(pane) self.window.set_title(_("Flowblade Batch Render")) self.window.set_position(gtk.WIN_POS_CENTER) self.window.show_all()
def show_reverse_dialog(media_file, default_range_render, _response_callback): folder, file_name = os.path.split(media_file.path) if media_file.is_proxy_file: folder, file_name = os.path.split(media_file.second_file_path) name, ext = os.path.splitext(file_name) dialog = Gtk.Dialog(_("Render Reverse Motion Video File"), gui.editor_window.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT, _("Render").encode('utf-8'), Gtk.ResponseType.ACCEPT)) media_file_label = Gtk.Label(label=_("Source Media File: ")) media_name = Gtk.Label(label="<b>" + media_file.name + "</b>") media_name.set_use_markup(True) SOURCE_PAD = 8 SOURCE_HEIGHT = 20 mf_row = guiutils.get_left_justified_box([media_file_label, guiutils.pad_label(SOURCE_PAD, SOURCE_HEIGHT), media_name]) mark_in = Gtk.Label(label=_("<b>not set</b>")) mark_out = Gtk.Label(label=_("<b>not set</b>")) if media_file.mark_in != -1: mark_in = Gtk.Label(label="<b>" + utils.get_tc_string(media_file.mark_in) + "</b>") if media_file.mark_out != -1: mark_out = Gtk.Label(label="<b>" + utils.get_tc_string(media_file.mark_out) + "</b>") mark_in.set_use_markup(True) mark_out.set_use_markup(True) fb_widgets = utils.EmptyClass() fb_widgets.file_name = Gtk.Entry() fb_widgets.file_name.set_text(name + "_REVERSE") fb_widgets.extension_label = Gtk.Label() fb_widgets.extension_label.set_size_request(45, 20) name_row = Gtk.HBox(False, 4) name_row.pack_start(fb_widgets.file_name, True, True, 0) name_row.pack_start(fb_widgets.extension_label, False, False, 4) fb_widgets.out_folder = Gtk.FileChooserButton(_("Select Target Folder")) fb_widgets.out_folder.set_action(Gtk.FileChooserAction.SELECT_FOLDER) fb_widgets.out_folder.set_current_folder(folder) label = Gtk.Label(label=_("Speed %:")) adjustment = Gtk.Adjustment(float(-100), float(-600), float(-1), float(1)) fb_widgets.hslider = Gtk.HScale() fb_widgets.hslider.set_adjustment(adjustment) fb_widgets.hslider.set_draw_value(False) spin = Gtk.SpinButton() spin.set_numeric(True) spin.set_adjustment(adjustment) fb_widgets.hslider.set_digits(0) spin.set_digits(0) slider_hbox = Gtk.HBox(False, 4) slider_hbox.pack_start(fb_widgets.hslider, True, True, 0) slider_hbox.pack_start(spin, False, False, 4) slider_hbox.set_size_request(450,35) hbox = Gtk.HBox(False, 2) hbox.pack_start(guiutils.pad_label(8, 8), False, False, 0) hbox.pack_start(slider_hbox, False, False, 0) profile_selector = ProfileSelector() profile_selector.fill_options() profile_selector.widget.set_sensitive(True) fb_widgets.out_profile_combo = profile_selector.widget quality_selector = RenderQualitySelector() fb_widgets.quality_cb = quality_selector.widget # Encoding encoding_selector = RenderEncodingSelector(quality_selector, fb_widgets.extension_label, None) encoding_selector.encoding_selection_changed() fb_widgets.encodings_cb = encoding_selector.widget objects_list = Gtk.TreeStore(str, bool) objects_list.append(None, [_("Full Source Length"), True]) if media_file.mark_in != -1 and media_file.mark_out != -1: range_available = True else: range_available = False objects_list.append(None, [_("Source Mark In to Mark Out"), range_available]) fb_widgets.render_range = Gtk.ComboBox.new_with_model(objects_list) renderer_text = Gtk.CellRendererText() fb_widgets.render_range.pack_start(renderer_text, True) fb_widgets.render_range.add_attribute(renderer_text, "text", 0) fb_widgets.render_range.add_attribute(renderer_text, 'sensitive', 1) if default_range_render == False: fb_widgets.render_range.set_active(0) else: fb_widgets.render_range.set_active(1) fb_widgets.render_range.show() # To update rendered length display clip_length = _get_rendered_slomo_clip_length(media_file, fb_widgets.render_range, 100) clip_length_label = Gtk.Label(label=utils.get_tc_string(clip_length)) fb_widgets.hslider.connect("value-changed", _reverse_speed_changed, media_file, fb_widgets.render_range, clip_length_label) fb_widgets.render_range.connect("changed", _reverse_range_changed, media_file, fb_widgets.hslider, clip_length_label) # Build gui vbox = Gtk.VBox(False, 2) vbox.pack_start(mf_row, False, False, 0) vbox.pack_start(guiutils.get_left_justified_box([Gtk.Label(label=_("Source Mark In: ")), guiutils.pad_label(SOURCE_PAD, SOURCE_HEIGHT), mark_in]), False, False, 0) vbox.pack_start(guiutils.get_left_justified_box([Gtk.Label(label=_("Source Mark Out: ")), guiutils.pad_label(SOURCE_PAD, SOURCE_HEIGHT), mark_out]), False, False, 0) vbox.pack_start(guiutils.pad_label(18, 12), False, False, 0) vbox.pack_start(label, False, False, 0) vbox.pack_start(hbox, False, False, 0) vbox.pack_start(guiutils.pad_label(18, 12), False, False, 0) vbox.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Target File:")), name_row, 120), False, False, 0) vbox.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Target Folder:")), fb_widgets.out_folder, 120), False, False, 0) vbox.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Target Profile:")), fb_widgets.out_profile_combo, 200), False, False, 0) vbox.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Target Encoding:")), fb_widgets.encodings_cb, 200), False, False, 0) vbox.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Target Quality:")), fb_widgets.quality_cb, 200), False, False, 0) vbox.pack_start(guiutils.pad_label(18, 12), False, False, 0) vbox.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Render Range:")), fb_widgets.render_range, 180), False, False, 0) vbox.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Rendered Clip Length:")), clip_length_label, 180), False, False, 0) alignment = guiutils.set_margins(vbox, 6, 24, 24, 24) dialog.vbox.pack_start(alignment, True, True, 0) dialogutils.set_outer_margins(dialog.vbox) dialogutils.default_behaviour(dialog) dialog.connect('response', _response_callback, fb_widgets, media_file) dialog.show_all()
def __init__(self): Gtk.Dialog.__init__( self, _("Workflow First Run Wizard"), gui.editor_window.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Select Preset Workflow and Continue"), Gtk.ResponseType.ACCEPT)) self.selection = STANDARD_PRESET info_label_text_1 = _("<b>Welcome to Flowblade 2.4</b>") info_label_1 = Gtk.Label(info_label_text_1) info_label_1.set_use_markup(True) info_label_text_2 = _( "<b>Flowblade 2.4</b> comes with a configurable workflow.") info_label_2 = Gtk.Label(info_label_text_2) info_label_2.set_use_markup(True) INDENT = " " info_label_text_6 = INDENT + "\u2022" + _(" You can select which <b>tools</b> you want to use.\n") + \ INDENT + "\u2022" + _(" Many timeline edit <b>behaviours</b> are configurable.\n") info_label_6 = Gtk.Label(info_label_text_6) info_label_6.set_use_markup(True) info_label_text_3 = _("<b>Select Workflow Preset</b>") info_label_3 = Gtk.Label(info_label_text_3) info_label_3.set_use_markup(True) guiutils.set_margins(info_label_3, 0, 4, 0, 0) info_label_text_7 = _( "You can change and configure individual tools and behaviours <b>anytime</b>" ) info_label_7 = Gtk.Label(info_label_text_7) info_label_7.set_use_markup(True) info_label_text_4 = _(" by pressing ") info_label_4 = Gtk.Label(info_label_text_4) info_label_4.set_use_markup(True) icon = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "workflow.png") info_label_text_5 = _(" icon.") info_label_5 = Gtk.Label(info_label_text_5) workflow_name = _("<b>Standard</b>") stadard_preset_workflow_text_1 = _( "Standard workflow has the <b>Move</b> tool as default tool\nand presents a workflow\nsimilar to most video editors." ) workflow_select_item_1 = self.get_workflow_select_item( STANDARD_PRESET, workflow_name, stadard_preset_workflow_text_1) workflow_name = _("<b>Film Style</b>") filmstyle_preset_workflow_text_2 = _( "Film Style workflow has the <b>Insert</b> tool as default tool\nand employs insert style editing.\nThis was the workflow in previous versions of the application." ) workflow_select_item_2 = self.get_workflow_select_item( FILM_STYLE_PRESET, workflow_name, filmstyle_preset_workflow_text_2) workflow_name = _("<b>Keep Existing Worflow</b>") keep_workflow_text_2 = _( "Select this if you have installed new version and wish to keep your existing workflow." ) workflow_select_item_3 = self.get_workflow_select_item( KEEP_EXISTING, workflow_name, keep_workflow_text_2) self.workflow_items = [ workflow_select_item_1, workflow_select_item_2, workflow_select_item_3 ] panel_vbox = Gtk.VBox(False, 2) panel_vbox.pack_start(guiutils.get_pad_label(24, 12), False, False, 0) panel_vbox.pack_start(guiutils.get_centered_box([info_label_1]), False, False, 0) panel_vbox.pack_start(guiutils.get_pad_label(24, 12), False, False, 0) panel_vbox.pack_start(guiutils.get_left_justified_box([info_label_2]), False, False, 0) panel_vbox.pack_start(guiutils.get_left_justified_box([info_label_6]), False, False, 0) panel_vbox.pack_start(guiutils.get_pad_label(24, 24), False, False, 0) panel_vbox.pack_start(guiutils.get_centered_box([info_label_3]), False, False, 0) panel_vbox.pack_start(workflow_select_item_1, False, False, 0) panel_vbox.pack_start(workflow_select_item_2, False, False, 0) panel_vbox.pack_start(workflow_select_item_3, False, False, 0) panel_vbox.pack_start(guiutils.get_pad_label(24, 48), False, False, 0) panel_vbox.pack_start(guiutils.get_centered_box([info_label_7]), False, False, 0) panel_vbox.pack_start( guiutils.get_centered_box([info_label_4, icon, info_label_5]), False, False, 0) panel_vbox.pack_start(guiutils.get_pad_label(24, 24), False, False, 0) alignment = dialogutils.get_alignment2(panel_vbox) self.vbox.pack_start(alignment, True, True, 0) dialogutils.set_outer_margins(self.vbox) dialogs._default_behaviour(self) self.connect('response', self.done) self.show_all()
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 + "flowblademedialinker.png") self.set_icon(app_icon) # Load media row load_button = Gtk.Button(_("Load Clip")) load_button.connect("clicked", lambda w: self.load_button_clicked()) self.media_info = Gtk.Label() self.media_info.set_markup("<small>no clip loaded</small>")#"<small>" + "video_clip.mpg, 1920x1080, 25.0fps" + "</small>" ) load_row = Gtk.HBox(False, 2) load_row.pack_start(load_button, False, False, 0) load_row.pack_start(guiutils.get_pad_label(6, 2), False, False, 0) load_row.pack_start(self.media_info, False, False, 0) load_row.pack_start(Gtk.Label(), True, True, 0) load_row.set_margin_bottom(4) # Clip monitor 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 # This could be any GTK+ widget (that is not "windowless"), only its XWindow draw rect # is used to position and scale SDL overlay that actually displays video. self.monitor.set_size_request(MONITOR_WIDTH, MONITOR_HEIGHT) left_vbox = Gtk.VBox(False, 0) left_vbox.pack_start(load_row, False, False, 0) left_vbox.pack_start(self.monitor, True, True, 0) 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) right_vbox = Gtk.VBox(False, 2) right_vbox.pack_start(preview_info_row, False, False, 0) right_vbox.pack_start(self.preview_monitor, True, True, 0) # Monitors panel monitors_panel = Gtk.HBox(False, 2) monitors_panel.pack_start(left_vbox, False, False, 0) monitors_panel.pack_start(Gtk.Label(), True, True, 0) monitors_panel.pack_start(right_vbox, False, False, 0) # Control row self.tc_display = guicomponents.MonitorTCDisplay() self.tc_display.use_internal_frame = True self.tc_display.widget.set_valign(Gtk.Align.CENTER) self.tc_display.use_internal_fps = True 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.control_buttons = glassbuttons.GmicButtons() pressed_callback_funcs = [prev_pressed, next_pressed, mark_in_pressed, mark_out_pressed, marks_clear_pressed, to_mark_in_pressed, to_mark_out_pressed] self.control_buttons.set_callbacks(pressed_callback_funcs) self.preview_button = Gtk.Button(_("Preview")) self.preview_button.connect("clicked", lambda w: render_preview_frame()) control_panel = Gtk.HBox(False, 2) control_panel.pack_start(self.tc_display.widget, False, False, 0) control_panel.pack_start(pos_bar_frame, True, True, 0) control_panel.pack_start(self.control_buttons.widget, False, False, 0) control_panel.pack_start(guiutils.pad_label(2, 2), False, False, 0) control_panel.pack_start(self.preview_button, False, False, 0) preview_panel = Gtk.VBox(False, 2) preview_panel.pack_start(monitors_panel, False, False, 0) preview_panel.pack_start(control_panel, False, False, 0) preview_panel.set_margin_bottom(8) # Script area self.preset_label = Gtk.Label("Preset Script:") self.preset_select = Gtk.ComboBoxText() self.preset_select.set_tooltip_text(_("Select Preset G'Mic script")) for gmic_script in _scripts: self.preset_select.append_text(gmic_script.name) print gmic_script.script self.preset_select.set_active(0) self.preset_select.connect('changed', lambda w: self.update_script_view()) preset_row = Gtk.HBox(False, 2) preset_row.pack_start(self.preset_label, False, False, 0) preset_row.pack_start(guiutils.pad_label(6, 12), False, False, 0) preset_row.pack_start(self.preset_select, False, False, 0) preset_row.pack_start(Gtk.Label(), True, True, 0) self.script_view = Gtk.TextView() self.script_view.set_sensitive(False) self.script_view.set_pixels_above_lines(2) self.script_view.set_left_margin(2) script_sw = Gtk.ScrolledWindow() script_sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) script_sw.add(self.script_view) script_sw.set_size_request(MONITOR_WIDTH - 100, 125) self.out_view = Gtk.TextView() self.out_view.set_sensitive(False) self.out_view.set_pixels_above_lines(2) self.out_view.set_left_margin(2) fd = Pango.FontDescription.from_string("Sans 8") self.out_view.override_font(fd) out_sw = Gtk.ScrolledWindow() out_sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) out_sw.add(self.out_view) out_sw.set_size_request(MONITOR_WIDTH - 150, 100) script_vbox = Gtk.VBox(False, 2) script_vbox.pack_start(preset_row, False, False, 0) script_vbox.pack_start(script_sw, True, True, 0) script_vbox.pack_start(out_sw, True, True, 0) # Render panel self.mark_in_label = guiutils.bold_label("Mark In:") self.mark_out_label = guiutils.bold_label("Mark Out:") self.length_label = guiutils.bold_label("Length:") self.mark_in_info = Gtk.Label("-") self.mark_out_info = Gtk.Label("-") self.length_info = Gtk.Label("-") in_row = guiutils.get_two_column_box(self.mark_in_label, self.mark_in_info, 150) out_row = guiutils.get_two_column_box(self.mark_out_label, self.mark_out_info, 150) length_row = guiutils.get_two_column_box(self.length_label, self.length_info, 150) marks_row = Gtk.VBox(False, 2) marks_row.pack_start(in_row, True, True, 0) marks_row.pack_start(out_row, True, True, 0) marks_row.pack_start(length_row, True, True, 0) self.out_folder = Gtk.FileChooserButton(_("Select Folder")) self.out_folder.set_action(Gtk.FileChooserAction.SELECT_FOLDER) self.out_folder.set_current_folder(os.path.expanduser("~") + "/") 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_settings_button = Gtk.Button(_("Encoding settings")) self.encode_desc = Gtk.Label() self.encode_desc.set_markup("<small>"+ "MPEG-2, 3000kbps" + "</small>") 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("0%") self.render_status_info = Gtk.Label() self.render_status_info.set_markup("<small>"+ "52 frames, requiring 768MB dis space, video file: ../movie.mpg" + "</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.render_button = guiutils.get_sized_button(_("Render"), 100, 32) self.render_button.connect("clicked", lambda w:render()) 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(marks_row, False, False, 0) render_vbox.pack_start(Gtk.Label(), True, True, 0) 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) # Script work panel script_work_panel = Gtk.HBox(False, 2) script_work_panel.pack_start(script_vbox, False, False, 0) script_work_panel.pack_start(guiutils.pad_label(12, 2), False, False, 0) script_work_panel.pack_start(render_vbox, True, True, 0) self.load_script = Gtk.Button(_("Load Script")) #load_layers.connect("clicked", lambda w:self._load_layers_pressed()) self.save_script = Gtk.Button(_("Save Script")) #save_layers.connect("clicked", lambda w:self._save_layers_pressed()) info_b = guiutils.get_sized_button(_("Info"), 150, 32) exit_b = guiutils.get_sized_button(_("Close"), 150, 32) editor_buttons_row = Gtk.HBox() editor_buttons_row.pack_start(self.load_script, False, False, 0) editor_buttons_row.pack_start(self.save_script, False, False, 0) editor_buttons_row.pack_start(Gtk.Label(), True, True, 0) editor_buttons_row.pack_start(info_b, False, False, 0) editor_buttons_row.pack_start(guiutils.pad_label(96, 2), False, False, 0) editor_buttons_row.pack_start(exit_b, False, False, 0) # Build window pane = Gtk.VBox(False, 2) pane.pack_start(preview_panel, False, False, 0) pane.pack_start(script_work_panel, False, False, 0) pane.pack_start(editor_buttons_row, False, False, 0) align = guiutils.set_margins(pane, 12, 12, 12, 12) # Set pane and show window self.add(align) self.set_title(_("G'MIC Effects")) self.set_position(Gtk.WindowPosition.CENTER) self.set_widgets_sensitive(False) self.show_all() self.set_resizable(False) self.set_active_state(False)
def __init__(self): # Window self.window = Gtk.Window(Gtk.WindowType.TOPLEVEL) self.window.connect("delete-event", lambda w, e:shutdown()) app_icon = GdkPixbuf.Pixbuf.new_from_file(respaths.IMAGE_PATH + "flowbladebatchappicon.png") self.window.set_icon(app_icon) self.est_time_left = Gtk.Label() self.current_render = Gtk.Label() self.current_render_time = Gtk.Label() est_r = guiutils.get_right_justified_box([guiutils.bold_label(_("Estimated Left:"))]) current_r = guiutils.get_right_justified_box([guiutils.bold_label(_("Current Render:"))]) current_r_t = guiutils.get_right_justified_box([guiutils.bold_label(_("Elapsed:"))]) est_r.set_size_request(250, 20) current_r.set_size_request(250, 20) current_r_t.set_size_request(250, 20) info_vbox = Gtk.VBox(False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([current_r, self.current_render]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([current_r_t, self.current_render_time]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([est_r, self.est_time_left]), False, False, 0) self.items_rendered = Gtk.Label() items_r = Gtk.Label(label=_("Items Rendered:")) self.render_started_label = Gtk.Label() started_r = Gtk.Label(label=_("Render Started:")) bottom_info_vbox = Gtk.HBox(True, 0) bottom_info_vbox.pack_start(guiutils.get_left_justified_box([items_r, self.items_rendered]), True, True, 0) bottom_info_vbox.pack_start(guiutils.get_left_justified_box([started_r, self.render_started_label]), True, True, 0) self.not_rendering_txt = _("Not Rendering") self.render_progress_bar = Gtk.ProgressBar() self.render_progress_bar.set_text(self.not_rendering_txt) self.remove_selected = Gtk.Button(_("Delete Selected")) self.remove_selected.connect("clicked", lambda w, e: self.remove_selected_clicked(), None) self.remove_finished = Gtk.Button(_("Delete Finished")) self.remove_finished.connect("clicked", lambda w, e: self.remove_finished_clicked(), None) self.reload_button = Gtk.Button(_("Reload Queue")) self.reload_button.connect("clicked", lambda w, e: self.reload_queue(), None) self.render_button = guiutils.get_render_button() self.render_button.connect("clicked", lambda w, e: self.launch_render(), None) self.stop_render_button = Gtk.Button(_("Stop Render")) self.stop_render_button.set_sensitive(False) self.stop_render_button.connect("clicked", lambda w, e: self.abort_render(), None) button_row = Gtk.HBox(False, 0) button_row.pack_start(self.remove_selected, False, False, 0) button_row.pack_start(self.remove_finished, False, False, 0) button_row.pack_start(Gtk.Label(), True, True, 0) button_row.pack_start(self.stop_render_button, False, False, 0) button_row.pack_start(self.render_button, False, False, 0) top_vbox = Gtk.VBox(False, 0) top_vbox.pack_start(info_vbox, False, False, 0) top_vbox.pack_start(guiutils.get_pad_label(12, 12), False, False, 0) top_vbox.pack_start(self.render_progress_bar, False, False, 0) top_vbox.pack_start(guiutils.get_pad_label(12, 12), False, False, 0) top_vbox.pack_start(button_row, False, False, 0) top_align = guiutils.set_margins(top_vbox, 12, 12, 12, 12) self.queue_view = RenderQueueView() self.queue_view.fill_data_model(render_queue) self.queue_view.set_size_request(WINDOW_WIDTH, QUEUE_HEIGHT) bottom_align = guiutils.set_margins(bottom_info_vbox, 0, 2, 8, 8) # Content pane pane = Gtk.VBox(False, 1) pane.pack_start(top_align, False, False, 0) pane.pack_start(self.queue_view, True, True, 0) pane.pack_start(bottom_align, False, False, 0) # Set pane and show window self.window.add(pane) self.window.set_title(_("Flowblade Batch Render")) self.window.set_position(Gtk.WindowPosition.CENTER) self.window.show_all()
def __init__(self, files_to_render, already_have_proxies, not_video_files, is_proxy_file, other_project_proxies, proxy_w, proxy_h, proxy_file_extension): dialog_title =_("Proxy Render Info") self.files_to_render = files_to_render self.other_project_proxies = other_project_proxies self.already_have_proxies = already_have_proxies self.proxy_w = proxy_w self.proxy_h = proxy_h self.proxy_file_extension = proxy_file_extension self.issues = 1 if (len(files_to_render) + len(already_have_proxies) + len(other_project_proxies)) == 0 and not_video_files > 0: self.dialog = Gtk.Dialog(dialog_title, gui.editor_window.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Close").encode('utf-8'), Gtk.ResponseType.CLOSE)) info_box = dialogutils.get_warning_message_dialog_panel(_("Nothing will be rendered"), _("No video files were selected.\nOnly video files can have proxy files."), True) self.dialog.connect('response', dialogutils.dialog_destroy) else: self.dialog = Gtk.Dialog(dialog_title, gui.editor_window.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Cancel").encode('utf-8'), Gtk.ResponseType.CANCEL, _("Do Render Action" ).encode('utf-8'), Gtk.ResponseType.OK)) self.dialog.connect('response', self.response) rows = "" if len(already_have_proxies) > 0 and len(other_project_proxies) > 0: text = _("Proxies exist that were created by this and other projects for ") + str(len(already_have_proxies) + len(other_project_proxies)) + _(" file(s).\n") rows = rows + self.issues_str() + text elif len(already_have_proxies) > 0 and len(other_project_proxies) == 0: text = _("Proxies have already been created for ") + str(len(already_have_proxies)) + _(" file(s).\n") rows = rows + self.issues_str() + text elif len(other_project_proxies) > 0: text = _("Proxies exist that were created by other projects for ") + str(len(other_project_proxies)) + _(" file(s).\n") rows = rows + self.issues_str() + text if not_video_files > 0: text = _("You are trying to create proxies for ") + str(not_video_files) + _(" non-video file(s).\n") rows = rows + self.issues_str() + text if is_proxy_file > 0: text = _("You are trying to create proxies for ") + str(not_video_files) + _(" proxy file(s).\n") rows = rows + self.issues_str() + text issues_box = dialogutils.get_warning_message_dialog_panel(_("There are some issues with proxy render request"), rows, True) proxy_mode = editorstate.PROJECT().proxy_data.proxy_mode if proxy_mode == appconsts.USE_PROXY_MEDIA: info_label = Gtk.Label(_("<b>Rerendering proxies currently not possible!</b>\nChange to 'Use Original Media' mode to rerender proxies.")) info_label.set_use_markup(True) info_row = guiutils.get_left_justified_box([guiutils.get_pad_label(24, 10), info_label]) self.action_select = Gtk.ComboBoxText() self.action_select.append_text(_("Render Unrendered Possible & Use existing")) if proxy_mode != appconsts.USE_PROXY_MEDIA: self.action_select.append_text(_("Rerender All Possible" )) self.action_select.set_active(0) action_row = guiutils.get_left_justified_box([guiutils.get_pad_label(24, 10), Gtk.Label(label=_("Select Render Action: ")), self.action_select]) info_box = Gtk.VBox() info_box.pack_start(issues_box, False, False, 0) if proxy_mode == appconsts.USE_PROXY_MEDIA: info_box.pack_start(info_row, False, False, 0) info_box.pack_start(guiutils.get_pad_label(12, 24), False, False, 0) info_box.pack_start(action_row, False, False, 0) guiutils.set_margins(info_box, 12, 48, 12, 0) self.dialog.vbox.pack_start(info_box, True, True, 0) dialogutils.set_outer_margins(self.dialog.vbox) self.dialog.show_all()
def effect_selection_changed(): global keyframe_editor_widgets # Check we have clip if clip == None: keyframe_editor_widgets = [] return # Check we actually have filters so we can display one. # If not, clear previous filters from view. if len(clip.filters) == 0: vbox = Gtk.VBox(False, 0) vbox.pack_start(Gtk.Label(), False, False, 0) widgets.value_edit_frame.remove(widgets.value_edit_box) widgets.value_edit_frame.add(vbox) vbox.show_all() widgets.value_edit_box = vbox keyframe_editor_widgets = [] return # "changed" get's called twice when adding filter and selecting last # so we use this do this only once if block_changed_update == True: return keyframe_editor_widgets = [] # Get selected row which is also index of filter in clip.filters treeselection = widgets.effect_stack_view.treeview.get_selection() (model, rows) = treeselection.get_selected_rows() # If we don't get legal selection select first filter try: row = rows[0] filter_index = max(row) except: filter_index = 0 filter_object = clip.filters[filter_index] global current_filter_index current_filter_index = filter_index # Create EditableProperty wrappers for properties editable_properties = propertyedit.get_filter_editable_properties( clip, filter_object, filter_index, track, clip_index) # Get editors and set them displayed vbox = Gtk.VBox(False, 0) try: filter_name = translations.filter_names[filter_object.info.name] except KeyError: filter_name = filter_object.info.name filter_name_label = Gtk.Label(label="<b>" + filter_name + "</b>") filter_name_label.set_use_markup(True) vbox.pack_start(filter_name_label, False, False, 0) vbox.pack_start(guicomponents.EditorSeparator().widget, False, False, 0) if len(editable_properties) > 0: # Create editor row for each editable property for ep in editable_properties: editor_row = propertyeditorbuilder.get_editor_row(ep) if editor_row == None: continue # Set keyframe editor widget to be updated for frame changes if such is created try: editor_type = ep.args[propertyeditorbuilder.EDITOR] except KeyError: editor_type = propertyeditorbuilder.SLIDER # this is the default value if ((editor_type == propertyeditorbuilder.KEYFRAME_EDITOR) or (editor_type == propertyeditorbuilder.KEYFRAME_EDITOR_RELEASE) or (editor_type == propertyeditorbuilder.KEYFRAME_EDITOR_CLIP)): keyframe_editor_widgets.append(editor_row) # if slider property is being dedited as keyrame property if hasattr(editor_row, "is_kf_editor"): keyframe_editor_widgets.append(editor_row) vbox.pack_start(editor_row, False, False, 0) if not hasattr(editor_row, "no_separator"): vbox.pack_start(guicomponents.EditorSeparator().widget, False, False, 0) # Create NonMltEditableProperty wrappers for properties non_mlteditable_properties = propertyedit.get_non_mlt_editable_properties( clip, filter_object, filter_index) # Extra editors. Editable properties may have already been created # with "editor=no_editor" and now extra editors may be created to edit those # Non mlt properties are added as these are only need with extraeditors editable_properties.extend(non_mlteditable_properties) editor_rows = propertyeditorbuilder.get_filter_extra_editor_rows( filter_object, editable_properties) for editor_row in editor_rows: vbox.pack_start(editor_row, False, False, 0) if not hasattr(editor_row, "no_separator"): vbox.pack_start(guicomponents.EditorSeparator().widget, False, False, 0) vbox.pack_start(guiutils.pad_label(12, 12), False, False, 0) hamburger_launcher_surface = cairo.ImageSurface.create_from_png( respaths.IMAGE_PATH + "hamburger_big.png") hamburger_launcher = guicomponents.PressLaunch( _hamburger_launch_pressed, hamburger_launcher_surface, 24, 24) sl_row = guiutils.get_left_justified_box([hamburger_launcher.widget]) vbox.pack_start(sl_row, False, False, 0) vbox.pack_start(Gtk.Label(), True, True, 0) else: vbox.pack_start(Gtk.Label(label=_("No editable parameters")), True, True, 0) vbox.show_all() scroll_window = Gtk.ScrolledWindow() scroll_window.add_with_viewport(vbox) scroll_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) scroll_window.show_all() widgets.value_edit_frame.remove(widgets.value_edit_box) widgets.value_edit_frame.add(scroll_window) widgets.value_edit_box = scroll_window
def show_slowmo_dialog(media_file, _response_callback): folder, file_name = os.path.split(media_file.path) name, ext = os.path.splitext(file_name) dialog = Gtk.Dialog(_("Render Slow/Fast Motion Video File"), gui.editor_window.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT, _("Render").encode('utf-8'), Gtk.ResponseType.ACCEPT)) media_file_label = Gtk.Label(label=_("Source Media File: ")) media_name = Gtk.Label(label="<b>" + media_file.name + "</b>") media_name.set_use_markup(True) SOURCE_PAD = 8 SOURCE_HEIGHT = 20 mf_row = guiutils.get_left_justified_box([media_file_label, guiutils.pad_label(SOURCE_PAD, SOURCE_HEIGHT), media_name]) mark_in = Gtk.Label(label=_("<b>not set</b>")) mark_out = Gtk.Label(label=_("<b>not set</b>")) if media_file.mark_in != -1: mark_in = Gtk.Label(label="<b>" + utils.get_tc_string(media_file.mark_in) + "</b>") if media_file.mark_out != -1: mark_out = Gtk.Label(label="<b>" + utils.get_tc_string(media_file.mark_out) + "</b>") mark_in.set_use_markup(True) mark_out.set_use_markup(True) fb_widgets = utils.EmptyClass() fb_widgets.file_name = Gtk.Entry() fb_widgets.file_name.set_text(name + "_MOTION") fb_widgets.extension_label = Gtk.Label() fb_widgets.extension_label.set_size_request(45, 20) name_row = Gtk.HBox(False, 4) name_row.pack_start(fb_widgets.file_name, True, True, 0) name_row.pack_start(fb_widgets.extension_label, False, False, 4) fb_widgets.out_folder = Gtk.FileChooserButton(_("Select Target Folder")) fb_widgets.out_folder.set_action(Gtk.FileChooserAction.SELECT_FOLDER) fb_widgets.out_folder.set_current_folder(folder) label = Gtk.Label(label=_("Speed %:")) adjustment = Gtk.Adjustment(float(100), float(1), float(600), float(1)) fb_widgets.hslider = Gtk.HScale() fb_widgets.hslider.set_adjustment(adjustment) fb_widgets.hslider.set_draw_value(False) spin = Gtk.SpinButton() spin.set_numeric(True) spin.set_adjustment(adjustment) fb_widgets.hslider.set_digits(0) spin.set_digits(0) slider_hbox = Gtk.HBox(False, 4) slider_hbox.pack_start(fb_widgets.hslider, True, True, 0) slider_hbox.pack_start(spin, False, False, 4) slider_hbox.set_size_request(350,35) hbox = Gtk.HBox(False, 2) hbox.pack_start(guiutils.pad_label(8, 8), False, False, 0) hbox.pack_start(label, False, False, 0) hbox.pack_start(slider_hbox, False, False, 0) profile_selector = ProfileSelector() profile_selector.fill_options() profile_selector.widget.set_sensitive(True) fb_widgets.out_profile_combo = profile_selector.widget quality_selector = RenderQualitySelector() fb_widgets.quality_cb = quality_selector.widget # Encoding encoding_selector = RenderEncodingSelector(quality_selector, fb_widgets.extension_label, None) encoding_selector.encoding_selection_changed() fb_widgets.encodings_cb = encoding_selector.widget objects_list = Gtk.TreeStore(str, bool) objects_list.append(None, [_("Full Source Length"), True]) if media_file.mark_in != -1 and media_file.mark_out != -1: range_available = True else: range_available = False objects_list.append(None, [_("Source Mark In to Mark Out"), range_available]) fb_widgets.render_range = Gtk.ComboBox.new_with_model(objects_list) renderer_text = Gtk.CellRendererText() fb_widgets.render_range.pack_start(renderer_text, True) fb_widgets.render_range.add_attribute(renderer_text, "text", 0) fb_widgets.render_range.add_attribute(renderer_text, 'sensitive', 1) fb_widgets.render_range.set_active(0) fb_widgets.render_range.show() # To update rendered length display clip_length = _get_rendered_slomo_clip_length(media_file, fb_widgets.render_range, 100) clip_length_label = Gtk.Label(label=utils.get_tc_string(clip_length)) fb_widgets.hslider.connect("value-changed", _slomo_speed_changed, media_file, fb_widgets.render_range, clip_length_label) fb_widgets.render_range.connect("changed", _slomo_range_changed, media_file, fb_widgets.hslider, clip_length_label) # Build gui vbox = Gtk.VBox(False, 2) vbox.pack_start(mf_row, False, False, 0) vbox.pack_start(guiutils.get_left_justified_box([Gtk.Label(label=_("Source Mark In: ")), guiutils.pad_label(SOURCE_PAD, SOURCE_HEIGHT), mark_in]), False, False, 0) vbox.pack_start(guiutils.get_left_justified_box([Gtk.Label(label=_("Source_Mark Out: ")), guiutils.pad_label(SOURCE_PAD, SOURCE_HEIGHT), mark_out]), False, False, 0) vbox.pack_start(guiutils.pad_label(18, 12), False, False, 0) vbox.pack_start(hbox, False, False, 0) vbox.pack_start(guiutils.pad_label(18, 12), False, False, 0) vbox.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Target File:")), name_row, 120), False, False, 0) vbox.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Target Folder:")), fb_widgets.out_folder, 120), False, False, 0) vbox.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Target Profile:")), fb_widgets.out_profile_combo, 200), False, False, 0) vbox.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Target Encoding:")), fb_widgets.encodings_cb, 200), False, False, 0) vbox.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Target Quality:")), fb_widgets.quality_cb, 200), False, False, 0) vbox.pack_start(guiutils.pad_label(18, 12), False, False, 0) vbox.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Render Range:")), fb_widgets.render_range, 180), False, False, 0) vbox.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Rendered Clip Length:")), clip_length_label, 180), False, False, 0) alignment = guiutils.set_margins(vbox, 6, 24, 24, 24) dialog.vbox.pack_start(alignment, True, True, 0) dialogutils.set_outer_margins(dialog.vbox) dialogutils.default_behaviour(dialog) dialog.connect('response', _response_callback, fb_widgets, media_file) dialog.show_all()
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 + "flowblademedialinker.png") self.set_icon(app_icon) load_button = Gtk.Button(_("Load Project For Relinking")) load_button.connect("clicked", lambda w: self.load_button_clicked()) project_row = Gtk.HBox(False, 2) project_row.pack_start(load_button, False, False, 0) project_row.pack_start(Gtk.Label(), True, True, 0) self.missing_label = guiutils.bold_label("<b>" + _("Original Media Missing:") + "</b> ") self.found_label = guiutils.bold_label("<b>" + _("Original Media Found:") + "</b> ") self.missing_count = Gtk.Label() self.found_count = Gtk.Label() self.proj = guiutils.bold_label("<b>" + _("Project:") + "</b> ") self.project_label = Gtk.Label(label=_("<not loaded>")) missing_info = guiutils.get_left_justified_box( [self.missing_label, guiutils.pad_label(2, 2), self.missing_count]) missing_info.set_size_request(250, 2) found_info = guiutils.get_left_justified_box( [self.found_label, guiutils.pad_label(2, 2), self.found_count]) status_row = Gtk.HBox(False, 2) status_row.pack_start(missing_info, False, False, 0) status_row.pack_start(found_info, False, False, 0) status_row.pack_start(Gtk.Label(), True, True, 0) status_row.pack_start(guiutils.pad_label(30, 12), False, False, 0) status_row.pack_start(self.proj, False, False, 0) status_row.pack_start(guiutils.pad_label(4, 12), False, False, 0) status_row.pack_start(self.project_label, False, False, 0) self.relink_list = MediaRelinkListView() self.find_button = Gtk.Button(_("Set File Relink Path")) self.find_button.connect("clicked", lambda w: _set_button_pressed()) self.delete_button = Gtk.Button(_("Delete File Relink Path")) self.delete_button.connect("clicked", lambda w: _delete_button_pressed()) self.display_combo = Gtk.ComboBoxText() self.display_combo.append_text(_("Display Missing Media Files")) self.display_combo.append_text(_("Display Found Media Files")) self.display_combo.set_active(0) self.display_combo.connect("changed", self.display_list_changed) buttons_row = Gtk.HBox(False, 2) buttons_row.pack_start(self.display_combo, False, False, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start(self.delete_button, False, False, 0) buttons_row.pack_start(guiutils.pad_label(4, 4), False, False, 0) buttons_row.pack_start(self.find_button, False, False, 0) self.save_button = Gtk.Button(_("Save Relinked Project As...")) self.save_button.connect("clicked", lambda w: _save_project_pressed()) cancel_button = Gtk.Button(_("Close")) cancel_button.connect("clicked", lambda w: _shutdown()) dialog_buttons_box = Gtk.HBox(True, 2) dialog_buttons_box.pack_start(cancel_button, True, True, 0) dialog_buttons_box.pack_start(self.save_button, False, False, 0) dialog_buttons_row = Gtk.HBox(False, 2) dialog_buttons_row.pack_start(Gtk.Label(), True, True, 0) dialog_buttons_row.pack_start(dialog_buttons_box, False, False, 0) pane = Gtk.VBox(False, 2) pane.pack_start(project_row, False, False, 0) pane.pack_start(guiutils.pad_label(24, 24), False, False, 0) pane.pack_start(status_row, False, False, 0) pane.pack_start(guiutils.pad_label(24, 2), False, False, 0) pane.pack_start(self.relink_list, False, False, 0) pane.pack_start(buttons_row, False, False, 0) pane.pack_start(guiutils.pad_label(24, 24), False, False, 0) pane.pack_start(dialog_buttons_row, False, False, 0) align = guiutils.set_margins(pane, 12, 12, 12, 12) # Set pane and show window self.add(align) self.set_title(_("Media Relinker")) self.set_position(Gtk.WindowPosition.CENTER) self.show_all() self.set_resizable(False) self.set_active_state()
def _check_transition_handles(from_req, from_handle, to_req, to_handle, length): if from_req > from_handle or to_req > to_handle: SPACE_TAB = " " info_text = _( "To create a rendered transition you need enough media overlap from both clips!\n\n" ) first_clip_info = None if from_req > from_handle: first_clip_info = \ _("<b>FIRST CLIP MEDIA OVERLAP:</b> ") + \ SPACE_TAB + _("Available <b>") + str(from_handle) + _("</b> frame(s), " ) + \ SPACE_TAB + _("Required <b>") + str(from_req) + _("</b> frame(s)") second_clip_info = None if to_req > to_handle: second_clip_info = \ _("<b>SECOND CLIP MEDIA OVERLAP:</b> ") + \ SPACE_TAB + _("Available <b>") + str(to_handle) + _("</b> frame(s), ") + \ SPACE_TAB + _("Required <b>") + str(to_req) + _("</b> frame(s) ") img = Gtk.Image.new_from_file( (respaths.IMAGE_PATH + "transition_wrong.png")) img2 = Gtk.Image.new_from_file( (respaths.IMAGE_PATH + "transition_right.png")) img2.set_margin_bottom(24) label1 = Gtk.Label(_("Current situation, not enought media overlap:")) label1.set_margin_bottom(12) label2 = Gtk.Label(_("You need more media overlap:")) label2.set_margin_bottom(12) label2.set_margin_top(24) label3 = Gtk.Label(info_text) label3.set_use_markup(True) if first_clip_info != None: label4 = Gtk.Label(first_clip_info) label4.set_use_markup(True) if second_clip_info != None: label5 = Gtk.Label(second_clip_info) label5.set_use_markup(True) row1 = guiutils.get_centered_box([label1]) row2 = guiutils.get_centered_box([img]) row3 = guiutils.get_centered_box([label2]) row4 = guiutils.get_centered_box([img2]) row5 = guiutils.get_centered_box([label3]) rows = [row1, row2, row3, row4] if first_clip_info != None: row6 = guiutils.get_left_justified_box([label4]) rows.append(row6) if second_clip_info != None: row7 = guiutils.get_left_justified_box([label5]) rows.append(row7) dialogutils.warning_message_with_panels( _("More media overlap needed to create transition!"), "", gui.editor_window.window, True, dialogutils.dialog_destroy, rows) return False return True
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 + "flowblademedialinker.png") self.set_icon(app_icon) load_button = Gtk.Button(_("Load Project For Relinking")) load_button.connect("clicked", lambda w: self.load_button_clicked()) project_row = Gtk.HBox(False, 2) project_row.pack_start(load_button, False, False, 0) project_row.pack_start(Gtk.Label(), True, True, 0) self.missing_label = guiutils.bold_label("<b>" + _("Original Media Missing:") + "</b> ") self.found_label = guiutils.bold_label("<b>" + _("Original Media Found:") + "</b> ") self.missing_count = Gtk.Label() self.found_count = Gtk.Label() self.proj = guiutils.bold_label("<b>" + _("Project:") + "</b> ") self.project_label = Gtk.Label(label=_("<not loaded>")) missing_info = guiutils.get_left_justified_box([self.missing_label, guiutils.pad_label(2, 2), self.missing_count]) missing_info.set_size_request(250, 2) found_info = guiutils.get_left_justified_box([self.found_label, guiutils.pad_label(2, 2), self.found_count]) status_row = Gtk.HBox(False, 2) status_row.pack_start(missing_info, False, False, 0) status_row.pack_start(found_info, False, False, 0) status_row.pack_start(Gtk.Label(), True, True, 0) status_row.pack_start(guiutils.pad_label(30, 12), False, False, 0) status_row.pack_start(self.proj, False, False, 0) status_row.pack_start(guiutils.pad_label(4, 12), False, False, 0) status_row.pack_start(self.project_label, False, False, 0) self.relink_list = MediaRelinkListView() self.find_button = Gtk.Button(_("Set File Relink Path")) self.find_button.connect("clicked", lambda w: _set_button_pressed()) self.delete_button = Gtk.Button(_("Delete File Relink Path")) self.delete_button.connect("clicked", lambda w: _delete_button_pressed()) self.display_combo = Gtk.ComboBoxText() self.display_combo.append_text(_("Display Missing Media Files")) self.display_combo.append_text(_("Display Found Media Files")) self.display_combo.set_active(0) self.display_combo.connect("changed", self.display_list_changed) buttons_row = Gtk.HBox(False, 2) buttons_row.pack_start(self.display_combo, False, False, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start(self.delete_button, False, False, 0) buttons_row.pack_start(guiutils.pad_label(4, 4), False, False, 0) buttons_row.pack_start(self.find_button, False, False, 0) self.save_button = Gtk.Button(_("Save Relinked Project As...")) self.save_button.connect("clicked", lambda w:_save_project_pressed()) cancel_button = Gtk.Button(_("Close")) cancel_button.connect("clicked", lambda w:_shutdown()) dialog_buttons_box = Gtk.HBox(True, 2) dialog_buttons_box.pack_start(cancel_button, True, True, 0) dialog_buttons_box.pack_start(self.save_button, False, False, 0) dialog_buttons_row = Gtk.HBox(False, 2) dialog_buttons_row.pack_start(Gtk.Label(), True, True, 0) dialog_buttons_row.pack_start(dialog_buttons_box, False, False, 0) pane = Gtk.VBox(False, 2) pane.pack_start(project_row, False, False, 0) pane.pack_start(guiutils.pad_label(24, 24), False, False, 0) pane.pack_start(status_row, False, False, 0) pane.pack_start(guiutils.pad_label(24, 2), False, False, 0) pane.pack_start(self.relink_list, False, False, 0) pane.pack_start(buttons_row, False, False, 0) pane.pack_start(guiutils.pad_label(24, 24), False, False, 0) pane.pack_start(dialog_buttons_row, False, False, 0) align = guiutils.set_margins(pane, 12, 12, 12, 12) # Set pane and show window self.add(align) self.set_title(_("Media Relinker")) self.set_position(Gtk.WindowPosition.CENTER) self.show_all() self.set_resizable(False) self.set_active_state()
def __init__(self): Gtk.Dialog.__init__(self, _("Workflow First Run Wizard"), gui.editor_window.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Select Preset Workflow and Continue").encode('utf-8'), Gtk.ResponseType.ACCEPT)) self.selection = STANDARD_PRESET info_label_text_1 = _("<b>Welcome to Flowblade 2.0</b>") info_label_1 = Gtk.Label(info_label_text_1) info_label_1.set_use_markup(True) info_label_text_2 = _("<b>Flowblade 2.0</b> comes with a configurable workflow.") info_label_2 = Gtk.Label(info_label_text_2) info_label_2.set_use_markup(True) INDENT = " " info_label_text_6 = INDENT + u"\u2022" + _(" You can select which <b>tools</b> you want to use.\n") + \ INDENT + u"\u2022" + _(" Many timeline edit <b>behaviours</b> are configurable.\n") info_label_6 = Gtk.Label(info_label_text_6) info_label_6.set_use_markup(True) info_label_text_3 = _("<b>Select Workflow Preset</b>") info_label_3 = Gtk.Label(info_label_text_3) info_label_3.set_use_markup(True) guiutils.set_margins(info_label_3, 0, 4, 0, 0) info_label_text_7 = _("You can change and configure individual tools and behaviours <b>anytime</b>") info_label_7 = Gtk.Label(info_label_text_7) info_label_7.set_use_markup(True) info_label_text_4 = _(" by pressing ") info_label_4 = Gtk.Label(info_label_text_4) info_label_4.set_use_markup(True) icon = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "workflow.png") info_label_text_5 = _(" icon.") info_label_5 = Gtk.Label(info_label_text_5) workflow_name = _("<b>Standard</b>") stadard_preset_workflow_text_1 = _("Standard workflow has the <b>Move</b> tool as default tool\nand presents a workflow\nsimilar to most video editors.") workflow_select_item_1 = self.get_workflow_select_item(STANDARD_PRESET, workflow_name, stadard_preset_workflow_text_1) workflow_name = _("<b>Film Style</b>") filmstyle_preset_workflow_text_2 = _("Film Style workflow has the <b>Insert</b> tool as default tool\nand employs insert style editing.\nThis was the workflow in previous versions of the application.") workflow_select_item_2 = self.get_workflow_select_item(FILM_STYLE_PRESET, workflow_name, filmstyle_preset_workflow_text_2) self.workflow_items = [workflow_select_item_1, workflow_select_item_2] panel_vbox = Gtk.VBox(False, 2) panel_vbox.pack_start(guiutils.get_pad_label(24, 12), False, False, 0) panel_vbox.pack_start(guiutils.get_centered_box([info_label_1]), False, False, 0) panel_vbox.pack_start(guiutils.get_pad_label(24, 12), False, False, 0) panel_vbox.pack_start(guiutils.get_left_justified_box([info_label_2]), False, False, 0) panel_vbox.pack_start(guiutils.get_left_justified_box([info_label_6]), False, False, 0) panel_vbox.pack_start(guiutils.get_pad_label(24, 24), False, False, 0) panel_vbox.pack_start(guiutils.get_centered_box([info_label_3]), False, False, 0) panel_vbox.pack_start(workflow_select_item_1, False, False, 0) panel_vbox.pack_start(workflow_select_item_2, False, False, 0) panel_vbox.pack_start(guiutils.get_pad_label(24, 48), False, False, 0) panel_vbox.pack_start(guiutils.get_centered_box([info_label_7]), False, False, 0) panel_vbox.pack_start(guiutils.get_centered_box([info_label_4, icon, info_label_5]), False, False, 0) panel_vbox.pack_start(guiutils.get_pad_label(24, 24), False, False, 0) alignment = dialogutils.get_alignment2(panel_vbox) self.vbox.pack_start(alignment, True, True, 0) dialogutils.set_outer_margins(self.vbox) dialogs._default_behaviour(self) self.connect('response', self.done) self.show_all()
def _display_compositor_edit_box(): # This gets called on startup before edit_frame is filled try: widgets.value_edit_frame.remove(widgets.value_edit_box) except: pass global keyframe_editor_widgets keyframe_editor_widgets = [] vbox = Gtk.VBox() # Case: Empty edit frame global compositor if compositor == None: widgets.empty_label = Gtk.Label(label=_("No Compositor")) vbox.pack_start(widgets.empty_label, True, True, 0) vbox.pack_start(Gtk.Label(), True, True, 0) vbox.show_all() widgets.value_edit_box = vbox widgets.value_edit_frame.add(vbox) return # Case: Filled frame compositor_name_label = Gtk.Label(label="<b>" + compositor.name + "</b>") compositor_name_label.set_use_markup(True) vbox.pack_start(compositor_name_label, False, False, 0) vbox.pack_start(guicomponents.EditorSeparator().widget, False, False, 0) # Track editor target_combo = guicomponents.get_compositor_track_select_combo( current_sequence().tracks[compositor.transition.b_track], current_sequence().tracks[compositor.transition.a_track], _target_track_changed) target_row = Gtk.HBox() target_row.pack_start(guiutils.get_pad_label(5, 3), False, False, 0) target_row.pack_start(Gtk.Label(label=_("Destination Track:")), False, False, 0) target_row.pack_start(guiutils.get_pad_label(5, 3), False, False, 0) target_row.pack_start(target_combo, False, False, 0) target_row.pack_start(Gtk.Label(), True, True, 0) vbox.pack_start(target_row, False, False, 0) vbox.pack_start(guicomponents.EditorSeparator().widget, False, False, 0) # Transition editors t_editable_properties = propertyedit.get_transition_editable_properties( compositor) for ep in t_editable_properties: editor_row = propertyeditorbuilder.get_editor_row(ep) if editor_row != None: # Some properties don't have editors vbox.pack_start(editor_row, False, False, 0) vbox.pack_start(guicomponents.EditorSeparator().widget, False, False, 0) # Add keyframe editor widget to be updated for frame changes if such is created. try: editor_type = ep.args[propertyeditorbuilder.EDITOR] except KeyError: editor_type = propertyeditorbuilder.SLIDER # this is the default value if ((editor_type == propertyeditorbuilder.KEYFRAME_EDITOR) or (editor_type == propertyeditorbuilder.KEYFRAME_EDITOR_RELEASE) or (editor_type == propertyeditorbuilder.KEYFRAME_EDITOR_CLIP) or (editor_type == propertyeditorbuilder.FADE_LENGTH) or (editor_type == propertyeditorbuilder.GEOMETRY_EDITOR)): keyframe_editor_widgets.append(editor_row) # Extra editors. Editable properties have already been created with "editor=no_editor" # and will be looked up by editors from clip editor_rows = propertyeditorbuilder.get_transition_extra_editor_rows( compositor, t_editable_properties) for editor_row in editor_rows: # These are added to keyframe editor based on editor type, not based on EditableProperty type as above # because one editor sets values for multiple EditableProperty objects if editor_row.__class__ == keyframeeditor.RotatingGeometryEditor: keyframe_editor_widgets.append(editor_row) vbox.pack_start(editor_row, False, False, 0) vbox.pack_start(guicomponents.EditorSeparator().widget, False, False, 0) hamburger_launcher_surface = cairo.ImageSurface.create_from_png( respaths.IMAGE_PATH + "hamburger_big.png") hamburger_launcher = guicomponents.PressLaunch(_hamburger_launch_pressed, hamburger_launcher_surface, 24, 24) sl_row = guiutils.get_left_justified_box([hamburger_launcher.widget]) vbox.pack_start(sl_row, False, False, 0) vbox.pack_start(Gtk.Label(), True, True, 0) vbox.show_all() scroll_window = Gtk.ScrolledWindow() scroll_window.add_with_viewport(vbox) scroll_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) scroll_window.show_all() widgets.value_edit_box = scroll_window widgets.value_edit_frame.add(scroll_window)
def get_transition_panel(trans_data): type_combo_box = Gtk.ComboBoxText() name, t_service_id = mlttransitions.rendered_transitions[0] type_combo_box.append_text(name) name, t_service_id = mlttransitions.rendered_transitions[1] type_combo_box.append_text(name) name, t_service_id = mlttransitions.rendered_transitions[2] type_combo_box.append_text(name) type_combo_box.set_active(0) type_row = get_two_column_box(Gtk.Label(label=_("Type:")), type_combo_box) wipe_luma_combo_box = Gtk.ComboBoxText() keys = mlttransitions.wipe_lumas.keys() keys.sort() for k in keys: wipe_luma_combo_box.append_text(k) wipe_luma_combo_box.set_active(0) wipe_label = Gtk.Label(label=_("Wipe Pattern:")) wipe_row = get_two_column_box(wipe_label, wipe_luma_combo_box) color_button = Gtk.ColorButton.new_with_rgba(Gdk.RGBA(0,0,0,1)) color_button_box = guiutils.get_left_justified_box([color_button]) color_label = Gtk.Label(label=_("Dip Color:")) color_row = get_two_column_box(color_label, color_button_box) wipe_luma_combo_box.set_sensitive(False) color_button.set_sensitive(False) wipe_label.set_sensitive(False) color_label.set_sensitive(False) transition_type_widgets = (type_combo_box, wipe_luma_combo_box, color_button, wipe_label, color_label) type_combo_box.connect("changed", lambda w,e: _transition_type_changed(transition_type_widgets), None) length_entry = Gtk.Entry() trans_length = 30 if editorstate.transition_length > 0: # use last invocation length if available trans_length = editorstate.transition_length length_entry.set_text(str(trans_length)) length_row = get_two_column_box(Gtk.Label(label=_("Length:")), length_entry) filler = Gtk.Label() filler.set_size_request(10,10) out_clip_label = Gtk.Label(label=_("First Clip Out Handle:")) out_clip_value = Gtk.Label(label=str(trans_data["from_handle"]) + _(" frame(s)")) in_clip_label = Gtk.Label(label=_("Second Clip In Handle:")) in_clip_value = Gtk.Label(label=str(trans_data["to_handle"]) + _(" frame(s)")) out_handle_row = get_two_column_box(out_clip_label, out_clip_value) in_handle_row = get_two_column_box(in_clip_label, in_clip_value) # Encoding widgets encodings_cb = Gtk.ComboBoxText() for encoding in renderconsumer.encoding_options: encodings_cb.append_text(encoding.name) encodings_cb.set_active(0) quality_cb = Gtk.ComboBoxText() transition_widgets = (encodings_cb, quality_cb) encodings_cb.connect("changed", lambda w,e: _transition_encoding_changed(transition_widgets), None) _fill_transition_quality_combo_box(transition_widgets, 10) _set_saved_encoding(transition_widgets) # Build panel edit_vbox = Gtk.VBox(False, 2) edit_vbox.pack_start(type_row, False, False, 0) edit_vbox.pack_start(length_row, False, False, 0) edit_vbox.pack_start(wipe_row, False, False, 0) edit_vbox.pack_start(color_row, False, False, 0) data_vbox = Gtk.VBox(False, 2) data_vbox.pack_start(out_handle_row, False, False, 0) data_vbox.pack_start(in_handle_row, False, False, 0) enconding_vbox = Gtk.VBox(False, 2) enconding_vbox.pack_start(encodings_cb, False, False, 0) enconding_vbox.pack_start(quality_cb, False, False, 0) vbox = Gtk.VBox(False, 2) vbox.pack_start(get_named_frame(_("Transition Options"), edit_vbox), True, True, 0) vbox.pack_start(get_named_frame(_("Encoding"), enconding_vbox), True, True, 0) vbox.pack_start(get_named_frame(_("Media Overlap info"), data_vbox), True, True, 0) alignment = guiutils.set_margins(vbox, 12, 24, 12, 12) return (alignment, type_combo_box, length_entry, encodings_cb, quality_cb, wipe_luma_combo_box, color_button)
def __init__(self, files_to_render, already_have_proxies, not_video_files, is_proxy_file, other_project_proxies, proxy_w, proxy_h, proxy_file_extension): dialog_title =_("Proxy Render Info") self.files_to_render = files_to_render self.other_project_proxies = other_project_proxies self.already_have_proxies = already_have_proxies self.proxy_w = proxy_w self.proxy_h = proxy_h self.proxy_file_extension = proxy_file_extension self.issues = 1 if (len(files_to_render) + len(already_have_proxies) + len(other_project_proxies)) == 0 and not_video_files > 0: self.dialog = gtk.Dialog(dialog_title, gui.editor_window.window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Close").encode('utf-8'), gtk.RESPONSE_CLOSE)) info_box = dialogutils.get_warning_message_dialog_panel(_("Nothing will be rendered"), _("No video files were selected.\nOnly video files can have proxy files."), True) self.dialog.connect('response', dialogutils.dialog_destroy) else: self.dialog = gtk.Dialog(dialog_title, gui.editor_window.window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Cancel").encode('utf-8'), gtk.RESPONSE_CANCEL, _("Do Render Action" ).encode('utf-8'), gtk.RESPONSE_OK)) self.dialog.connect('response', self.response) rows = "" if len(already_have_proxies) > 0 and len(other_project_proxies) > 0: text = _("Proxies exist that were created by this and other projects for ") + str(len(already_have_proxies) + len(other_project_proxies)) + _(" file(s).\n") rows = rows + self.issues_str() + text elif len(already_have_proxies) > 0 and len(other_project_proxies) == 0: text = _("Proxies have already been created for ") + str(len(already_have_proxies)) + _(" file(s).\n") rows = rows + self.issues_str() + text elif len(other_project_proxies) > 0: text = _("Proxies exist that were created by other projects for ") + str(len(other_project_proxies)) + _(" file(s).\n") rows = rows + self.issues_str() + text if not_video_files > 0: text = _("You are trying to create proxies for ") + str(not_video_files) + _(" non-video file(s).\n") rows = rows + self.issues_str() + text if is_proxy_file > 0: text = _("You are trying to create proxies for ") + str(not_video_files) + _(" proxy file(s).\n") rows = rows + self.issues_str() + text issues_box = dialogutils.get_warning_message_dialog_panel("There are some issues with proxy render request", rows, True) self.action_select = gtk.combo_box_new_text() self.action_select.append_text(_("Render Unrendered Possible & Use existing")) self.action_select.append_text(_("Rerender All Possible" )) self.action_select.set_active(0) action_row = guiutils.get_left_justified_box([guiutils.get_pad_label(24, 10), gtk.Label(_("Select Render Action: ")), self.action_select]) info_box = gtk.VBox() info_box.pack_start(issues_box, False, False, 0) info_box.pack_start(action_row, False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(0, 0, 0, 0) alignment.add(info_box) alignment.show_all() self.dialog.vbox.pack_start(alignment, True, True, 0) self.dialog.set_has_separator(False) self.dialog.show()
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()