def get_project_info_panel(): project_name_label = Gtk.Label(label=PROJECT().name) name_row = guiutils.get_left_justified_box([project_name_label]) name_panel = guiutils.get_named_frame(_("Name"), name_row, 4) profile = PROJECT().profile desc_label = Gtk.Label(label=profile.description()) info_box = guicomponents.get_profile_info_small_box(profile) vbox = Gtk.VBox() vbox.pack_start(guiutils.get_left_justified_box([desc_label]), False, True, 0) vbox.pack_start(info_box, False, True, 0) profile_panel = guiutils.get_named_frame(_("Profile"), vbox, 4) events_list = ProjectEventListView() events_list.fill_data_model() events_panel = guiutils.get_named_frame(_("Project Events"), events_list, 4) project_info_vbox = Gtk.VBox() project_info_vbox.pack_start(name_panel, False, True, 0) project_info_vbox.pack_start(profile_panel, False, True, 0) project_info_vbox.set_size_request(250, PROJECT_INFO_PANEL_HEIGHT) project_info_hbox = Gtk.HBox() project_info_hbox.pack_start(project_info_vbox, False, False, 0) project_info_hbox.pack_start(events_panel, True, True, 0) widgets.project_name_label = project_name_label widgets.desc_label = desc_label widgets.info_box = info_box widgets.events_list = events_list return project_info_hbox
def update_project_info(): profile = PROJECT().profile widgets.project_name_label.set_markup(guiutils.bold_text(PROJECT().name)) widgets.desc_label.set_text(profile.description()) profile_info_text = guicomponents.get_profile_info_text(profile) widgets.info_box.get_children()[0].set_text(profile_info_text) widgets.events_list.fill_data_model()
def get_top_level_project_info_panel(): project_name_label = Gtk.Label(label=PROJECT().name) name_row = guiutils.get_left_justified_box([project_name_label]) name_panel = guiutils.get_named_frame(_("Project"), name_row, 0, 6, 4, _("A <b>Project</b> contains one or more <b>Sequences</b> of edited media and a collection of media files stored in <b>Bins.</b>")) profile = PROJECT().profile desc_label = Gtk.Label(label=profile.description()) info_box = guicomponents.get_profile_info_small_box(profile) vbox = Gtk.VBox() vbox.pack_start(guiutils.get_left_justified_box([desc_label]), False, True, 0) vbox.pack_start(info_box, False, True, 0) profile_panel = guiutils.get_named_frame(_("Profile"), vbox, 0, 6, 4, _("<b>Profile</b> determines frame rate per second, image size in pixels and pixel aspect ratio for all <b>Sequences</b> in <b>Project</b> .")) events_list = ProjectEventListView() events_list.fill_data_model() events_panel = guiutils.get_named_frame(_("Project Events"), events_list, 0) project_info_vbox = Gtk.VBox() project_info_vbox.pack_start(name_panel, False, True, 0) project_info_vbox.pack_start(profile_panel, False, True, 0) guiutils.set_margins(project_info_vbox, 4,4,4,4) widgets.project_name_label = project_name_label widgets.desc_label = desc_label widgets.info_box = info_box widgets.events_list = events_list return project_info_vbox
def get_project_info_panel(): project_name_label = gtk.Label(PROJECT().name) name_row = guiutils.get_left_justified_box([project_name_label]) name_panel = guiutils.get_named_frame(_("Name"), name_row, 4) profile = PROJECT().profile desc_label = gtk.Label(profile.description()) info_box = guicomponents.get_profile_info_small_box(profile) vbox = gtk.VBox() vbox.pack_start(guiutils.get_left_justified_box([desc_label]), False, True, 0) vbox.pack_start(info_box, False, True, 0) profile_panel = guiutils.get_named_frame(_("Profile"), vbox, 4) events_list = ProjectEventListView() events_list.set_size_request(270, 300) events_list.fill_data_model() events_panel = guiutils.get_named_frame(_("Project Events"), events_list, 4) project_info_vbox = gtk.VBox() project_info_vbox.pack_start(name_panel, False, True, 0) project_info_vbox.pack_start(profile_panel, False, True, 0) project_info_vbox.pack_start(events_panel, True, True, 0) align = gtk.Alignment(0.5, 0.5, 1.0, 1.0) align.set_padding(0, 0, 0, 0) align.add(project_info_vbox) widgets.project_name_label = project_name_label widgets.desc_label = desc_label widgets.info_box = info_box widgets.events_list = events_list return align
def get_top_level_project_info_panel(): project_name_label = Gtk.Label(label=PROJECT().name) name_row = guiutils.get_left_justified_box([project_name_label]) name_panel = guiutils.get_named_frame( _("Project"), name_row, 0, 6, 4, _("A <b>Project</b> contains one or more <b>Sequences</b> of edited media and a collection of media files stored in <b>Bins.</b>" )) profile = PROJECT().profile desc_label = Gtk.Label(label=profile.description()) info_box = guicomponents.get_profile_info_small_box(profile) vbox = Gtk.VBox() vbox.pack_start(guiutils.get_left_justified_box([desc_label]), False, True, 0) vbox.pack_start(info_box, False, True, 0) profile_panel = guiutils.get_named_frame( _("Profile"), vbox, 0, 6, 4, _("<b>Profile</b> determines frame rate per second, image size in pixels and pixel aspect ratio for all <b>Sequences</b> in <b>Project</b> ." )) events_list = ProjectEventListView() events_list.fill_data_model() events_panel = guiutils.get_named_frame(_("Project Events"), events_list, 0) project_info_vbox = Gtk.VBox() project_info_vbox.pack_start(name_panel, False, True, 0) project_info_vbox.pack_start(profile_panel, False, True, 0) guiutils.set_margins(project_info_vbox, 4, 4, 4, 4) widgets.project_name_label = project_name_label widgets.desc_label = desc_label widgets.info_box = info_box widgets.events_list = events_list return project_info_vbox
def _render_reverse_clip_dialog_callback(dialog, response_id, fb_widgets, media_file): if response_id == Gtk.ResponseType.ACCEPT: print("_render_reverse_clip_dialog_callback") # speed, filename folder speed = float(int(fb_widgets.hslider.get_value())) / 100.0 file_name = fb_widgets.file_name.get_text() filenames = fb_widgets.out_folder.get_filenames() folder = filenames[0] write_file = folder + "/" + file_name + fb_widgets.extension_label.get_text( ) if os.path.exists(write_file): primary_txt = _("A File with given path exists!") secondary_txt = _( "It is not allowed to render Motion Files with same paths as existing files.\nSelect another name for file." ) dialogutils.warning_message(primary_txt, secondary_txt, dialog) return # Profile profile_index = fb_widgets.out_profile_combo.get_active() if profile_index == 0: # project_profile is first selection in combo box profile = PROJECT().profile else: profile = mltprofiles.get_profile_for_index(profile_index - 1) profile_desc = profile.description().replace(" ", "_") # Render consumer properties encoding_option_index = fb_widgets.encodings_cb.get_active() quality_option_index = fb_widgets.quality_cb.get_active() # Range range_selection = fb_widgets.render_range.get_active() dialog.destroy() # Create motion producer source_path = media_file.path if media_file.is_proxy_file == True: source_path = media_file.second_file_path motion_producer = mlt.Producer( profile, None, str("timewarp:" + str(speed) + ":" + str(source_path))) # start and end frames start_frame = 0 end_frame = motion_producer.get_length() - 1 render_full_range = True if range_selection == 1: start_frame = int( float(media_file.length - media_file.mark_out - 1) * (1.0 / -speed)) end_frame = int( float(media_file.length - media_file.mark_out + (media_file.mark_out - media_file.mark_in) + 1) * (1.0 / -speed)) + int(1.0 / -speed) if end_frame > motion_producer.get_length() - 1: end_frame = motion_producer.get_length() - 1 if start_frame < 0: start_frame = 0 render_full_range = False # consumer wont stop automatically and needs to stopped explicitly session_id = hashlib.md5(str( os.urandom(32)).encode('utf-8')).hexdigest() args = ("session_id:" + str(session_id), "speed:" + str(speed), "write_file:" + str(write_file).replace(" ", "\ "), "profile_desc:" + str(profile_desc), "encoding_option_index:" + str(encoding_option_index), "quality_option_index:" + str(quality_option_index), "source_path:" + str(source_path).replace(" ", "\ "), "render_full_range:" + str(render_full_range), "start_frame:" + str(start_frame), "end_frame:" + str(end_frame)) job_queue_object = jobs.MotionRenderJobQueueObject( session_id, write_file, args) job_queue_object.add_to_queue() else: dialog.destroy()