def __init__(self, profile_panel, encoding_panel): self.profile_panel = profile_panel self.encoding_panel = encoding_panel self.video_clip_combo = Gtk.ComboBoxText( ) # filled later when current sequence known self.video_clip_combo.append_text(_("Render Video Clip")) self.video_clip_combo.append_text(_("Frame Sequence Only")) self.video_clip_combo.set_active(0) self.video_clip_combo.connect( 'changed', lambda w: self.video_clip_combo_changed(w)) encoding_vbox = Gtk.VBox(False, 2) encoding_vbox.pack_start(profile_panel, False, False, 0) encoding_vbox.pack_start(encoding_panel, False, False, 0) encoding_hbox = Gtk.HBox(False, 2) encoding_hbox.pack_start(guiutils.pad_label(12, 12), False, False, 0) encoding_hbox.pack_start(encoding_vbox, True, True, 0) self.vbox = Gtk.VBox(False, 2) self.vbox.pack_start(self.video_clip_combo, False, False, 0) self.vbox.pack_start(guiutils.pad_label(12, 24), False, False, 0) self.vbox.pack_start(encoding_hbox, False, False, 0)
def init_for_box_geom(self): x_label = Gtk.Label(_("x:")) y_label = Gtk.Label(_("y:")) w_label = Gtk.Label(_("w:")) h_label = Gtk.Label(_("h:")) self.x_entry = Gtk.Entry.new() self.y_entry = Gtk.Entry.new() self.w_entry = Gtk.Entry.new() self.h_entry = Gtk.Entry.new() self.prepare_entry(self.x_entry) self.prepare_entry(self.y_entry) self.prepare_entry(self.w_entry) self.prepare_entry(self.h_entry) self.set_homogeneous(False) self.set_spacing(2) self.set_margin_top (4) self.pack_start(Gtk.Label(), True, True, 0) self.pack_start(x_label, False, False, 0) self.pack_start(self.x_entry, False, False, 0) self.pack_start(guiutils.pad_label(6, 6), False, False, 0) self.pack_start(y_label, False, False, 0) self.pack_start(self.y_entry, False, False, 0) self.pack_start(guiutils.pad_label(6, 6), False, False, 0) self.pack_start(w_label, False, False, 0) self.pack_start(self.w_entry, False, False, 0) self.pack_start(guiutils.pad_label(6, 6), False, False, 0) self.pack_start(h_label, False, False, 0) self.pack_start(self.h_entry, False, False, 0) self.pack_start(Gtk.Label(), True, True, 0)
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 launch_phantom(): respaths.PHANTOM_JAR if _phantom_found == False: info_row = guiutils.get_centered_box([Gtk.Label(_("Phantom2D tool has not been installed on your system."))]) link_info_row = guiutils.get_centered_box([Gtk.Label(_("Install instructions:"))]) link = Gtk.LinkButton.new("https://github.com/jliljebl/phantom2D") link_row = guiutils.get_centered_box([link]) dir_info_row = guiutils.get_centered_box([Gtk.Label(_("Install directory for Phantom2D tool:"))]) dir_label = Gtk.Label(respaths.PHANTOM_JAR.rstrip("/Phantom2D.jar")) dir_label.set_selectable(True) dir_row = guiutils.get_centered_box([Gtk.Label(respaths.PHANTOM_JAR.rstrip("/Phantom2D.jar"))]) dir_row.set_margin_top(8) panel = Gtk.VBox() panel.pack_start(info_row, False, False, 0) panel.pack_start(guiutils.pad_label(12, 24), False, False, 0) panel.pack_start(link_info_row, False, False, 0) panel.pack_start(link_row, False, False, 0) panel.pack_start(guiutils.pad_label(12, 24), False, False, 0) panel.pack_start(dir_info_row, False, False, 0) panel.pack_start(dir_row, False, False, 0) dialogutils.panel_ok_dialog(_("Phantom2D not found"), panel) return FLOG = open(userfolders.get_cache_dir() + "log_phantom", 'w') subprocess.Popen([str(respaths.LAUNCH_DIR + "flowbladephantom") + " " + str(respaths.PHANTOM_JAR) \ + " profile" + " " + _get_underscored_profile() \ + " cachefolder " + userfolders.get_cache_dir() + appconsts.PHANTOM_DIR + "/" + appconsts.PHANTOM_DISK_CACHE_DIR], shell=True, stdin=FLOG, stdout=FLOG, stderr=FLOG) print "Phantom2D launched"
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 __init__(self, editable_property): GObject.GObject.__init__(self) self.set_homogeneous(False) self.set_spacing(2) self.editable_property = editable_property length = self.editable_property.clip.clip_out - self.editable_property.clip.clip_in + 1 name = editable_property.get_display_name() name = _p(name) name_label = Gtk.Label(label=name + ":") label_box = Gtk.HBox() label_box.pack_start(name_label, False, False, 0) label_box.pack_start(Gtk.Label(), True, True, 0) label_box.set_size_request(appconsts.PROPERTY_NAME_WIDTH, appconsts.PROPERTY_ROW_HEIGHT) self.spin = Gtk.SpinButton.new_with_range (1, 1000, 1) self.spin.set_numeric(True) self.spin.set_value(length) self.spin.connect("value-changed", self.spin_value_changed) self.pack_start(guiutils.pad_label(4,4), False, False, 0) self.pack_start(label_box, False, False, 0) self.pack_start(self.spin, False, False, 0) self.pack_start(Gtk.Label(), True, True, 0)
def get_info_row(self): folder, project_file = os.path.split(self.container_data.program) project_name_label = Gtk.Label(label=project_file) self.targets_select = Gtk.ComboBoxText() self.targets_select.append_text(_("Objects")) self.targets_select.append_text(_("Materials")) self.targets_select.append_text(_("Curves")) self.targets_select.set_active(0) self.targets_select.connect("changed", self.edit_targets_changed) project_box = Gtk.HBox(False, 2) project_box.pack_start(guiutils.set_margins(guiutils.bold_label("Blender Project:"), 0, 0, 0, 4), False, False, 0) project_box.pack_start(project_name_label, False, False, 0) project_box.pack_start(Gtk.Label(), True, True, 0) self.editors_count_label = Gtk.Label("0") editors_box = Gtk.HBox(False, 2) editors_box.pack_start(guiutils.set_margins(guiutils.bold_label("Blender Project:"), 0, 0, 0, 4), False, False, 0) editors_box.pack_start(self.editors_count_label, False, False, 0) editors_box.pack_start(Gtk.Label(), True, True, 0) info_row = Gtk.HBox(True, 2) info_row.pack_start(project_box, True, True, 0) info_row.pack_start(editors_box, False, False, 0) info_row_full = Gtk.HBox(False, 2) info_row_full.pack_start(self.targets_select, True, True, 0) info_row_full.pack_start(guiutils.pad_label(24,4), False, False, 0) info_row_full.pack_start(info_row, False, False, 0) return info_row_full
def __init__(self): self.dialog = Gtk.Dialog( _("Timeline Render Settings"), gui.editor_window.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Close"), Gtk.ResponseType.CLOSE)) # Encoding self.enc_select = Gtk.ComboBoxText() encodings = renderconsumer.proxy_encodings if len( encodings ) < 1: # no encoding options available, system does not have right codecs # display info ? pass for encoption in encodings: self.enc_select.append_text(encoption.name) current_enc = editorpersistance.prefs.tline_render_encoding if current_enc >= len( encodings): # current encoding selection not available current_enc = 0 editorpersistance.prefs.tline_render_encoding = 0 editorpersistance.save() self.enc_select.set_active(current_enc) self.enc_select.connect( "changed", lambda w, e: self.encoding_changed(w.get_active()), None) self.size_select = Gtk.ComboBoxText() self.size_select.append_text(_("Project Image Size")) self.size_select.append_text(_("Half Project Image Size")) self.size_select.append_text(_("Quarter Project Image Size")) self.size_select.set_active(editorpersistance.prefs.tline_render_size) self.size_select.connect( "changed", lambda w, e: self.size_changed(w.get_active()), None) row_enc = Gtk.HBox(False, 2) row_enc.pack_start(Gtk.Label(), True, True, 0) row_enc.pack_start(self.enc_select, False, False, 0) row_enc.pack_start(self.size_select, False, False, 0) row_enc.pack_start(Gtk.Label(), True, True, 0) vbox_enc = Gtk.VBox(False, 2) vbox_enc.pack_start(row_enc, False, False, 0) vbox_enc.pack_start(guiutils.pad_label(8, 12), False, False, 0) panel_encoding = guiutils.get_named_frame(_("Render Encoding"), vbox_enc) # Pane vbox = Gtk.VBox(False, 2) vbox.pack_start(panel_encoding, False, False, 0) guiutils.set_margins(vbox, 8, 12, 12, 12) self.dialog.vbox.pack_start(vbox, True, True, 0) dialogutils.set_outer_margins(self.dialog.vbox) self.dialog.connect('response', dialogutils.dialog_destroy) self.dialog.show_all()
def __init__(self, editable_property): GObject.GObject.__init__(self) self.set_homogeneous(False) self.set_spacing(2) self.editable_property = editable_property length = self.editable_property.clip.clip_out - self.editable_property.clip.clip_in + 1 name = editable_property.get_display_name() name = _p(name) name_label = Gtk.Label(label=name + ":") label_box = Gtk.HBox() label_box.pack_start(name_label, False, False, 0) label_box.pack_start(Gtk.Label(), True, True, 0) label_box.set_size_request(appconsts.PROPERTY_NAME_WIDTH, appconsts.PROPERTY_ROW_HEIGHT) self.spin = Gtk.SpinButton.new_with_range(1, 1000, 1) self.spin.set_numeric(True) self.spin.set_value(length) self.spin.connect("value-changed", self.spin_value_changed) self.pack_start(guiutils.pad_label(4, 4), False, False, 0) self.pack_start(label_box, False, False, 0) self.pack_start(self.spin, False, False, 0) self.pack_start(Gtk.Label(), True, True, 0)
def reinit_stack_item(self, filter_object): stack_index = -1 for i in range(0, len(self.filter_stack)): stack_item = self.filter_stack[i] if stack_item.filter_object is filter_object: stack_index = i if stack_index != -1: # Remove panels from box children = self.widget.get_children() for child in children: self.widget.remove(child) # Remove old stack item for reseted filter. self.filter_stack.pop(stack_index) self.clear_kf_editors_from_update_list(filter_object) # Create new stack item edit_panel, kf_editors = _get_filter_panel(self.clip, filter_object, stack_index, self.track, self.clip_index) self.filter_kf_editors[filter_object] = kf_editors footer_row = FilterFooterRow(filter_object, self) edit_panel.pack_start(footer_row.widget, False, False, 0) edit_panel.pack_start(guiutils.pad_label(12, 12), False, False, 0) stack_item = FilterStackItem(filter_object, edit_panel, self) # Put eveything back self.filter_stack.insert(stack_index, stack_item) for stack_item in self.filter_stack: self.widget.pack_start(stack_item.widget, False, False, 0) self.set_filter_item_expanded(stack_index)
def export_screenshot_dialog(callback, frame, parent_window, project_name): cancel_str = _("Cancel").encode("utf-8") ok_str = _("Export Image").encode("utf-8") dialog = Gtk.Dialog( _("Export Frame Image"), parent_window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (cancel_str, Gtk.ResponseType.CANCEL, ok_str, Gtk.ResponseType.YES), ) global _screenshot_img _screenshot_img = guiutils.get_gtk_image_from_file(get_displayed_image_path(), 300) frame_frame = guiutils.get_named_frame_with_vbox(None, [_screenshot_img]) INPUT_LABELS_WITDH = 320 project_name = project_name.strip(".flb") file_name = Gtk.Entry() file_name.set_text(project_name) extension_label = Gtk.Label(label=".png") extension_label.set_size_request(35, 20) name_pack = Gtk.HBox(False, 4) name_pack.pack_start(file_name, True, True, 0) name_pack.pack_start(extension_label, False, False, 0) name_row = guiutils.get_two_column_box(Gtk.Label(label=_("Export file name:")), name_pack, INPUT_LABELS_WITDH) out_folder = Gtk.FileChooserButton(_("Select target folder")) out_folder.set_action(Gtk.FileChooserAction.SELECT_FOLDER) out_folder.set_current_folder(os.path.expanduser("~") + "/") folder_row = guiutils.get_two_column_box(Gtk.Label(label=_("Export folder:")), out_folder, INPUT_LABELS_WITDH) file_type_combo = Gtk.ComboBoxText() for img in _img_types: file_type_combo.append_text(img) file_type_combo.set_active(0) file_type_combo.connect("changed", _file_type_changed, extension_label) file_type_row = guiutils.get_two_column_box(Gtk.Label(label=_("Image type:")), file_type_combo, INPUT_LABELS_WITDH) file_frame = guiutils.get_named_frame_with_vbox(None, [file_type_row, name_row, folder_row]) vbox = Gtk.VBox(False, 2) vbox.pack_start(frame_frame, False, False, 0) vbox.pack_start(guiutils.pad_label(12, 12), False, False, 0) vbox.pack_start(file_frame, False, False, 0) alignment = guiutils.set_margins(vbox, 12, 12, 12, 12) dialog.vbox.pack_start(alignment, True, True, 0) dialogutils.set_outer_margins(dialog.vbox) dialogutils.default_behaviour(dialog) dialog.connect( "response", callback, (file_name, out_folder, file_type_combo, frame) ) # (file_name, out_folder, track_select_combo, cascade_check, op_combo, audio_track_select_combo)) dialog.show_all()
def export_screenshot_dialog(callback, frame, parent_window, project_name): cancel_str = _("Cancel").encode('utf-8') ok_str = _("Export Image").encode('utf-8') dialog = gtk.Dialog(_("Export Frame Image"), parent_window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (cancel_str, gtk.RESPONSE_CANCEL, ok_str, gtk.RESPONSE_YES)) global _screenshot_img _screenshot_img = guiutils.get_gtk_image_from_file(get_displayed_image_path(), 300) frame_frame = guiutils.get_named_frame_with_vbox(None, [_screenshot_img]) INPUT_LABELS_WITDH = 320 project_name = project_name.strip(".flb") file_name = gtk.Entry() file_name.set_text(project_name) extension_label = gtk.Label(".png") extension_label.set_size_request(35, 20) name_pack = gtk.HBox(False, 4) name_pack.pack_start(file_name, True, True, 0) name_pack.pack_start(extension_label, False, False, 0) name_row = guiutils.get_two_column_box(gtk.Label(_("Export file name:")), name_pack, INPUT_LABELS_WITDH) out_folder = gtk.FileChooserButton(_("Select target folder")) out_folder.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER) out_folder.set_current_folder(os.path.expanduser("~") + "/") folder_row = guiutils.get_two_column_box(gtk.Label(_("Export folder:")), out_folder, INPUT_LABELS_WITDH) file_type_combo = gtk.combo_box_new_text() for img in _img_types: file_type_combo.append_text(img) file_type_combo.set_active(0) file_type_combo.connect("changed", _file_type_changed, extension_label) file_type_row = guiutils.get_two_column_box(gtk.Label(_("Image type:")), file_type_combo, INPUT_LABELS_WITDH) file_frame = guiutils.get_named_frame_with_vbox(None, [file_type_row, name_row, folder_row]) vbox = gtk.VBox(False, 2) vbox.pack_start(frame_frame, False, False, 0) vbox.pack_start(guiutils.pad_label(12, 12), False, False, 0) vbox.pack_start(file_frame, False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(12, 12, 12, 12) alignment.add(vbox) dialog.vbox.pack_start(alignment, True, True, 0) dialogutils.default_behaviour(dialog) dialog.connect('response', callback, (file_name, out_folder, file_type_combo, frame)) #(file_name, out_folder, track_select_combo, cascade_check, op_combo, audio_track_select_combo)) dialog.show_all()
def get_editors_panel(self): self.editors_list = guicomponents.MultiTextColumnListView(5) guiutils.set_margins(self.editors_list, 0, 12, 0, 6) self.editors_list.set_size_request(900, 360) titles = [_("Property Path"), _("Label"), _("Info"), _("Type"), _("Value")] self.editors_list.set_column_titles(titles) # --- widgets add_button = Gtk.Button(label=_("Add Editor")) add_button.connect("clicked", lambda w: self.add_clicked()) self.delete_button = Gtk.Button(label=_("Delete Editor")) self.delete_button.set_sensitive(False) self.delete_button.connect("clicked", lambda w: self.delete_clicked()) self.obj_path_entry = Gtk.Entry() self.editor_label_entry = Gtk.Entry() self.tooltip_info_entry = Gtk.Entry() self.default_value_entry = Gtk.Entry() self.default_value_entry.set_text(simpleeditors.DEFAULT_VALUES[simpleeditors.SIMPLE_EDITOR_STRING]) self.editor_select = simpleeditors.get_simple_editor_selector(0, self.editor_selection_changed) # --- object path row right. self.obj_path_label = Gtk.Label() self.obj_path_label.set_use_markup(True) obj_path_row_right = Gtk.HBox(False, 2) obj_path_row_right.pack_start(guiutils.pad_label(4, 4), False, False, 0) obj_path_row_right.pack_start(self.obj_path_label, False, False, 0) obj_path_row_right.pack_start(self.obj_path_entry, False, False, 0) # --- panels editor_add_right = Gtk.VBox(False, 2) editor_add_right.pack_start(add_button, False, False, 0) editor_add_right.pack_start(Gtk.Label(), True, True, 0) editor_add_left = Gtk.VBox(True, 2) editor_add_left.pack_start(guiutils.bold_label(_("New Editor Properties")), False, False, 0) editor_add_left.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Blender Object Property Path:")), obj_path_row_right, EDITOR_PANEL_LEFT_LABEL_WIDTH), False, False, 0) editor_add_left.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Editor Label:")), self.editor_label_entry, EDITOR_PANEL_LEFT_LABEL_WIDTH), False, False, 0) editor_add_left.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Tooltip Info:")), self.tooltip_info_entry, EDITOR_PANEL_LEFT_LABEL_WIDTH), False, False, 0) editor_add_left.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Editor Type:")), self.editor_select, EDITOR_PANEL_LEFT_LABEL_WIDTH), False, False, 0) editor_add_left.pack_start(guiutils.get_two_column_box(Gtk.Label(label=_("Default Value:")), self.default_value_entry, EDITOR_PANEL_LEFT_LABEL_WIDTH), False, False, 0) add_row = guiutils.get_two_column_box(editor_add_right, editor_add_left, EDITOR_PANEL_BUTTON_WIDTH) delete_row = guiutils.get_two_column_box(self.delete_button , Gtk.Label(), EDITOR_PANEL_BUTTON_WIDTH) vbox = Gtk.VBox(False, 2) vbox.pack_start(self.editors_list, True, True, 0) vbox.pack_start(add_row, False, False, 0) vbox.pack_start(delete_row, False, False, 0) panel = Gtk.VBox(True, 2) self.object_editors_frame = guiutils.get_named_frame("to be replaced", vbox) panel.pack_start(self.object_editors_frame, True, True, 0) return panel
def export_screenshot_dialog(callback, frame, parent_window, project_name): cancel_str = _("Cancel").encode('utf-8') ok_str = _("Export Image").encode('utf-8') dialog = Gtk.Dialog(_("Export Frame Image"), parent_window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (cancel_str, Gtk.ResponseType.CANCEL, ok_str, Gtk.ResponseType.YES)) global _screenshot_img _screenshot_img = guiutils.get_gtk_image_from_file(get_displayed_image_path(), 300) frame_frame = guiutils.get_named_frame_with_vbox(None, [_screenshot_img]) INPUT_LABELS_WITDH = 320 project_name = project_name.strip(".flb") file_name = Gtk.Entry() file_name.set_text(project_name) extension_label = Gtk.Label(label=".png") extension_label.set_size_request(35, 20) name_pack = Gtk.HBox(False, 4) name_pack.pack_start(file_name, True, True, 0) name_pack.pack_start(extension_label, False, False, 0) name_row = guiutils.get_two_column_box(Gtk.Label(label=_("Export file name:")), name_pack, INPUT_LABELS_WITDH) out_folder = Gtk.FileChooserButton(_("Select target folder")) out_folder.set_action(Gtk.FileChooserAction.SELECT_FOLDER) out_folder.set_current_folder(os.path.expanduser("~") + "/") folder_row = guiutils.get_two_column_box(Gtk.Label(label=_("Export folder:")), out_folder, INPUT_LABELS_WITDH) file_type_combo = Gtk.ComboBoxText() for img in _img_types: file_type_combo.append_text(img) file_type_combo.set_active(0) file_type_combo.connect("changed", _file_type_changed, extension_label) file_type_row = guiutils.get_two_column_box(Gtk.Label(label=_("Image type:")), file_type_combo, INPUT_LABELS_WITDH) file_frame = guiutils.get_named_frame_with_vbox(None, [file_type_row, name_row, folder_row]) vbox = Gtk.VBox(False, 2) vbox.pack_start(frame_frame, False, False, 0) vbox.pack_start(guiutils.pad_label(12, 12), False, False, 0) vbox.pack_start(file_frame, False, False, 0) alignment = guiutils.set_margins(vbox, 12, 12, 12, 12) dialog.vbox.pack_start(alignment, True, True, 0) dialogutils.set_outer_margins(dialog.vbox) dialogutils.default_behaviour(dialog) dialog.connect('response', callback, (file_name, out_folder, file_type_combo, frame)) #(file_name, out_folder, track_select_combo, cascade_check, op_combo, audio_track_select_combo)) dialog.show_all()
def _get_workflow_tool_menu_item(callback, tool_id, tool_name, tool_icon_file, position): tool_active = (tool_id in editorpersistance.prefs.active_tools) tool_img = Gtk.Image.new_from_file(respaths.IMAGE_PATH + tool_icon_file) tool_name_label = Gtk.Label(tool_name) hbox = Gtk.HBox() hbox.pack_start(guiutils.pad_label(4, 4), False, False, 0) hbox.pack_start(tool_img, False, False, 0) hbox.pack_start(guiutils.pad_label(4, 4), False, False, 0) hbox.pack_start(tool_name_label, False, False, 0) hbox.show_all() hbox.set_sensitive(tool_active) item = Gtk.MenuItem() item.add(hbox) item.show() item.set_submenu(_get_workflow_tool_submenu(callback, tool_id, position)) return item
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 init_for_roto_geom(self): # [960.0, 540.0, 1.0, 1.0, 0.0] x_label = Gtk.Label(_("x:")) y_label = Gtk.Label(_("y:")) x_scale_label = Gtk.Label(_("x scale:")) y_scale_label = Gtk.Label(_("y scale:")) rotation_label = Gtk.Label(_("rotation:")) self.x_entry = Gtk.Entry.new() self.y_entry = Gtk.Entry.new() self.x_scale_entry = Gtk.Entry.new() self.y_scale_entry = Gtk.Entry.new() self.rotation_entry = Gtk.Entry.new() self.prepare_entry(self.x_entry) self.prepare_entry(self.y_entry) self.prepare_entry(self.x_scale_entry) self.prepare_entry(self.y_scale_entry) self.prepare_entry(self.rotation_entry) self.set_homogeneous(False) self.set_spacing(2) self.set_margin_top (4) self.pack_start(Gtk.Label(), True, True, 0) self.pack_start(x_label, False, False, 0) self.pack_start(self.x_entry, False, False, 0) self.pack_start(guiutils.pad_label(6, 6), False, False, 0) self.pack_start(y_label, False, False, 0) self.pack_start(self.y_entry, False, False, 0) self.pack_start(guiutils.pad_label(6, 6), False, False, 0) self.pack_start(x_scale_label, False, False, 0) self.pack_start(self.x_scale_entry, False, False, 0) self.pack_start(guiutils.pad_label(6, 6), False, False, 0) self.pack_start(y_scale_label, False, False, 0) self.pack_start(self.y_scale_entry, False, False, 0) self.pack_start(rotation_label, False, False, 0) self.pack_start(self.rotation_entry, False, False, 0) self.pack_start(Gtk.Label(), True, True, 0)
def _get_workflow_tool_menu_item(callback, tool_id, tool_name, tool_icon_file, position): tool_active = (tool_id in editorpersistance.prefs.active_tools) tool_img = Gtk.Image.new_from_file(respaths.IMAGE_PATH + tool_icon_file) tool_name_label = Gtk.Label(tool_name) hbox = Gtk.HBox() hbox.pack_start(guiutils.pad_label(4, 4), False, False, 0) hbox.pack_start(tool_img, False, False, 0) hbox.pack_start(guiutils.pad_label(4, 4), False, False, 0) hbox.pack_start(tool_name_label, False, False, 0) hbox.show_all() item = Gtk.MenuItem() item.add(hbox) if editorpersistance.prefs.show_tool_tooltips: item.set_tooltip_markup(_get_tooltip_text(tool_id)) item.show() item.set_submenu(_get_workflow_tool_submenu(callback, tool_id, position)) return item
def __init__(self, filter_object): self.filter_name_label = Gtk.Label(label="<b>" + filter_object.info.name + "</b>") self.filter_name_label.set_use_markup(True) self.icon = Gtk.Image.new_from_pixbuf(filter_object.info.get_icon()) hbox = Gtk.HBox(False, 0) hbox.pack_start(guiutils.pad_label(4, 5), False, False, 0) hbox.pack_start(self.icon, False, False, 0) hbox.pack_start(self.filter_name_label, False, False, 0) hbox.pack_start(Gtk.Label(), True, True, 0) self.widget = hbox
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 _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 _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 get_re_render_all_panel(rerender_list, unrenderable): rerendercount_label = Gtk.Label( label=_("Transitions / Fades to be rerendered:")) rerendercount_value = Gtk.Label(label=str(len(rerender_list))) rerendercount_row = get_two_column_box(rerendercount_label, rerendercount_value) if unrenderable > 0: unrenderable_info = _("There are ") + str(unrenderable) + _( " Transitions / Fades that cannot be rerendered, either because they are\ncreated with Flowblade version <=1.14 or the source clips are no longer on timeline." ) unrenderable_info_label = Gtk.Label(unrenderable_info) info_vbox = Gtk.VBox(False, 2) info_vbox.pack_start(rerendercount_row, False, False, 0) if unrenderable > 0: info_vbox.pack_start(guiutils.pad_label(12, 12), False, False, 0) info_vbox.pack_start(unrenderable_info_label, False, False, 0) # 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) 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(_("Info"), info_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) alignment.set_size_request(450, 120) return (alignment, encodings_cb, quality_cb)
def __init__(self, filter_object, edit_panel, filter_stack): self.filter_object = filter_object self.filter_header_row = FilterHeaderRow(filter_object) self.edit_panel = edit_panel self.edit_panel_frame = Gtk.Frame() self.edit_panel_frame.add(edit_panel) self.edit_panel_frame.set_shadow_type(Gtk.ShadowType.NONE) self.filter_stack = filter_stack self.expander = Gtk.Expander() self.expander.set_label_widget(self.filter_header_row.widget) self.expander.add(self.edit_panel_frame) self.expander.set_label_fill(True) self.expander_frame = Gtk.Frame() self.expander_frame.add(self.expander) self.expander_frame.set_shadow_type(Gtk.ShadowType.NONE) guiutils.set_margins(self.expander_frame, 2, 0, 0, 0) self.active_check = Gtk.CheckButton() self.active_check.set_active(self.filter_object.active) self.active_check.connect("toggled", self.toggle_filter_active) guiutils.set_margins(self.active_check, 4, 0, 0, 0) self.active_check_vbox = Gtk.VBox(False, 0) self.active_check_vbox.pack_start(self.active_check, False, False, 0) self.active_check_vbox.pack_start(Gtk.Label(), True, True, 0) surface = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "trash.png") trash_button = guicomponents.PressLaunch(self.trash_pressed, surface, w=22, h=22) self.trash_vbox = Gtk.VBox(False, 0) self.trash_vbox.pack_start(trash_button.widget, False, False, 0) self.trash_vbox.pack_start(Gtk.Label(), True, True, 0) self.widget = Gtk.HBox(False, 0) self.widget.pack_start(self.active_check_vbox, False, False, 0) self.widget.pack_start(self.expander_frame, True, True, 0) self.widget.pack_start(self.trash_vbox, False, False, 0) self.widget.pack_start(guiutils.pad_label(10, 2), False, False, 0) self.widget.show_all()
def __init__(self, parent, clip, length=-1): GObject.GObject.__init__(self) self.frame = 0 self.parent = parent self.preview_surface = None # gets set by parent on preview completion self.preview_info = Gtk.Label() self.preview_info.set_markup("<small>" + _("no preview") + "</small>") preview_info_row = Gtk.HBox() preview_info_row.pack_start(self.preview_info, False, False, 0) preview_info_row.pack_start(Gtk.Label(), True, True, 0) preview_info_row.set_margin_top(6) preview_info_row.set_margin_bottom(8) self.preview_monitor = cairoarea.CairoDrawableArea2( MONITOR_WIDTH, MONITOR_HEIGHT, self._draw_preview) self.no_preview_icon = cairo.ImageSurface.create_from_png( respaths.IMAGE_PATH + NO_PREVIEW_FILE) # Control row self.frame_display = Gtk.Label(_("Clip Frame")) self.frame_display.set_margin_right(2) if length == -1: length = clip.clip_out - clip.clip_in self.frame_select = Gtk.SpinButton.new_with_range(0, length, 1) self.frame_select.set_value(0) self.preview_button = Gtk.Button(_("Preview")) self.preview_button.connect("clicked", lambda w: parent.render_preview_frame()) control_panel = Gtk.HBox(False, 2) control_panel.pack_start(self.frame_display, False, False, 0) control_panel.pack_start(self.frame_select, False, False, 0) control_panel.pack_start(Gtk.Label(), True, True, 0) control_panel.pack_start(self.preview_button, False, False, 0) self.pack_start(preview_info_row, False, False, 0) self.pack_start(self.preview_monitor, False, False, 0) self.pack_start(guiutils.pad_label(4, 4), False, False, 0) self.pack_start(control_panel, False, False, 0) self.pack_start(Gtk.Label(), True, True, 0)
def get_re_render_all_panel(rerender_list, unrenderable): rerendercount_label = Gtk.Label(label=_("Transitions / Fades to be rerendered:")) rerendercount_value = Gtk.Label(label=str(len(rerender_list))) rerendercount_row = get_two_column_box(rerendercount_label, rerendercount_value) if unrenderable > 0: unrenderable_info = _("There are ") + str(unrenderable) + _(" Transitions / Fades that cannot be rerendered, either because they are\ncreated with Flowblade version <=1.14 or the source clips are no longer on timeline.") unrenderable_info_label = Gtk.Label(unrenderable_info) info_vbox = Gtk.VBox(False, 2) info_vbox.pack_start(rerendercount_row, False, False, 0) if unrenderable > 0: info_vbox.pack_start(guiutils.pad_label(12,12), False, False, 0) info_vbox.pack_start(unrenderable_info_label, False, False, 0) # 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) 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(_("Info"), info_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) alignment.set_size_request(450, 120) return (alignment, encodings_cb, quality_cb)
def __init__(self, editor_parent): GObject.GObject.__init__(self) self.set_homogeneous(False) self.set_spacing(2) # Buttons self.add_button = guiutils.get_image_button("add_kf.png", BUTTON_WIDTH, BUTTON_HEIGHT) self.delete_button = guiutils.get_image_button("delete_kf.png", BUTTON_WIDTH, BUTTON_HEIGHT) self.prev_kf_button = guiutils.get_image_button("prev_kf.png", BUTTON_WIDTH, BUTTON_HEIGHT) self.next_kf_button = guiutils.get_image_button("next_kf.png", BUTTON_WIDTH, BUTTON_HEIGHT) self.prev_frame_button = guiutils.get_image_button("kf_edit_prev_frame.png", BUTTON_WIDTH, BUTTON_HEIGHT) self.next_frame_button = guiutils.get_image_button("kf_edit_next_frame.png", BUTTON_WIDTH, BUTTON_HEIGHT) self.add_button.connect("clicked", lambda w,e: editor_parent.add_pressed(), None) self.delete_button.connect("clicked", lambda w,e: editor_parent.delete_pressed(), None) self.prev_kf_button.connect("clicked", lambda w,e: editor_parent.prev_pressed(), None) self.next_kf_button.connect("clicked", lambda w,e: editor_parent.next_pressed(), None) self.prev_frame_button.connect("clicked", lambda w,e: editor_parent.prev_frame_pressed(), None) self.next_frame_button.connect("clicked", lambda w,e: editor_parent.next_frame_pressed(), None) # Position entry self.kf_pos_label = Gtk.Label() self.modify_font(Pango.FontDescription("light 8")) self.kf_pos_label.set_text("0") self.kf_info_label = Gtk.Label() #self.modify_font(Pango.FontDescription("light 8")) self.kf_info_label.set_text("1/1") # Build row self.pack_start(self.add_button, False, False, 0) self.pack_start(self.delete_button, False, False, 0) self.pack_start(self.prev_kf_button, False, False, 0) self.pack_start(self.next_kf_button, False, False, 0) self.pack_start(self.prev_frame_button, False, False, 0) self.pack_start(self.next_frame_button, False, False, 0) self.pack_start(guiutils.pad_label(4,4), False, False, 0) self.pack_start(self.kf_info_label, False, False, 0) self.pack_start(Gtk.Label(), True, True, 0) self.pack_start(self.kf_pos_label, False, False, 0) self.pack_start(guiutils.get_pad_label(1, 10), 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.")) # 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, clip, track, clip_index): self.clip = clip self.track = track self.clip_index = clip_index # Create filter stack and GUI self.filter_stack = [] self.filter_kf_editors = {} # filter_object -> [kf_editors] self.widget = Gtk.VBox(False, 0) for filter_index in range(0, len(clip.filters)): filter_object = clip.filters[filter_index] edit_panel, kf_editors = _get_filter_panel(clip, filter_object, filter_index, track, clip_index) self.filter_kf_editors[filter_object] = kf_editors footer_row = FilterFooterRow(filter_object, self) edit_panel.pack_start(footer_row.widget, False, False, 0) edit_panel.pack_start(guiutils.pad_label(12, 12), False, False, 0) stack_item = FilterStackItem(filter_object, edit_panel, self) self.filter_stack.append(stack_item) self.widget.pack_start(stack_item.widget, False, False, 0) self.widget.show_all()
def __init__(self): GObject.GObject.__init__(self) self.set_title(_("Titler")) self.connect("delete-event", lambda w, e:close_titler()) if editorstate.screen_size_small_height() == True: global TEXT_LAYER_LIST_HEIGHT, TEXT_VIEW_HEIGHT, VIEW_EDITOR_HEIGHT TEXT_LAYER_LIST_HEIGHT = 150 TEXT_VIEW_HEIGHT = 180 VIEW_EDITOR_HEIGHT = 450 if editorstate.screen_size_small_height() == True: global VIEW_EDITOR_WIDTH VIEW_EDITOR_WIDTH = 680 self.block_updates = False self.view_editor = vieweditor.ViewEditor(PLAYER().profile, VIEW_EDITOR_WIDTH, VIEW_EDITOR_HEIGHT) self.view_editor.active_layer_changed_listener = self.active_layer_changed self.guides_toggle = vieweditor.GuidesViewToggle(self.view_editor) add_b = Gtk.Button(_("Add")) del_b = Gtk.Button(_("Delete")) add_b.connect("clicked", lambda w:self._add_layer_pressed()) del_b.connect("clicked", lambda w:self._del_layer_pressed()) add_del_box = Gtk.HBox() add_del_box = Gtk.HBox(True,1) add_del_box.pack_start(add_b, True, True, 0) add_del_box.pack_start(del_b, True, True, 0) center_h_icon = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "center_horizontal.png") center_v_icon = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "center_vertical.png") center_h = Gtk.Button() center_h.set_image(center_h_icon) center_h.connect("clicked", lambda w:self._center_h_pressed()) center_v = Gtk.Button() center_v.set_image(center_v_icon) center_v.connect("clicked", lambda w:self._center_v_pressed()) self.layer_list = TextLayerListView(self._layer_selection_changed, self._layer_visibility_toggled) self.layer_list.set_size_request(TEXT_LAYER_LIST_WIDTH, TEXT_LAYER_LIST_HEIGHT) self.text_view = Gtk.TextView() self.text_view.set_pixels_above_lines(2) self.text_view.set_left_margin(2) self.text_view.get_buffer().connect("changed", self._text_changed) self.sw = Gtk.ScrolledWindow() self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.ALWAYS) self.sw.add(self.text_view) self.sw.set_size_request(TEXT_VIEW_WIDTH, TEXT_VIEW_HEIGHT) scroll_frame = Gtk.Frame() scroll_frame.add(self.sw) self.tc_display = guicomponents.MonitorTCDisplay() self.tc_display.use_internal_frame = True self.tc_display.widget.set_valign(Gtk.Align.CENTER) self.pos_bar = positionbar.PositionBar() self.pos_bar.set_listener(self.position_listener) self.pos_bar.update_display_from_producer(PLAYER().producer) self.pos_bar.mouse_release_listener = self.pos_bar_mouse_released 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_valign(Gtk.Align.CENTER) font_map = PangoCairo.font_map_get_default() unsorted_families = font_map.list_families() if len(unsorted_families) == 0: print "No font families found in system! Titler will not work." self.font_families = sorted(unsorted_families, key=lambda family: family.get_name()) self.font_family_indexes_for_name = {} combo = Gtk.ComboBoxText() indx = 0 for family in self.font_families: combo.append_text(family.get_name()) self.font_family_indexes_for_name[family.get_name()] = indx indx += 1 combo.set_active(0) self.font_select = combo self.font_select.connect("changed", self._edit_value_changed) adj = Gtk.Adjustment(float(DEFAULT_FONT_SIZE), float(1), float(300), float(1)) self.size_spin = Gtk.SpinButton() self.size_spin.set_adjustment(adj) self.size_spin.connect("changed", self._edit_value_changed) self.size_spin.connect("key-press-event", self._key_pressed_on_widget) font_main_row = Gtk.HBox() font_main_row.pack_start(self.font_select, True, True, 0) font_main_row.pack_start(guiutils.pad_label(5, 5), False, False, 0) font_main_row.pack_start(self.size_spin, False, False, 0) self.bold_font = Gtk.ToggleButton() self.italic_font = Gtk.ToggleButton() bold_icon = Gtk.Image.new_from_stock(Gtk.STOCK_BOLD, Gtk.IconSize.BUTTON) italic_icon = Gtk.Image.new_from_stock(Gtk.STOCK_ITALIC, Gtk.IconSize.BUTTON) self.bold_font.set_image(bold_icon) self.italic_font.set_image(italic_icon) self.bold_font.connect("clicked", self._edit_value_changed) self.italic_font.connect("clicked", self._edit_value_changed) self.left_align = Gtk.RadioButton(None) self.center_align = Gtk.RadioButton.new_from_widget(self.left_align) self.right_align = Gtk.RadioButton.new_from_widget(self.left_align) left_icon = Gtk.Image.new_from_stock(Gtk.STOCK_JUSTIFY_LEFT, Gtk.IconSize.BUTTON) center_icon = Gtk.Image.new_from_stock(Gtk.STOCK_JUSTIFY_CENTER, Gtk.IconSize.BUTTON) right_icon = Gtk.Image.new_from_stock(Gtk.STOCK_JUSTIFY_RIGHT, Gtk.IconSize.BUTTON) self.left_align.set_image(left_icon) self.center_align.set_image(center_icon) self.right_align.set_image(right_icon) self.left_align.set_mode(False) self.center_align.set_mode(False) self.right_align.set_mode(False) self.left_align.connect("clicked", self._edit_value_changed) self.center_align.connect("clicked", self._edit_value_changed) self.right_align.connect("clicked", self._edit_value_changed) self.color_button = Gtk.ColorButton.new_with_rgba(Gdk.RGBA(red=1.0, green=1.0, blue=1.0, alpha=1.0)) self.color_button.connect("color-set", self._edit_value_changed) buttons_box = Gtk.HBox() buttons_box.pack_start(Gtk.Label(), True, True, 0) buttons_box.pack_start(self.bold_font, False, False, 0) buttons_box.pack_start(self.italic_font, False, False, 0) buttons_box.pack_start(guiutils.pad_label(5, 5), False, False, 0) buttons_box.pack_start(self.left_align, False, False, 0) buttons_box.pack_start(self.center_align, False, False, 0) buttons_box.pack_start(self.right_align, False, False, 0) buttons_box.pack_start(guiutils.pad_label(5, 5), False, False, 0) buttons_box.pack_start(self.color_button, False, False, 0) buttons_box.pack_start(Gtk.Label(), True, True, 0) load_layers = Gtk.Button(_("Load Layers")) load_layers.connect("clicked", lambda w:self._load_layers_pressed()) save_layers = Gtk.Button(_("Save Layers")) save_layers.connect("clicked", lambda w:self._save_layers_pressed()) clear_layers = Gtk.Button(_("Clear All")) clear_layers.connect("clicked", lambda w:self._clear_layers_pressed()) layers_save_buttons_row = Gtk.HBox() layers_save_buttons_row.pack_start(save_layers, False, False, 0) layers_save_buttons_row.pack_start(load_layers, False, False, 0) layers_save_buttons_row.pack_start(Gtk.Label(), True, True, 0) adj = Gtk.Adjustment(float(0), float(0), float(3000), float(1)) self.x_pos_spin = Gtk.SpinButton() self.x_pos_spin.set_adjustment(adj) self.x_pos_spin.connect("changed", self._position_value_changed) self.x_pos_spin.connect("key-press-event", self._key_pressed_on_widget) adj = Gtk.Adjustment(float(0), float(0), float(3000), float(1)) self.y_pos_spin = Gtk.SpinButton() self.y_pos_spin.set_adjustment(adj) self.y_pos_spin.connect("changed", self._position_value_changed) self.y_pos_spin.connect("key-press-event", self._key_pressed_on_widget) adj = Gtk.Adjustment(float(0), float(0), float(3000), float(1)) self.rotation_spin = Gtk.SpinButton() self.rotation_spin.set_adjustment(adj) self.rotation_spin.connect("changed", self._position_value_changed) self.rotation_spin.connect("key-press-event", self._key_pressed_on_widget) undo_pos = Gtk.Button() undo_icon = Gtk.Image.new_from_stock(Gtk.STOCK_UNDO, Gtk.IconSize.BUTTON) undo_pos.set_image(undo_icon) next_icon = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "next_frame_s.png") prev_icon = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "prev_frame_s.png") prev_frame = Gtk.Button() prev_frame.set_image(prev_icon) prev_frame.connect("clicked", lambda w:self._prev_frame_pressed()) next_frame = Gtk.Button() next_frame.set_image(next_icon) next_frame.connect("clicked", lambda w:self._next_frame_pressed()) self.scale_selector = vieweditor.ScaleSelector(self) timeline_box = Gtk.HBox() timeline_box.pack_start(self.tc_display.widget, False, False, 0) timeline_box.pack_start(guiutils.pad_label(12, 12), False, False, 0) timeline_box.pack_start(pos_bar_frame, True, True, 0) timeline_box.pack_start(guiutils.pad_label(12, 12), False, False, 0) timeline_box.pack_start(prev_frame, False, False, 0) timeline_box.pack_start(next_frame, False, False, 0) timeline_box.pack_start(self.guides_toggle, False, False, 0) timeline_box.pack_start(self.scale_selector, False, False, 0) timeline_box.set_margin_top(6) timeline_box.set_margin_bottom(6) positions_box = Gtk.HBox() positions_box.pack_start(Gtk.Label(), True, True, 0) positions_box.pack_start(Gtk.Label(label="X:"), False, False, 0) positions_box.pack_start(self.x_pos_spin, False, False, 0) positions_box.pack_start(guiutils.pad_label(40, 5), False, False, 0) positions_box.pack_start(Gtk.Label(label="Y:"), False, False, 0) positions_box.pack_start(self.y_pos_spin, False, False, 0) #positions_box.pack_start(Gtk.Label(label=_("Angle")), False, False, 0) #positions_box.pack_start(self.rotation_spin, False, False, 0) positions_box.pack_start(guiutils.pad_label(40, 5), False, False, 0) positions_box.pack_start(center_h, False, False, 0) positions_box.pack_start(center_v, False, False, 0) positions_box.pack_start(Gtk.Label(), True, True, 0) controls_panel_1 = Gtk.VBox() controls_panel_1.pack_start(add_del_box, False, False, 0) controls_panel_1.pack_start(self.layer_list, False, False, 0) controls_panel_1.pack_start(layers_save_buttons_row, False, False, 0) controls_panel_2 = Gtk.VBox() controls_panel_2.pack_start(scroll_frame, True, True, 0) controls_panel_2.pack_start(font_main_row, False, False, 0) controls_panel_2.pack_start(buttons_box, False, False, 0) controls_panel = Gtk.VBox() controls_panel.pack_start(guiutils.get_named_frame(_("Active Layer"),controls_panel_2), True, True, 0) controls_panel.pack_start(guiutils.get_named_frame(_("Layers"),controls_panel_1), False, False, 0) view_editor_editor_buttons_row = Gtk.HBox() view_editor_editor_buttons_row.pack_start(positions_box, False, False, 0) view_editor_editor_buttons_row.pack_start(Gtk.Label(), True, True, 0) keep_label = Gtk.Label(label=_("Keep Layers When Closed")) self.keep_layers_check = Gtk.CheckButton() self.keep_layers_check.set_active(_keep_titler_data) self.keep_layers_check.connect("toggled", self._keep_layers_toggled) open_label = Gtk.Label(label=_("Open Saved Title In Bin")) self.open_in_current_check = Gtk.CheckButton() self.open_in_current_check.set_active(_open_saved_in_bin) self.open_in_current_check.connect("toggled", self._open_saved_in_bin) exit_b = guiutils.get_sized_button(_("Close"), 150, 32) exit_b.connect("clicked", lambda w:close_titler()) save_titles_b = guiutils.get_sized_button(_("Save Title Graphic"), 150, 32) save_titles_b.connect("clicked", lambda w:self._save_title_pressed()) editor_buttons_row = Gtk.HBox() editor_buttons_row.pack_start(Gtk.Label(), True, True, 0) editor_buttons_row.pack_start(keep_label, False, False, 0) editor_buttons_row.pack_start(self.keep_layers_check, False, False, 0) editor_buttons_row.pack_start(guiutils.pad_label(24, 2), False, False, 0) editor_buttons_row.pack_start(open_label, False, False, 0) editor_buttons_row.pack_start(self.open_in_current_check, False, False, 0) editor_buttons_row.pack_start(guiutils.pad_label(24, 2), False, False, 0) editor_buttons_row.pack_start(exit_b, False, False, 0) editor_buttons_row.pack_start(save_titles_b, False, False, 0) editor_panel = Gtk.VBox() editor_panel.pack_start(self.view_editor, True, True, 0) editor_panel.pack_start(timeline_box, False, False, 0) editor_panel.pack_start(guiutils.get_in_centering_alignment(view_editor_editor_buttons_row), False, False, 0) editor_panel.pack_start(guiutils.pad_label(2, 24), True, True, 0) editor_panel.pack_start(editor_buttons_row, False, False, 0) editor_row = Gtk.HBox() editor_row.pack_start(controls_panel, False, False, 0) editor_row.pack_start(editor_panel, True, True, 0) alignment = guiutils.set_margins(editor_row, 8,8,8,8) self.add(alignment) self.layer_list.fill_data_model() self._update_gui_with_active_layer_data() self.show_all() self.connect("size-allocate", lambda w, e:self.window_resized()) self.connect("window-state-event", lambda w, e:self.window_resized())
def __init__(self, editable_properties): # Initial active band self.band = SHADOW # HUE and SAT are both saved in range (0,1) # HUE and SAT are both handled in editor using range (0,1) # Saved and editor ranges are the same. # ColorGradeBandCorrection objects handle ranges differently # - saturation values 0-1 converted to range (-1, 1) # - saturation value 0.5 is converted to 0 and means no correction applied # - converted range(-1, 0) means negative correction applied # - negative correction is interpreted as positive correction of complimentary color # Editable properties self.shadow_hue = filter(lambda ep: ep.name == "shadow_hue", editable_properties)[0] self.shadow_saturation = filter(lambda ep: ep.name == "shadow_saturation", editable_properties)[0] self.mid_hue = filter(lambda ep: ep.name == "mid_hue", editable_properties)[0] self.mid_saturation = filter(lambda ep: ep.name == "mid_saturation", editable_properties)[0] self.hi_hue = filter(lambda ep: ep.name == "hi_hue", editable_properties)[0] self.hi_saturation = filter(lambda ep: ep.name == "hi_saturation", editable_properties)[0] # Create filter and init values self.filt = lutfilter.ColorGradeFilter(editable_properties) self.filt.shadow_band.set_hue_and_saturation(self.shadow_hue.get_float_value(), self.shadow_saturation.get_float_value()) self.filt.mid_band.set_hue_and_saturation(self.mid_hue.get_float_value(), self.mid_saturation.get_float_value()) self.filt.hi_band.set_hue_and_saturation(self.hi_hue.get_float_value(), self.hi_saturation.get_float_value()) self.filt.update_all_corrections() self.filt.update_rgb_lookups() self.filt.write_out_tables() # Create GUI self.color_box = ThreeBandColorBox(self.color_box_values_changed, self.band_changed, 340, 200) self.color_box.set_cursor(self.shadow_hue.get_float_value(), self.shadow_saturation.get_float_value()) self.color_box.set_cursors(self.shadow_hue.get_float_value(), self.shadow_saturation.get_float_value(), self.mid_hue.get_float_value(), self.mid_saturation.get_float_value(), self.hi_hue.get_float_value(), self.hi_saturation.get_float_value()) box_row = Gtk.HBox() box_row.pack_start(Gtk.Label(), True, True, 0) box_row.pack_start(self.color_box.widget, False, False, 0) box_row.pack_start(Gtk.Label(), True, True, 0) shadow_icon = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "shadow.png") self.sh_label = Gtk.Label() self.ss_label = Gtk.Label() shadow_box = Gtk.HBox() shadow_box.pack_start(shadow_icon, False, False, 0) shadow_box.pack_start(guiutils.pad_label(3,5), False, False, 0) shadow_box.pack_start(self.sh_label, False, False, 0) shadow_box.pack_start(self.ss_label, False, False, 0) shadow_box.set_size_request(95, 20) midtone_icon = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "midtones.png") self.mh_label = Gtk.Label() self.ms_label = Gtk.Label() midtone_box = Gtk.HBox() midtone_box.pack_start(midtone_icon, False, False, 0) midtone_box.pack_start(guiutils.pad_label(3,5), False, False, 0) midtone_box.pack_start(self.mh_label, False, False, 0) midtone_box.pack_start(self.ms_label, False, False, 0) midtone_box.set_size_request(95, 20) highligh_icon = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "highlights.png") self.hh_label = Gtk.Label() self.hs_label = Gtk.Label() highlight_box = Gtk.HBox() highlight_box.pack_start(highligh_icon, False, False, 0) highlight_box.pack_start(guiutils.pad_label(3,5), False, False, 0) highlight_box.pack_start(self.hh_label, False, False, 0) highlight_box.pack_start(self.hs_label, False, False, 0) highlight_box.set_size_request(95, 20) self._display_values(SHADOW, self.shadow_hue.get_float_value(), self.shadow_saturation.get_float_value()) self._display_values(MID, self.mid_hue.get_float_value(), self.mid_saturation.get_float_value()) self._display_values(HI, self.hi_hue.get_float_value(), self.hi_saturation.get_float_value()) info_row = Gtk.HBox() info_row.pack_start(Gtk.Label(), True, True, 0) info_row.pack_start(shadow_box, False, False, 0) info_row.pack_start(midtone_box, False, False, 0) info_row.pack_start(highlight_box, False, False, 0) info_row.pack_start(Gtk.Label(), True, True, 0) self.widget = Gtk.VBox() self.widget.pack_start(box_row, False, False, 0) self.widget.pack_start(info_row, False, False, 0) self.widget.pack_start(Gtk.Label(), True, True, 0)
def __init__(self): self.dialog = gtk.Dialog(_("Proxy Manager"), None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Close Manager").encode('utf-8'), gtk.RESPONSE_CLOSE)) # Encoding self.enc_select = gtk.combo_box_new_text() encodings = renderconsumer.proxy_encodings if len(encodings) < 1: # no encoding options available, system does not have right codecs # display info pass for encoption in encodings: self.enc_select.append_text(encoption.name) current_enc = editorstate.PROJECT().proxy_data.encoding if current_enc >= len(encodings): # current encoding selection not available current_enc = 0 editorstate.PROJECT().proxy_data.encoding = 0 self.enc_select.set_active(current_enc) self.enc_select.connect("changed", lambda w,e: self.encoding_changed(w.get_active()), None) self.size_select = gtk.combo_box_new_text() self.size_select.append_text(_("Project Image Size")) self.size_select.append_text(_("Half Project Image Size")) self.size_select.append_text(_("Quarter Project Image Size")) self.size_select.set_active(editorstate.PROJECT().proxy_data.size) self.size_select.connect("changed", lambda w,e: self.size_changed(w.get_active()), None) row_enc = gtk.HBox(False, 2) row_enc.pack_start(gtk.Label(), True, True, 0) row_enc.pack_start(self.enc_select, False, False, 0) row_enc.pack_start(self.size_select, False, False, 0) row_enc.pack_start(gtk.Label(), True, True, 0) vbox_enc = gtk.VBox(False, 2) vbox_enc.pack_start(row_enc, False, False, 0) vbox_enc.pack_start(guiutils.pad_label(8, 12), False, False, 0) panel_encoding = guiutils.get_named_frame(_("Proxy Encoding"), vbox_enc) # Mode media_files = editorstate.PROJECT().media_files video_files = 0 proxy_files = 0 for k, media_file in media_files.iteritems(): if media_file.type == appconsts.VIDEO: video_files = video_files + 1 if media_file.has_proxy_file == True or media_file.is_proxy_file == True: proxy_files = proxy_files + 1 proxy_status_label = gtk.Label(_("Proxy Stats:")) proxy_status_value = gtk.Label(str(proxy_files) + _(" proxy file(s) for ") + str(video_files) + _(" video file(s)")) row_proxy_status = guiutils.get_two_column_box_right_pad(proxy_status_label, proxy_status_value, 150, 150) proxy_mode_label = gtk.Label(_("Current Proxy Mode:")) self.proxy_mode_value = gtk.Label() self.set_mode_display_value() row_proxy_mode = guiutils.get_two_column_box_right_pad(proxy_mode_label, self.proxy_mode_value, 150, 150) self.convert_progress_bar = gtk.ProgressBar() self.convert_progress_bar.set_text(_("Press Button to Change Mode")) self.use_button = gtk.Button(_("Use Proxy Media")) self.dont_use_button = gtk.Button(_("Use Original Media")) self.set_convert_buttons_state() self.use_button.connect("clicked", lambda w: _convert_to_proxy_project()) self.dont_use_button.connect("clicked", lambda w: _convert_to_original_media_project()) c_box_2 = gtk.HBox(True, 8) c_box_2.pack_start(self.use_button, True, True, 0) c_box_2.pack_start(self.dont_use_button, True, True, 0) row2_onoff = gtk.HBox(False, 2) row2_onoff.pack_start(gtk.Label(), True, True, 0) row2_onoff.pack_start(c_box_2, False, False, 0) row2_onoff.pack_start(gtk.Label(), True, True, 0) vbox_onoff = gtk.VBox(False, 2) vbox_onoff.pack_start(row_proxy_status, False, False, 0) vbox_onoff.pack_start(row_proxy_mode, False, False, 0) vbox_onoff.pack_start(guiutils.pad_label(12, 12), False, False, 0) vbox_onoff.pack_start(self.convert_progress_bar, False, False, 0) vbox_onoff.pack_start(row2_onoff, False, False, 0) panel_onoff = guiutils.get_named_frame(_("Project Proxy Mode"), vbox_onoff) # Pane vbox = gtk.VBox(False, 2) vbox.pack_start(panel_encoding, False, False, 0) vbox.pack_start(panel_onoff, False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(12, 12, 12, 12) alignment.add(vbox) self.dialog.vbox.pack_start(alignment, True, True, 0) dialogutils.default_behaviour(self.dialog) self.dialog.connect('response', dialogutils.dialog_destroy) self.dialog.show_all()
def __init__(self, kf_editor, property_editor_widgets_create_func, value_labels ): # kf_editor is keyframeeditor.RotoMaskKeyFrameEditor GObject.GObject.__init__(self) self.set_modal(True) self.set_transient_for(gui.editor_window.window) self.set_title(_("RotoMaskEditor")) self.connect("delete-event", lambda w, e: close_rotomask()) if editorstate.screen_size_small_height() == True: global TEXT_LAYER_LIST_HEIGHT, TEXT_VIEW_HEIGHT, VIEW_EDITOR_HEIGHT TEXT_LAYER_LIST_HEIGHT = 150 TEXT_VIEW_HEIGHT = 180 VIEW_EDITOR_HEIGHT = 450 if editorstate.screen_size_small_height() == True: global VIEW_EDITOR_WIDTH VIEW_EDITOR_WIDTH = 680 editor_widgets = property_editor_widgets_create_func() self.block_updates = False self.mask_create_freeze = False # We are not allowing user to change acrive kf when creating mask self.kf_editor = kf_editor self.kf_editor.set_parent_editor(self) # mask type param was added later, we need handle it not existing. if self.get_mask_type() == -1: self.set_mask_type(vieweditorshape.LINE_MASK) self.set_mask_type_on_init = False # but we don't want to destroy user's curve masks. THis is not complety back wards compatible stuff can get destroyed on second load. else: self.set_mask_type_on_init = True self.value_labels = value_labels self.view_editor = vieweditor.ViewEditor(PLAYER().profile, VIEW_EDITOR_WIDTH, VIEW_EDITOR_HEIGHT) self.view_editor.draw_safe_area = False self.tc_display = guicomponents.MonitorTCDisplay() self.tc_display.use_internal_frame = True self.tc_display.widget.set_valign(Gtk.Align.CENTER) kf_mode_img = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "roto_kf_edit_mode.png") move_mode_img = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "roto_move_mode.png") self.kf_mode_button = Gtk.ToggleButton() self.kf_mode_button.set_image(kf_mode_img) self.kf_mode_button.set_active( True) # we start with vieweditorlayer.ROTO_POINT_MODE edit mode self.kf_mode_button.connect("clicked", self._kf_mode_clicked) self.move_mode_button = Gtk.ToggleButton() self.move_mode_button.set_image(move_mode_img) self.move_mode_button.connect("clicked", self._move_mode_clicked) self.scale_selector = vieweditor.ScaleSelector(self) self.view_editor.scale_select = self.scale_selector timeline_box = Gtk.HBox() timeline_box.pack_start(self.tc_display.widget, False, False, 0) timeline_box.pack_start(Gtk.Label(), True, True, 0) timeline_box.pack_start(self.kf_mode_button, False, False, 0) timeline_box.pack_start(self.move_mode_button, False, False, 0) timeline_box.pack_start(Gtk.Label(), True, True, 0) timeline_box.pack_start(self.scale_selector, False, False, 0) timeline_box.set_margin_top(6) timeline_box.set_margin_bottom(6) mask_type_label = Gtk.Label(_("Mask Type:")) mask_type_combo_box = Gtk.ComboBoxText() mask_type_combo_box.append_text(_("Curve Mask")) mask_type_combo_box.append_text(_("Line Mask")) mask_type_combo_box.set_active(0) mask_type_combo_box.connect("changed", self.mask_type_selection_changed) self.mask_type_combo_box = mask_type_combo_box allow_adding_check = Gtk.CheckButton() allow_adding_check.set_active( False ) # This shows value of self.roto_mask_layer.allow_adding_points, False is default allow_adding_check.connect("toggled", self.allow_adding_toggled) allow_adding_label = Gtk.Label( _("Allow to add / delete points in closed masks")) save_rotodata_b = guiutils.get_sized_button(_("Close Tool"), 150, 32) save_rotodata_b.connect("clicked", lambda w: self._save_rotodata_pressed()) prop_editor_row1 = Gtk.HBox() prop_editor_row1.pack_start(Gtk.Label(), True, True, 0) prop_editor_row1.pack_start(mask_type_label, False, False, 0) prop_editor_row1.pack_start(guiutils.pad_label(4, 4), False, False, 0) prop_editor_row1.pack_start(mask_type_combo_box, False, False, 0) prop_editor_row1.pack_start(guiutils.pad_label(24, 20), False, False, 0) prop_editor_row1.pack_start(editor_widgets[0], False, False, 0) prop_editor_row1.pack_start(guiutils.pad_label(24, 20), False, False, 0) prop_editor_row1.pack_start(editor_widgets[3], False, False, 0) prop_editor_row1.pack_start(guiutils.pad_label(24, 20), False, False, 0) prop_editor_row1.pack_start(editor_widgets[4], False, False, 0) prop_editor_row1.pack_start(Gtk.Label(), True, True, 0) prop_editor_row2 = Gtk.HBox() prop_editor_row2.pack_start(Gtk.Label(), True, True, 0) prop_editor_row2.pack_start(editor_widgets[1], False, False, 0) prop_editor_row2.pack_start(guiutils.pad_label(24, 20), False, False, 0) prop_editor_row2.pack_start(editor_widgets[2], False, False, 0) prop_editor_row2.pack_start(Gtk.Label(), True, True, 0) editor_buttons_row = Gtk.HBox() editor_buttons_row.pack_start(allow_adding_check, False, False, 0) editor_buttons_row.pack_start(guiutils.pad_label(4, 2), False, False, 0) editor_buttons_row.pack_start(allow_adding_label, False, False, 0) editor_buttons_row.pack_start(Gtk.Label(), True, True, 0) editor_buttons_row.pack_start(save_rotodata_b, False, False, 0) editor_panel = Gtk.VBox() editor_panel.pack_start(self.view_editor, True, True, 0) editor_panel.pack_start(timeline_box, False, False, 0) editor_panel.pack_start(kf_editor, False, False, 0) editor_panel.pack_start(guiutils.pad_label(2, 12), False, False, 0) editor_panel.pack_start(prop_editor_row1, False, False, 0) editor_panel.pack_start(guiutils.pad_label(2, 12), False, False, 0) editor_panel.pack_start(prop_editor_row2, False, False, 0) editor_panel.pack_start(guiutils.pad_label(2, 12), False, False, 0) editor_panel.pack_start(editor_buttons_row, False, False, 0) editor_row = Gtk.HBox() editor_row.pack_start(editor_panel, True, True, 0) alignment = guiutils.set_margins(editor_row, 8, 8, 8, 8) self.add(alignment) self.view_editor.clear_layers() # NOTE: we start with vieweditorlayer.ROTO_POINT_MODE edit mode, see __init()__ self.roto_mask_layer = vieweditorlayer.RotoMaskEditLayer( self.view_editor, self.kf_editor.clip_editor, kf_editor.editable_property, self) self.view_editor.add_layer(self.roto_mask_layer) self.view_editor.activate_layer(0) self.show_all() self.kf_editor.active_keyframe_changed() self.connect("size-allocate", lambda w, e: self.window_resized()) self.connect("window-state-event", lambda w, e: self.window_resized()) self.connect("key-press-event", self.key_down) self.window_resized() self.kf_editor.clip_editor.maybe_set_first_kf_in_clip_area_active() self.update_mask_create_freeze_gui()
def get_media_log_events_panel(events_list_view): global widgets group_actions_menu = guicomponents.HamburgerPressLaunch( _group_action_pressed) guiutils.set_margins(group_actions_menu.widget, 10, 0, 2, 18) star_check = Gtk.CheckButton() star_check.set_active(True) star_check.connect("clicked", lambda w: media_log_filtering_changed()) widgets.star_check = star_check star_label = Gtk.Image() # Aug-2019 - SvdB - BB star_label.set_from_file(respaths.IMAGE_PATH + guiutils.get_image_name( "star", double_height=editorpersistance.prefs.double_track_hights)) star_not_active_check = Gtk.CheckButton() star_not_active_check.set_active(True) star_not_active_check.connect("clicked", lambda w: media_log_filtering_changed()) widgets.star_not_active_check = star_not_active_check star_not_active_label = Gtk.Image() # Aug-2019 - SvdB - BB star_not_active_label.set_from_file( respaths.IMAGE_PATH + guiutils.get_image_name( "star_not_active", double_height=editorpersistance.prefs.double_track_hights)) star_button = Gtk.Button() # Aug-2019 - SvdB - BB star_button.set_image(guiutils.get_image("star")) star_button.connect("clicked", lambda w: media_log_star_button_pressed()) no_star_button = Gtk.Button() # Aug-2019 - SvdB - BB no_star_button.set_image(guiutils.get_image("star_not_active")) no_star_button.connect("clicked", lambda w: media_log_no_star_button_pressed()) widgets.group_box = Gtk.HBox() _create_group_select() widgets.group_view_select.set_active(0) row1 = Gtk.HBox() row1.pack_start(guiutils.get_pad_label(6, 12), False, True, 0) row1.pack_start(guiutils.get_pad_label(6, 12), False, True, 0) row1.pack_start(widgets.group_box, False, True, 0) row1.pack_start(guiutils.get_pad_label(6, 12), False, True, 0) row1.pack_start(star_check, False, True, 0) row1.pack_start(star_label, False, True, 0) row1.pack_start(guiutils.get_pad_label(6, 12), False, True, 0) row1.pack_start(star_not_active_check, False, True, 0) row1.pack_start(star_not_active_label, False, True, 0) row1.pack_start(guiutils.pad_label(12, 12), False, False, 0) row1.pack_start(star_button, False, True, 0) row1.pack_start(no_star_button, False, True, 0) row1.pack_start(Gtk.Label(), True, True, 0) # Aug-2019 - SvdB - BB prefs = editorpersistance.prefs size_adj = 1 if prefs.double_track_hights: size_adj = 2 widgets.log_range = Gtk.Button() widgets.log_range.set_image(guiutils.get_image("log_range")) widgets.log_range.set_size_request(80, 30) widgets.log_range.connect("clicked", lambda w: log_range_clicked()) delete_button = Gtk.Button() delete_button.set_image(guiutils.get_image("delete_log_range")) delete_button.set_size_request(80, 30) delete_button.connect("clicked", lambda w: delete_selected()) insert_displayed = Gtk.Button() insert_displayed.set_image(guiutils.get_image("insert_media_log")) insert_displayed.set_size_request(80, 22) insert_displayed.connect("clicked", lambda w: insert_selected_log_events()) append_displayed = Gtk.Button() append_displayed.set_image(guiutils.get_image("append_media_log")) append_displayed.set_size_request(80, 22) append_displayed.connect("clicked", lambda w: append_log_events()) row2 = Gtk.HBox() row2.pack_start(group_actions_menu.widget, False, True, 0) row2.pack_start(widgets.log_range, False, True, 0) row2.pack_start(delete_button, False, True, 0) row2.pack_start(Gtk.Label(), True, True, 0) row2.pack_start(insert_displayed, False, True, 0) row2.pack_start(append_displayed, False, True, 0) panel = Gtk.VBox() panel.pack_start(row1, False, True, 0) panel.pack_start(events_list_view, True, True, 0) panel.pack_start(row2, False, True, 0) panel.set_size_request(400, 10) star_check.set_tooltip_text(_("Display starred ranges")) star_not_active_check.set_tooltip_text(_("Display non-starred ranges")) star_button.set_tooltip_text(_("Set selected ranges starred")) no_star_button.set_tooltip_text(_("Set selected ranges non-starred")) widgets.log_range.set_tooltip_text(_("Log current marked range")) delete_button.set_tooltip_text(_("Delete selected ranges")) insert_displayed.set_tooltip_text(_("Insert selected ranges on Timeline")) append_displayed.set_tooltip_text(_("Append displayed ranges on Timeline")) dnd.connect_range_log(events_list_view.treeview) return panel
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): self.dialog = gtk.Dialog(_("JACK Audio Manager"), None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Close").encode('utf-8'), gtk.RESPONSE_CLOSE)) start_up_label = gtk.Label(_("Start JACK output on application start-up")) self.startup_check_button = gtk.CheckButton() if editorpersistance.prefs.jack_start_up_op == appconsts.JACK_ON_START_UP_YES: self.startup_check_button.set_active(True) self.startup_check_button.connect("toggled", lambda w,e: start_op_changed(w), None) start_row = guiutils.get_checkbox_row_box(self.startup_check_button, start_up_label) self.frequency_select = gtk.combo_box_new_text() cur_value_index = 0 count = 0 for freq in _jack_frequencies: self.frequency_select.append_text(str(freq)) if freq == editorpersistance.prefs.jack_frequency: cur_value_index = count count = count + 1 self.frequency_select.set_active(cur_value_index) self.frequency_select.connect("changed", lambda w,e: frequency_changed(w.get_active()), None) freq_row = guiutils.get_two_column_box_right_pad(gtk.Label("JACK frequency Hz:"), self.frequency_select, 190, 15) self.output_type_select = gtk.combo_box_new_text() self.output_type_select.append_text(_("Audio")) self.output_type_select.append_text(_("Sync Master Timecode")) # Indexes correspond with appconsts.JACK_OUT_AUDIO, appconsts.JACK_OUT_SYNC values self.output_type_select.set_active(editorpersistance.prefs.jack_output_type) self.output_type_select.connect("changed", lambda w,e: output_type_changed(w.get_active()), None) output_row = guiutils.get_two_column_box_right_pad(gtk.Label("JACK output type:"), self.output_type_select, 190, 15) vbox_props = gtk.VBox(False, 2) vbox_props.pack_start(freq_row, False, False, 0) vbox_props.pack_start(output_row, False, False, 0) vbox_props.pack_start(start_row, False, False, 0) vbox_props.pack_start(guiutils.pad_label(8, 12), False, False, 0) props_frame = guiutils.get_named_frame(_("Properties"), vbox_props) self.jack_output_status_value = gtk.Label("<b>OFF</b>") self.jack_output_status_value.set_use_markup(True) self.jack_output_status_label = gtk.Label("JACK output is ") status_row = guiutils.get_centered_box([self.jack_output_status_label, self.jack_output_status_value]) self.dont_use_button = gtk.Button(_("Stop JACK Output")) self.use_button = gtk.Button(_("Start JACK Output")) self.use_button.connect("clicked", lambda w: use_jack_clicked(self)) self.dont_use_button.connect("clicked", lambda w: _convert_to_original_media_project()) self.set_gui_state() c_box_2 = gtk.HBox(True, 8) c_box_2.pack_start(self.dont_use_button, True, True, 0) c_box_2.pack_start(self.use_button, True, True, 0) row2_onoff = gtk.HBox(False, 2) row2_onoff.pack_start(gtk.Label(), True, True, 0) row2_onoff.pack_start(c_box_2, False, False, 0) row2_onoff.pack_start(gtk.Label(), True, True, 0) vbox_onoff = gtk.VBox(False, 2) vbox_onoff.pack_start(guiutils.pad_label(12, 4), False, False, 0) vbox_onoff.pack_start(status_row, False, False, 0) vbox_onoff.pack_start(guiutils.pad_label(12, 12), False, False, 0) vbox_onoff.pack_start(row2_onoff, False, False, 0) onoff_frame = guiutils.get_named_frame(_("Output Status"), vbox_onoff) # Pane vbox = gtk.VBox(False, 2) vbox.pack_start(props_frame, False, False, 0) vbox.pack_start(onoff_frame, False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(12, 12, 12, 12) alignment.add(vbox) self.dialog.vbox.pack_start(alignment, True, True, 0) dialogutils.default_behaviour(self.dialog) self.dialog.connect('response', dialogutils.dialog_destroy) self.dialog.show_all() global _dialog _dialog = self
def __init__(self): self.dialog = Gtk.Dialog( _("Proxy Manager"), gui.editor_window.window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Close Manager").encode('utf-8'), Gtk.ResponseType.CLOSE)) # Encoding self.enc_select = Gtk.ComboBoxText() encodings = renderconsumer.proxy_encodings if len( encodings ) < 1: # no encoding options available, system does not have right codecs # display info pass for encoption in encodings: self.enc_select.append_text(encoption.name) current_enc = editorstate.PROJECT().proxy_data.encoding if current_enc >= len( encodings): # current encoding selection not available current_enc = 0 editorstate.PROJECT().proxy_data.encoding = 0 self.enc_select.set_active(current_enc) self.enc_select.connect( "changed", lambda w, e: self.encoding_changed(w.get_active()), None) self.size_select = Gtk.ComboBoxText() self.size_select.append_text(_("Project Image Size")) self.size_select.append_text(_("Half Project Image Size")) self.size_select.append_text(_("Quarter Project Image Size")) self.size_select.set_active(editorstate.PROJECT().proxy_data.size) self.size_select.connect( "changed", lambda w, e: self.size_changed(w.get_active()), None) row_enc = Gtk.HBox(False, 2) row_enc.pack_start(Gtk.Label(), True, True, 0) row_enc.pack_start(self.enc_select, False, False, 0) row_enc.pack_start(self.size_select, False, False, 0) row_enc.pack_start(Gtk.Label(), True, True, 0) vbox_enc = Gtk.VBox(False, 2) vbox_enc.pack_start(row_enc, False, False, 0) vbox_enc.pack_start(guiutils.pad_label(8, 12), False, False, 0) panel_encoding = guiutils.get_named_frame(_("Proxy Encoding"), vbox_enc) # Mode media_files = editorstate.PROJECT().media_files video_files = 0 proxy_files = 0 for k, media_file in media_files.iteritems(): if media_file.type == appconsts.VIDEO: video_files = video_files + 1 if media_file.has_proxy_file == True or media_file.is_proxy_file == True: proxy_files = proxy_files + 1 proxy_status_label = Gtk.Label(label=_("Proxy Stats:")) proxy_status_value = Gtk.Label(label=str(proxy_files) + _(" proxy file(s) for ") + str(video_files) + _(" video file(s)")) row_proxy_status = guiutils.get_two_column_box_right_pad( proxy_status_label, proxy_status_value, 150, 150) proxy_mode_label = Gtk.Label(label=_("Current Proxy Mode:")) self.proxy_mode_value = Gtk.Label() self.set_mode_display_value() row_proxy_mode = guiutils.get_two_column_box_right_pad( proxy_mode_label, self.proxy_mode_value, 150, 150) self.convert_progress_bar = Gtk.ProgressBar() self.convert_progress_bar.set_text(_("Press Button to Change Mode")) self.use_button = Gtk.Button(_("Use Proxy Media")) self.dont_use_button = Gtk.Button(_("Use Original Media")) self.set_convert_buttons_state() self.use_button.connect("clicked", lambda w: _convert_to_proxy_project()) self.dont_use_button.connect( "clicked", lambda w: _convert_to_original_media_project()) c_box_2 = Gtk.HBox(True, 8) c_box_2.pack_start(self.use_button, True, True, 0) c_box_2.pack_start(self.dont_use_button, True, True, 0) row2_onoff = Gtk.HBox(False, 2) row2_onoff.pack_start(Gtk.Label(), True, True, 0) row2_onoff.pack_start(c_box_2, False, False, 0) row2_onoff.pack_start(Gtk.Label(), True, True, 0) vbox_onoff = Gtk.VBox(False, 2) vbox_onoff.pack_start(row_proxy_status, False, False, 0) vbox_onoff.pack_start(row_proxy_mode, False, False, 0) vbox_onoff.pack_start(guiutils.pad_label(12, 12), False, False, 0) vbox_onoff.pack_start(self.convert_progress_bar, False, False, 0) vbox_onoff.pack_start(row2_onoff, False, False, 0) panel_onoff = guiutils.get_named_frame(_("Project Proxy Mode"), vbox_onoff) # Pane vbox = Gtk.VBox(False, 2) vbox.pack_start(panel_encoding, False, False, 0) vbox.pack_start(panel_onoff, False, False, 0) guiutils.set_margins(vbox, 8, 12, 12, 12) self.dialog.vbox.pack_start(vbox, True, True, 0) dialogutils.set_outer_margins(self.dialog.vbox) self.dialog.connect('response', dialogutils.dialog_destroy) self.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 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) 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) if editorstate.SCREEN_HEIGHT < 1023: stack_buttons_box = Gtk.HBox(False, 1) stack_buttons_box.pack_start(widgets.del_effect_b, True, True, 0) stack_buttons_box.pack_start(widgets.toggle_all, False, False, 0) stack_buttons_box.pack_start(guiutils.pad_label(74, 10), False, False, 0) guiutils.set_margins(stack_buttons_box, 4, 4, 0, 0) stack_vbox = Gtk.VBox(False, 2) stack_vbox.pack_start(stack_buttons_box, False, False, 0) stack_vbox.pack_start(effect_stack, True, True, 0) add_buttons_box = Gtk.HBox(True, 1) add_buttons_box.pack_start(widgets.add_effect_b, True, True, 0) add_buttons_box.pack_start(Gtk.Label(), True, True, 0) guiutils.set_margins(add_buttons_box, 4, 4, 0, 0) groups_vbox = Gtk.VBox(False, 2) groups_vbox.pack_start(add_buttons_box, False, False, 0) groups_vbox.pack_start(combo_row, False, False, 0) groups_vbox.pack_start(effects_list_view, True, True, 0) notebook = Gtk.Notebook() notebook.append_page(stack_vbox, Gtk.Label(label=_("Stack"))) notebook.append_page(groups_vbox, Gtk.Label(label=_("Filters"))) effects_vbox.pack_start(notebook, True, True, 0) else: 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) 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_media_log_events_panel(events_list_view): global widgets actions_pixbuf = gtk.gdk.pixbuf_new_from_file(respaths.IMAGE_PATH + "media_log_action.png") group_actions_menu = guicomponents.PressLaunch(_group_action_pressed, actions_pixbuf, 38, 22) star_check = gtk.CheckButton() star_check.set_active(True) star_check.connect("clicked", lambda w: media_log_filtering_changed()) widgets.star_check = star_check star_label = gtk.Image() star_label.set_from_file(respaths.IMAGE_PATH + "star.png") star_not_active_check = gtk.CheckButton() star_not_active_check.set_active(True) star_not_active_check.connect("clicked", lambda w: media_log_filtering_changed()) widgets.star_not_active_check = star_not_active_check star_not_active_label = gtk.Image() star_not_active_label.set_from_file(respaths.IMAGE_PATH + "star_not_active.png") star_button = gtk.Button() star_button.set_image( gtk.image_new_from_file(respaths.IMAGE_PATH + "star.png")) star_button.connect("clicked", lambda w: media_log_star_button_pressed()) no_star_button = gtk.Button() no_star_button.set_image( gtk.image_new_from_file(respaths.IMAGE_PATH + "star_not_active.png")) no_star_button.connect("clicked", lambda w: media_log_no_star_button_pressed()) widgets.group_box = gtk.HBox() _create_group_select() widgets.group_view_select.set_active(0) row1 = gtk.HBox() row1.pack_start(guiutils.get_pad_label(6, 12), False, True, 0) row1.pack_start(group_actions_menu.widget, False, True, 0) row1.pack_start(guiutils.get_pad_label(6, 12), False, True, 0) row1.pack_start(widgets.group_box, False, True, 0) row1.pack_start(guiutils.get_pad_label(6, 12), False, True, 0) row1.pack_start(star_check, False, True, 0) row1.pack_start(star_label, False, True, 0) row1.pack_start(guiutils.get_pad_label(6, 12), False, True, 0) row1.pack_start(star_not_active_check, False, True, 0) row1.pack_start(star_not_active_label, False, True, 0) row1.pack_start(guiutils.pad_label(12, 12), False, False, 0) row1.pack_start(star_button, False, True, 0) row1.pack_start(no_star_button, False, True, 0) row1.pack_start(gtk.Label(), True, True, 0) widgets.log_range = gtk.Button() widgets.log_range.set_image( gtk.image_new_from_file(respaths.IMAGE_PATH + "log_range.png")) widgets.log_range.set_size_request(80, 30) widgets.log_range.connect("clicked", lambda w: log_range_clicked()) delete_button = gtk.Button() delete_button.set_image( gtk.image_new_from_file(respaths.IMAGE_PATH + "delete_log_range.png")) delete_button.set_size_request(80, 30) delete_button.connect("clicked", lambda w: delete_selected()) use_comments_label = gtk.Label(_("Use Comments as Clip Names")) use_comments_check = gtk.CheckButton() use_comments_check.set_active(False) widgets.use_comments_check = use_comments_check insert_displayed = gtk.Button() insert_displayed.set_image( gtk.image_new_from_file(respaths.IMAGE_PATH + "insert_media_log.png")) insert_displayed.set_size_request(80, 22) insert_displayed.connect("clicked", lambda w: insert_selected_log_events()) append_displayed = gtk.Button() append_displayed.set_image( gtk.image_new_from_file(respaths.IMAGE_PATH + "append_media_log.png")) append_displayed.set_size_request(80, 22) append_displayed.connect("clicked", lambda w: append_log_events()) row2 = gtk.HBox() row2.pack_start(widgets.log_range, False, True, 0) row2.pack_start(delete_button, False, True, 0) row2.pack_start(gtk.Label(), True, True, 0) row2.pack_start(use_comments_label, False, True, 0) row2.pack_start(use_comments_check, False, True, 0) row2.pack_start(gtk.Label(), True, True, 0) row2.pack_start(insert_displayed, False, True, 0) row2.pack_start(append_displayed, False, True, 0) panel = gtk.VBox() panel.pack_start(row1, False, True, 0) panel.pack_start(events_list_view, True, True, 0) panel.pack_start(row2, False, True, 0) panel.set_size_request(400, 200) star_check.set_tooltip_text(_("Display starred ranges")) star_not_active_check.set_tooltip_text(_("Display non-starred ranges")) star_button.set_tooltip_text(_("Set selected ranges starred")) no_star_button.set_tooltip_text(_("Set selected ranges non-starred")) widgets.log_range.set_tooltip_text(_("Log current marked range")) delete_button.set_tooltip_text(_("Delete selected ranges")) insert_displayed.set_tooltip_text(_("Insert selected ranges on Timeline")) append_displayed.set_tooltip_text(_("Append displayed ranges on Timeline")) dnd.connect_range_log(events_list_view.treeview) return panel
def __init__(self, kf_editor, editor_widgets, value_labels ): # kf_editor is keyframeeditor.RotoMaskKeyFrameEditor GObject.GObject.__init__(self) self.set_title(_("RotoMaskEditor")) self.connect("delete-event", lambda w, e: close_rotomask()) if editorstate.screen_size_small_height() == True: global TEXT_LAYER_LIST_HEIGHT, TEXT_VIEW_HEIGHT, VIEW_EDITOR_HEIGHT TEXT_LAYER_LIST_HEIGHT = 150 TEXT_VIEW_HEIGHT = 180 VIEW_EDITOR_HEIGHT = 450 if editorstate.screen_size_small_height() == True: global VIEW_EDITOR_WIDTH VIEW_EDITOR_WIDTH = 680 self.block_updates = False self.kf_editor = kf_editor self.kf_editor.set_parent_editor(self) self.value_labels = value_labels self.view_editor = vieweditor.ViewEditor(PLAYER().profile, VIEW_EDITOR_WIDTH, VIEW_EDITOR_HEIGHT) self.guides_toggle = vieweditor.GuidesViewToggle(self.view_editor) """ add_b = Gtk.Button(_("Add")) del_b = Gtk.Button(_("Delete")) add_b.connect("clicked", lambda w:self._add_layer_pressed()) del_b.connect("clicked", lambda w:self._del_layer_pressed()) add_del_box = Gtk.HBox() add_del_box = Gtk.HBox(True,1) add_del_box.pack_start(add_b, True, True, 0) add_del_box.pack_start(del_b, True, True, 0) """ self.tc_display = guicomponents.MonitorTCDisplay() self.tc_display.use_internal_frame = True self.tc_display.widget.set_valign(Gtk.Align.CENTER) kf_mode_img = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "roto_kf_edit_mode.png") move_mode_img = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "roto_move_mode.png") self.kf_mode_button = Gtk.ToggleButton() self.kf_mode_button.set_image(kf_mode_img) self.kf_mode_button.set_active( True) # we start with vieweditorlayer.ROTO_POINT_MODE edit mode self.kf_mode_button.connect("clicked", self._kf_mode_clicked) self.move_mode_button = Gtk.ToggleButton() self.move_mode_button.set_image(move_mode_img) self.move_mode_button.connect("clicked", self._move_mode_clicked) self.scale_selector = vieweditor.ScaleSelector(self) self.view_editor.scale_select = self.scale_selector timeline_box = Gtk.HBox() timeline_box.pack_start(self.tc_display.widget, False, False, 0) timeline_box.pack_start(Gtk.Label(), True, True, 0) timeline_box.pack_start(self.kf_mode_button, False, False, 0) timeline_box.pack_start(self.move_mode_button, False, False, 0) timeline_box.pack_start(Gtk.Label(), True, True, 0) timeline_box.pack_start(self.scale_selector, False, False, 0) timeline_box.set_margin_top(6) timeline_box.set_margin_bottom(6) mask_type_label = Gtk.Label(_("Mask Type:")) mask_type_combo_box = Gtk.ComboBoxText() mask_type_combo_box.append_text(_("Curve Mask")) mask_type_combo_box.append_text(_("Line Mask")) mask_type_combo_box.set_active(0) mask_type_combo_box.connect("changed", self.mask_type_selection_changed) #exit_b = guiutils.get_sized_button(_("Cancel Edit"), 150, 32) #exit_b.connect("clicked", lambda w:close_rotomask()) save_rotodata_b = guiutils.get_sized_button(_("Close Tool"), 150, 32) save_rotodata_b.connect("clicked", lambda w: self._save_rotodata_pressed()) prop_editor_row1 = Gtk.HBox() prop_editor_row1.pack_start(Gtk.Label(), True, True, 0) prop_editor_row1.pack_start(mask_type_label, False, False, 0) prop_editor_row1.pack_start(guiutils.pad_label(4, 4), False, False, 0) prop_editor_row1.pack_start(mask_type_combo_box, False, False, 0) prop_editor_row1.pack_start(guiutils.pad_label(24, 20), False, False, 0) prop_editor_row1.pack_start(editor_widgets[0], False, False, 0) prop_editor_row1.pack_start(guiutils.pad_label(24, 20), False, False, 0) prop_editor_row1.pack_start(editor_widgets[3], False, False, 0) prop_editor_row1.pack_start(guiutils.pad_label(24, 20), False, False, 0) prop_editor_row1.pack_start(editor_widgets[4], False, False, 0) prop_editor_row1.pack_start(Gtk.Label(), True, True, 0) prop_editor_row2 = Gtk.HBox() prop_editor_row2.pack_start(Gtk.Label(), True, True, 0) prop_editor_row2.pack_start(editor_widgets[1], False, False, 0) prop_editor_row2.pack_start(guiutils.pad_label(24, 20), False, False, 0) prop_editor_row2.pack_start(editor_widgets[2], False, False, 0) prop_editor_row2.pack_start(Gtk.Label(), True, True, 0) editor_buttons_row = Gtk.HBox() editor_buttons_row.pack_start(Gtk.Label(), True, True, 0) editor_buttons_row.pack_start(guiutils.pad_label(24, 2), False, False, 0) editor_buttons_row.pack_start(guiutils.pad_label(24, 2), False, False, 0) #editor_buttons_row.pack_start(exit_b, False, False, 0) editor_buttons_row.pack_start(save_rotodata_b, False, False, 0) editor_panel = Gtk.VBox() editor_panel.pack_start(self.view_editor, True, True, 0) editor_panel.pack_start(timeline_box, False, False, 0) editor_panel.pack_start(kf_editor, False, False, 0) editor_panel.pack_start(guiutils.pad_label(2, 12), False, False, 0) editor_panel.pack_start(prop_editor_row1, False, False, 0) editor_panel.pack_start(guiutils.pad_label(2, 12), False, False, 0) editor_panel.pack_start(prop_editor_row2, False, False, 0) editor_panel.pack_start(guiutils.pad_label(2, 12), False, False, 0) editor_panel.pack_start(editor_buttons_row, False, False, 0) editor_row = Gtk.HBox() editor_row.pack_start(editor_panel, True, True, 0) alignment = guiutils.set_margins(editor_row, 8, 8, 8, 8) self.add(alignment) self.view_editor.clear_layers() # NOTE: we start with vieweditorlayer.ROTO_POINT_MODE edit mode, see __init()__ self.roto_mask_layer = vieweditorlayer.RotoMaskEditLayer( self.view_editor, self.kf_editor.clip_editor, kf_editor.editable_property, self) self.view_editor.add_layer(self.roto_mask_layer) self.view_editor.activate_layer(0) self.show_all() self.kf_editor.active_keyframe_changed() #self.connect("size-allocate", lambda w, e:self.window_resized()) self.connect("window-state-event", lambda w, e: self.window_resized()) self.connect("key-press-event", self.key_down) self.window_resized()
def effect_selection_changed(use_current_filter_index=False): global keyframe_editor_widgets, current_filter_index # Check we have clip if clip == None: keyframe_editor_widgets = [] show_text_in_edit_area(_("No Clip")) return # Check we actually have filters so we can display one. # If not, clear previous filters from view. if len(clip.filters) == 0: show_text_in_edit_area(_("Clip Has No Filters")) 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 # We need this update on clip load into editor if _clip_has_filter_mask_filter() == True: widgets.add_filter_mask.set_sensitive(False) else: widgets.add_filter_mask.set_sensitive(True) 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 # use_current_filter_index == False is used when user changes edited filter or clip. if use_current_filter_index == True: filter_index = current_filter_index filter_object = clip.filters[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) or (editor_type == propertyeditorbuilder.FILTER_RECT_GEOM_EDITOR)): 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) 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 __init__(self, kf_editor, property_editor_widgets_create_func, value_labels): # kf_editor is keyframeeditor.RotoMaskKeyFrameEditor GObject.GObject.__init__(self) self.set_modal(True) self.set_transient_for(gui.editor_window.window) self.set_title(_("RotoMaskEditor")) self.connect("delete-event", lambda w, e:close_rotomask()) if editorstate.screen_size_small_height() == True: global TEXT_LAYER_LIST_HEIGHT, TEXT_VIEW_HEIGHT, VIEW_EDITOR_HEIGHT TEXT_LAYER_LIST_HEIGHT = 150 TEXT_VIEW_HEIGHT = 180 VIEW_EDITOR_HEIGHT = 450 if editorstate.screen_size_small_height() == True: global VIEW_EDITOR_WIDTH VIEW_EDITOR_WIDTH = 680 editor_widgets = property_editor_widgets_create_func() self.block_updates = False self.kf_editor = kf_editor self.kf_editor.set_parent_editor(self) self.value_labels = value_labels self.view_editor = vieweditor.ViewEditor(PLAYER().profile, VIEW_EDITOR_WIDTH, VIEW_EDITOR_HEIGHT) self.view_editor.draw_safe_area = False self.tc_display = guicomponents.MonitorTCDisplay() self.tc_display.use_internal_frame = True self.tc_display.widget.set_valign(Gtk.Align.CENTER) kf_mode_img = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "roto_kf_edit_mode.png") move_mode_img = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "roto_move_mode.png") self.kf_mode_button = Gtk.ToggleButton() self.kf_mode_button.set_image(kf_mode_img) self.kf_mode_button.set_active(True) # we start with vieweditorlayer.ROTO_POINT_MODE edit mode self.kf_mode_button.connect("clicked", self._kf_mode_clicked) self.move_mode_button = Gtk.ToggleButton() self.move_mode_button.set_image(move_mode_img) self.move_mode_button.connect("clicked", self._move_mode_clicked) self.scale_selector = vieweditor.ScaleSelector(self) self.view_editor.scale_select = self.scale_selector timeline_box = Gtk.HBox() timeline_box.pack_start(self.tc_display.widget, False, False, 0) timeline_box.pack_start(Gtk.Label(), True, True, 0) timeline_box.pack_start(self.kf_mode_button, False, False, 0) timeline_box.pack_start(self.move_mode_button, False, False, 0) timeline_box.pack_start(Gtk.Label(), True, True, 0) timeline_box.pack_start(self.scale_selector, False, False, 0) timeline_box.set_margin_top(6) timeline_box.set_margin_bottom(6) mask_type_label = Gtk.Label(_("Mask Type:")) mask_type_combo_box = Gtk.ComboBoxText() mask_type_combo_box.append_text(_("Curve Mask")) mask_type_combo_box.append_text(_("Line Mask")) mask_type_combo_box.set_active(0) mask_type_combo_box.connect("changed", self.mask_type_selection_changed) allow_adding_check = Gtk.CheckButton() allow_adding_check.set_active(False) # This shows value of self.roto_mask_layer.allow_adding_points, False is default allow_adding_check.connect("toggled", self.allow_adding_toggled) allow_adding_label = Gtk.Label(_("Allow to add points to closed masks")) save_rotodata_b = guiutils.get_sized_button(_("Close Tool"), 150, 32) save_rotodata_b.connect("clicked", lambda w:self._save_rotodata_pressed()) prop_editor_row1 = Gtk.HBox() prop_editor_row1.pack_start(Gtk.Label(), True, True, 0) prop_editor_row1.pack_start(mask_type_label, False, False, 0) prop_editor_row1.pack_start(guiutils.pad_label(4, 4), False, False, 0) prop_editor_row1.pack_start(mask_type_combo_box, False, False, 0) prop_editor_row1.pack_start(guiutils.pad_label(24, 20), False, False, 0) prop_editor_row1.pack_start(editor_widgets[0], False, False, 0) prop_editor_row1.pack_start(guiutils.pad_label(24, 20), False, False, 0) prop_editor_row1.pack_start(editor_widgets[3], False, False, 0) prop_editor_row1.pack_start(guiutils.pad_label(24, 20), False, False, 0) prop_editor_row1.pack_start(editor_widgets[4], False, False, 0) prop_editor_row1.pack_start(Gtk.Label(), True, True, 0) prop_editor_row2 = Gtk.HBox() prop_editor_row2.pack_start(Gtk.Label(), True, True, 0) prop_editor_row2.pack_start(editor_widgets[1], False, False, 0) prop_editor_row2.pack_start(guiutils.pad_label(24, 20), False, False, 0) prop_editor_row2.pack_start(editor_widgets[2], False, False, 0) prop_editor_row2.pack_start(Gtk.Label(), True, True, 0) editor_buttons_row = Gtk.HBox() editor_buttons_row.pack_start(allow_adding_check, False, False, 0) editor_buttons_row.pack_start(guiutils.pad_label(4, 2), False, False, 0) editor_buttons_row.pack_start(allow_adding_label, False, False, 0) editor_buttons_row.pack_start(Gtk.Label(), True, True, 0) editor_buttons_row.pack_start(save_rotodata_b, False, False, 0) editor_panel = Gtk.VBox() editor_panel.pack_start(self.view_editor, True, True, 0) editor_panel.pack_start(timeline_box, False, False, 0) editor_panel.pack_start(kf_editor, False, False, 0) editor_panel.pack_start(guiutils.pad_label(2, 12), False, False, 0) editor_panel.pack_start(prop_editor_row1, False, False, 0) editor_panel.pack_start(guiutils.pad_label(2, 12), False, False, 0) editor_panel.pack_start(prop_editor_row2, False, False, 0) editor_panel.pack_start(guiutils.pad_label(2, 12), False, False, 0) editor_panel.pack_start(editor_buttons_row, False, False, 0) editor_row = Gtk.HBox() editor_row.pack_start(editor_panel, True, True, 0) alignment = guiutils.set_margins(editor_row, 8,8,8,8) self.add(alignment) self.view_editor.clear_layers() # NOTE: we start with vieweditorlayer.ROTO_POINT_MODE edit mode, see __init()__ self.roto_mask_layer = vieweditorlayer.RotoMaskEditLayer(self.view_editor, self.kf_editor.clip_editor, kf_editor.editable_property, self) self.view_editor.add_layer(self.roto_mask_layer) self.view_editor.activate_layer(0) self.show_all() self.kf_editor.active_keyframe_changed() self.connect("size-allocate", lambda w, e:self.window_resized()) self.connect("window-state-event", lambda w, e:self.window_resized()) self.connect("key-press-event", self.key_down) self.window_resized()
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 effect_selection_changed(use_current_filter_index=False): global keyframe_editor_widgets # Check we have clip if clip == None: keyframe_editor_widgets = [] show_text_in_edit_area(_("No Clip")) return # Check we actually have filters so we can display one. # If not, clear previous filters from view. if len(clip.filters) == 0: show_text_in_edit_area(_("Clip Has No Filters")) 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 # use_current_filter_index == False is used when user changes edited filter or clip. if use_current_filter_index == True: filter_index = current_filter_index 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) 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 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 __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 get_media_log_events_panel(events_list_view): global widgets actions_surface = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "media_log_action.png") group_actions_menu = guicomponents.PressLaunch(_group_action_pressed, actions_surface, 38, 22) star_check = Gtk.CheckButton() star_check.set_active(True) star_check.connect("clicked", lambda w:media_log_filtering_changed()) widgets.star_check = star_check star_label = Gtk.Image() star_label.set_from_file(respaths.IMAGE_PATH + "star.png") star_not_active_check = Gtk.CheckButton() star_not_active_check.set_active(True) star_not_active_check.connect("clicked", lambda w:media_log_filtering_changed()) widgets.star_not_active_check = star_not_active_check star_not_active_label = Gtk.Image() star_not_active_label.set_from_file(respaths.IMAGE_PATH + "star_not_active.png") star_button = Gtk.Button() star_button.set_image(Gtk.Image.new_from_file(respaths.IMAGE_PATH + "star.png")) star_button.connect("clicked", lambda w: media_log_star_button_pressed()) no_star_button = Gtk.Button() no_star_button.set_image(Gtk.Image.new_from_file(respaths.IMAGE_PATH + "star_not_active.png")) no_star_button.connect("clicked", lambda w: media_log_no_star_button_pressed()) widgets.group_box = Gtk.HBox() _create_group_select() widgets.group_view_select.set_active(0) row1 = Gtk.HBox() row1.pack_start(guiutils.get_pad_label(6, 12), False, True, 0) row1.pack_start(group_actions_menu.widget, False, True, 0) row1.pack_start(guiutils.get_pad_label(6, 12), False, True, 0) row1.pack_start(widgets.group_box, False, True, 0) row1.pack_start(guiutils.get_pad_label(6, 12), False, True, 0) row1.pack_start(star_check, False, True, 0) row1.pack_start(star_label, False, True, 0) row1.pack_start(guiutils.get_pad_label(6, 12), False, True, 0) row1.pack_start(star_not_active_check, False, True, 0) row1.pack_start(star_not_active_label, False, True, 0) row1.pack_start(guiutils.pad_label(12, 12), False, False, 0) row1.pack_start(star_button, False, True, 0) row1.pack_start(no_star_button, False, True, 0) row1.pack_start(Gtk.Label(), True, True, 0) widgets.log_range = Gtk.Button() widgets.log_range.set_image(Gtk.Image.new_from_file(respaths.IMAGE_PATH + "log_range.png")) widgets.log_range.set_size_request(80, 30) widgets.log_range.connect("clicked", lambda w:log_range_clicked()) delete_button = Gtk.Button() delete_button.set_image(Gtk.Image.new_from_file(respaths.IMAGE_PATH + "delete_log_range.png")) delete_button.set_size_request(80, 30) delete_button.connect("clicked", lambda w:delete_selected()) use_comments_label = Gtk.Label(label=_("Use Comments as Clip Names")) use_comments_check = Gtk.CheckButton() use_comments_check.set_active(False) widgets.use_comments_check = use_comments_check insert_displayed = Gtk.Button() insert_displayed.set_image(Gtk.Image.new_from_file(respaths.IMAGE_PATH + "insert_media_log.png")) insert_displayed.set_size_request(80, 22) insert_displayed.connect("clicked", lambda w:insert_selected_log_events()) append_displayed = Gtk.Button() append_displayed.set_image(Gtk.Image.new_from_file(respaths.IMAGE_PATH + "append_media_log.png")) append_displayed.set_size_request(80, 22) append_displayed.connect("clicked", lambda w:append_log_events()) row2 = Gtk.HBox() row2.pack_start(widgets.log_range, False, True, 0) row2.pack_start(delete_button, False, True, 0) row2.pack_start(Gtk.Label(), True, True, 0) row2.pack_start(use_comments_label, False, True, 0) row2.pack_start(use_comments_check, False, True, 0) row2.pack_start(Gtk.Label(), True, True, 0) row2.pack_start(insert_displayed, False, True, 0) row2.pack_start(append_displayed, False, True, 0) panel = Gtk.VBox() panel.pack_start(row1, False, True, 0) panel.pack_start(events_list_view, True, True, 0) panel.pack_start(row2, False, True, 0) panel.set_size_request(400, 10) star_check.set_tooltip_text(_("Display starred ranges")) star_not_active_check.set_tooltip_text(_("Display non-starred ranges")) star_button.set_tooltip_text(_("Set selected ranges starred")) no_star_button.set_tooltip_text(_("Set selected ranges non-starred")) widgets.log_range.set_tooltip_text(_("Log current marked range")) delete_button.set_tooltip_text(_("Delete selected ranges")) insert_displayed.set_tooltip_text(_("Insert selected ranges on Timeline")) append_displayed.set_tooltip_text(_("Append displayed ranges on Timeline")) dnd.connect_range_log(events_list_view.treeview) return panel
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 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 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.set_title(_("Titler")) self.connect("delete-event", lambda w, e: close_titler()) if editorstate.screen_size_small_height() == True: global TEXT_LAYER_LIST_HEIGHT, TEXT_VIEW_HEIGHT, VIEW_EDITOR_HEIGHT TEXT_LAYER_LIST_HEIGHT = 150 TEXT_VIEW_HEIGHT = 180 VIEW_EDITOR_HEIGHT = 450 if editorstate.screen_size_small_height() == True: global VIEW_EDITOR_WIDTH VIEW_EDITOR_WIDTH = 680 self.block_updates = False self.view_editor = vieweditor.ViewEditor(PLAYER().profile, VIEW_EDITOR_WIDTH, VIEW_EDITOR_HEIGHT) self.view_editor.active_layer_changed_listener = self.active_layer_changed self.guides_toggle = vieweditor.GuidesViewToggle(self.view_editor) add_b = Gtk.Button(_("Add")) del_b = Gtk.Button(_("Delete")) add_b.connect("clicked", lambda w: self._add_layer_pressed()) del_b.connect("clicked", lambda w: self._del_layer_pressed()) add_del_box = Gtk.HBox() add_del_box = Gtk.HBox(True, 1) add_del_box.pack_start(add_b, True, True, 0) add_del_box.pack_start(del_b, True, True, 0) center_h_icon = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "center_horizontal.png") center_v_icon = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "center_vertical.png") center_h = Gtk.Button() center_h.set_image(center_h_icon) center_h.connect("clicked", lambda w: self._center_h_pressed()) center_v = Gtk.Button() center_v.set_image(center_v_icon) center_v.connect("clicked", lambda w: self._center_v_pressed()) self.layer_list = TextLayerListView(self._layer_selection_changed, self._layer_visibility_toggled) self.layer_list.set_size_request(TEXT_LAYER_LIST_WIDTH, TEXT_LAYER_LIST_HEIGHT) self.text_view = Gtk.TextView() self.text_view.set_pixels_above_lines(2) self.text_view.set_left_margin(2) self.text_view.get_buffer().connect("changed", self._text_changed) self.sw = Gtk.ScrolledWindow() self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.ALWAYS) self.sw.add(self.text_view) self.sw.set_size_request(TEXT_VIEW_WIDTH, TEXT_VIEW_HEIGHT) scroll_frame = Gtk.Frame() scroll_frame.add(self.sw) self.tc_display = guicomponents.MonitorTCDisplay() self.tc_display.use_internal_frame = True self.tc_display.widget.set_valign(Gtk.Align.CENTER) self.pos_bar = positionbar.PositionBar() self.pos_bar.set_listener(self.position_listener) self.pos_bar.update_display_from_producer(PLAYER().producer) self.pos_bar.mouse_release_listener = self.pos_bar_mouse_released 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_valign(Gtk.Align.CENTER) font_map = PangoCairo.font_map_get_default() unsorted_families = font_map.list_families() if len(unsorted_families) == 0: print "No font families found in system! Titler will not work." self.font_families = sorted(unsorted_families, key=lambda family: family.get_name()) self.font_family_indexes_for_name = {} combo = Gtk.ComboBoxText() indx = 0 for family in self.font_families: combo.append_text(family.get_name()) self.font_family_indexes_for_name[family.get_name()] = indx indx += 1 combo.set_active(0) self.font_select = combo self.font_select.connect("changed", self._edit_value_changed) adj = Gtk.Adjustment(float(DEFAULT_FONT_SIZE), float(1), float(300), float(1)) self.size_spin = Gtk.SpinButton() self.size_spin.set_adjustment(adj) self.size_spin.connect("changed", self._edit_value_changed) self.size_spin.connect("key-press-event", self._key_pressed_on_widget) font_main_row = Gtk.HBox() font_main_row.pack_start(self.font_select, True, True, 0) font_main_row.pack_start(guiutils.pad_label(5, 5), False, False, 0) font_main_row.pack_start(self.size_spin, False, False, 0) self.bold_font = Gtk.ToggleButton() self.italic_font = Gtk.ToggleButton() bold_icon = Gtk.Image.new_from_stock(Gtk.STOCK_BOLD, Gtk.IconSize.BUTTON) italic_icon = Gtk.Image.new_from_stock(Gtk.STOCK_ITALIC, Gtk.IconSize.BUTTON) self.bold_font.set_image(bold_icon) self.italic_font.set_image(italic_icon) self.bold_font.connect("clicked", self._edit_value_changed) self.italic_font.connect("clicked", self._edit_value_changed) self.left_align = Gtk.RadioButton(None) self.center_align = Gtk.RadioButton.new_from_widget(self.left_align) self.right_align = Gtk.RadioButton.new_from_widget(self.left_align) left_icon = Gtk.Image.new_from_stock(Gtk.STOCK_JUSTIFY_LEFT, Gtk.IconSize.BUTTON) center_icon = Gtk.Image.new_from_stock(Gtk.STOCK_JUSTIFY_CENTER, Gtk.IconSize.BUTTON) right_icon = Gtk.Image.new_from_stock(Gtk.STOCK_JUSTIFY_RIGHT, Gtk.IconSize.BUTTON) self.left_align.set_image(left_icon) self.center_align.set_image(center_icon) self.right_align.set_image(right_icon) self.left_align.set_mode(False) self.center_align.set_mode(False) self.right_align.set_mode(False) self.left_align.connect("clicked", self._edit_value_changed) self.center_align.connect("clicked", self._edit_value_changed) self.right_align.connect("clicked", self._edit_value_changed) self.color_button = Gtk.ColorButton.new_with_rgba( Gdk.RGBA(red=1.0, green=1.0, blue=1.0, alpha=1.0)) self.color_button.connect("color-set", self._edit_value_changed) buttons_box = Gtk.HBox() buttons_box.pack_start(Gtk.Label(), True, True, 0) buttons_box.pack_start(self.bold_font, False, False, 0) buttons_box.pack_start(self.italic_font, False, False, 0) buttons_box.pack_start(guiutils.pad_label(5, 5), False, False, 0) buttons_box.pack_start(self.left_align, False, False, 0) buttons_box.pack_start(self.center_align, False, False, 0) buttons_box.pack_start(self.right_align, False, False, 0) buttons_box.pack_start(guiutils.pad_label(5, 5), False, False, 0) buttons_box.pack_start(self.color_button, False, False, 0) buttons_box.pack_start(Gtk.Label(), True, True, 0) load_layers = Gtk.Button(_("Load Layers")) load_layers.connect("clicked", lambda w: self._load_layers_pressed()) save_layers = Gtk.Button(_("Save Layers")) save_layers.connect("clicked", lambda w: self._save_layers_pressed()) clear_layers = Gtk.Button(_("Clear All")) clear_layers.connect("clicked", lambda w: self._clear_layers_pressed()) layers_save_buttons_row = Gtk.HBox() layers_save_buttons_row.pack_start(save_layers, False, False, 0) layers_save_buttons_row.pack_start(load_layers, False, False, 0) layers_save_buttons_row.pack_start(Gtk.Label(), True, True, 0) adj = Gtk.Adjustment(float(0), float(0), float(3000), float(1)) self.x_pos_spin = Gtk.SpinButton() self.x_pos_spin.set_adjustment(adj) self.x_pos_spin.connect("changed", self._position_value_changed) self.x_pos_spin.connect("key-press-event", self._key_pressed_on_widget) adj = Gtk.Adjustment(float(0), float(0), float(3000), float(1)) self.y_pos_spin = Gtk.SpinButton() self.y_pos_spin.set_adjustment(adj) self.y_pos_spin.connect("changed", self._position_value_changed) self.y_pos_spin.connect("key-press-event", self._key_pressed_on_widget) adj = Gtk.Adjustment(float(0), float(0), float(3000), float(1)) self.rotation_spin = Gtk.SpinButton() self.rotation_spin.set_adjustment(adj) self.rotation_spin.connect("changed", self._position_value_changed) self.rotation_spin.connect("key-press-event", self._key_pressed_on_widget) undo_pos = Gtk.Button() undo_icon = Gtk.Image.new_from_stock(Gtk.STOCK_UNDO, Gtk.IconSize.BUTTON) undo_pos.set_image(undo_icon) next_icon = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "next_frame_s.png") prev_icon = Gtk.Image.new_from_file(respaths.IMAGE_PATH + "prev_frame_s.png") prev_frame = Gtk.Button() prev_frame.set_image(prev_icon) prev_frame.connect("clicked", lambda w: self._prev_frame_pressed()) next_frame = Gtk.Button() next_frame.set_image(next_icon) next_frame.connect("clicked", lambda w: self._next_frame_pressed()) self.scale_selector = vieweditor.ScaleSelector(self) timeline_box = Gtk.HBox() timeline_box.pack_start(self.tc_display.widget, False, False, 0) timeline_box.pack_start(guiutils.pad_label(12, 12), False, False, 0) timeline_box.pack_start(pos_bar_frame, True, True, 0) timeline_box.pack_start(guiutils.pad_label(12, 12), False, False, 0) timeline_box.pack_start(prev_frame, False, False, 0) timeline_box.pack_start(next_frame, False, False, 0) timeline_box.pack_start(self.guides_toggle, False, False, 0) timeline_box.pack_start(self.scale_selector, False, False, 0) timeline_box.set_margin_top(6) timeline_box.set_margin_bottom(6) positions_box = Gtk.HBox() positions_box.pack_start(Gtk.Label(), True, True, 0) positions_box.pack_start(Gtk.Label(label="X:"), False, False, 0) positions_box.pack_start(self.x_pos_spin, False, False, 0) positions_box.pack_start(guiutils.pad_label(40, 5), False, False, 0) positions_box.pack_start(Gtk.Label(label="Y:"), False, False, 0) positions_box.pack_start(self.y_pos_spin, False, False, 0) #positions_box.pack_start(Gtk.Label(label=_("Angle")), False, False, 0) #positions_box.pack_start(self.rotation_spin, False, False, 0) positions_box.pack_start(guiutils.pad_label(40, 5), False, False, 0) positions_box.pack_start(center_h, False, False, 0) positions_box.pack_start(center_v, False, False, 0) positions_box.pack_start(Gtk.Label(), True, True, 0) controls_panel_1 = Gtk.VBox() controls_panel_1.pack_start(add_del_box, False, False, 0) controls_panel_1.pack_start(self.layer_list, False, False, 0) controls_panel_1.pack_start(layers_save_buttons_row, False, False, 0) controls_panel_2 = Gtk.VBox() controls_panel_2.pack_start(scroll_frame, True, True, 0) controls_panel_2.pack_start(font_main_row, False, False, 0) controls_panel_2.pack_start(buttons_box, False, False, 0) controls_panel = Gtk.VBox() controls_panel.pack_start( guiutils.get_named_frame(_("Active Layer"), controls_panel_2), True, True, 0) controls_panel.pack_start( guiutils.get_named_frame(_("Layers"), controls_panel_1), False, False, 0) view_editor_editor_buttons_row = Gtk.HBox() view_editor_editor_buttons_row.pack_start(positions_box, False, False, 0) view_editor_editor_buttons_row.pack_start(Gtk.Label(), True, True, 0) keep_label = Gtk.Label(label=_("Keep Layers When Closed")) self.keep_layers_check = Gtk.CheckButton() self.keep_layers_check.set_active(_keep_titler_data) self.keep_layers_check.connect("toggled", self._keep_layers_toggled) open_label = Gtk.Label(label=_("Open Saved Title In Bin")) self.open_in_current_check = Gtk.CheckButton() self.open_in_current_check.set_active(_open_saved_in_bin) self.open_in_current_check.connect("toggled", self._open_saved_in_bin) exit_b = guiutils.get_sized_button(_("Close"), 150, 32) exit_b.connect("clicked", lambda w: close_titler()) save_titles_b = guiutils.get_sized_button(_("Save Title Graphic"), 150, 32) save_titles_b.connect("clicked", lambda w: self._save_title_pressed()) editor_buttons_row = Gtk.HBox() editor_buttons_row.pack_start(Gtk.Label(), True, True, 0) editor_buttons_row.pack_start(keep_label, False, False, 0) editor_buttons_row.pack_start(self.keep_layers_check, False, False, 0) editor_buttons_row.pack_start(guiutils.pad_label(24, 2), False, False, 0) editor_buttons_row.pack_start(open_label, False, False, 0) editor_buttons_row.pack_start(self.open_in_current_check, False, False, 0) editor_buttons_row.pack_start(guiutils.pad_label(24, 2), False, False, 0) editor_buttons_row.pack_start(exit_b, False, False, 0) editor_buttons_row.pack_start(save_titles_b, False, False, 0) editor_panel = Gtk.VBox() editor_panel.pack_start(self.view_editor, True, True, 0) editor_panel.pack_start(timeline_box, False, False, 0) editor_panel.pack_start( guiutils.get_in_centering_alignment( view_editor_editor_buttons_row), False, False, 0) editor_panel.pack_start(guiutils.pad_label(2, 24), True, True, 0) editor_panel.pack_start(editor_buttons_row, False, False, 0) editor_row = Gtk.HBox() editor_row.pack_start(controls_panel, False, False, 0) editor_row.pack_start(editor_panel, True, True, 0) alignment = guiutils.set_margins(editor_row, 8, 8, 8, 8) self.add(alignment) self.layer_list.fill_data_model() self._update_gui_with_active_layer_data() self.show_all() self.connect("size-allocate", lambda w, e: self.window_resized()) self.connect("window-state-event", lambda w, e: self.window_resized())
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()