def _create_region_editor(clip, editable_properties): aligned = filter(lambda ep: ep.name == "composite.aligned", editable_properties)[0] distort = filter(lambda ep: ep.name == "composite.distort", editable_properties)[0] operator = filter(lambda ep: ep.name == "composite.operator", editable_properties)[0] values = ["over","and","or","xor"] deinterlace = filter(lambda ep: ep.name == "composite.deinterlace", editable_properties)[0] progressive = filter(lambda ep: ep.name == "composite.progressive", editable_properties)[0] force_values = [_("Nothing"),_("Progressive"),_("Deinterlace"),_("Both")] combo_box = Gtk.ComboBoxText() for val in force_values: combo_box.append_text(val) selection = _get_force_combo_index(deinterlace, progressive) combo_box.set_active(selection) combo_box.connect("changed", _compositor_editor_force_combo_box_callback, (deinterlace, progressive)) force_vbox = Gtk.VBox(False, 4) force_vbox.pack_start(Gtk.Label(label=_("Force")), True, True, 0) force_vbox.pack_start(combo_box, True, True, 0) hbox = Gtk.HBox(False, 4) hbox.pack_start(guiutils.get_pad_label(3, 5), False, False, 0) hbox.pack_start(_get_boolean_check_box_button_column(_("Align"), aligned), False, False, 0) hbox.pack_start(_get_boolean_check_box_button_column(_("Distort"), distort), False, False, 0) # THESE ARE DISABLED BECAUSE CHANGING APLHA MODE CAN MAKE PROJECTS UNOPENABLE IF THE AFFECTED # COMPOSITOR IS ON THE FIRST FRAME #hbox.pack_start(Gtk.Label(), True, True, 0) #hbox.pack_start(_get_combo_box_column(_("Alpha"), values, operator), False, False, 0) hbox.pack_start(Gtk.Label(), True, True, 0) hbox.pack_start(force_vbox, False, False, 0) hbox.pack_start(guiutils.get_pad_label(3, 5), False, False, 0) return hbox
def get_compositor_clip_panel(): create_widgets() small = (editorstate.SCREEN_HEIGHT < 1000) compositor_vbox = Gtk.VBox(False, 2) compositor_vbox.pack_start(widgets.compositor_info, False, False, 0) if not small: compositor_vbox.pack_start(guiutils.get_pad_label(5, 24), False, False, 0) compositor_vbox.pack_start(widgets.fade_in_b, False, False, 0) compositor_vbox.pack_start(widgets.fade_in_spin, False, False, 0) if not small: compositor_vbox.pack_start(guiutils.get_pad_label(5, 12), False, False, 0) compositor_vbox.pack_start(widgets.fade_out_b, False, False, 0) compositor_vbox.pack_start(widgets.fade_out_spin, False, False, 0) if not small: compositor_vbox.pack_start(guiutils.get_pad_label(5, 24), False, False, 0) compositor_vbox.pack_start(Gtk.Label(), True, True, 0) compositor_vbox.pack_start(widgets.reset_b, False, False, 0) if not small: compositor_vbox.pack_start(widgets.delete_b, False, False, 0) compositor_vbox.pack_start(guiutils.get_pad_label(5, 3), False, False, 0) set_enabled(False) return compositor_vbox
def fill_with_COMPONETS_CENTERED_pattern(buttons_row, window): global w w = window buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start(w.worflow_launch.widget, False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(7, MIDDLE_ROW_HEIGHT), False, True, 0) buttons_row.pack_start(w.big_TC, False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(7, MIDDLE_ROW_HEIGHT), False, True, 0) #### NOTE!!!!!! THIS DETERMINES THE HEIGHT OF MIDDLE ROW buttons_row.pack_start(w.tool_selector.widget, False, True, 0) if editorstate.SCREEN_WIDTH > NORMAL_WIDTH: buttons_row.pack_start(guiutils.get_pad_label(10, 10), False, True, 0) buttons_row.pack_start(_get_tools_buttons(), False, True, 0) #buttons_row.pack_start(guiutils.get_pad_label(120, 10), False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(20, 10), False, True, 0) else: buttons_row.pack_start(guiutils.get_pad_label(20, 10), False, True, 0) buttons_row.pack_start(_get_undo_buttons_panel(), False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(20, 10), False, True, 0) buttons_row.pack_start(_get_zoom_buttons_panel(),False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(20, 10), False, True, 0) buttons_row.pack_start(_get_edit_buttons_panel(),False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(20, 10), False, True, 0) buttons_row.pack_start(_get_edit_buttons_2_panel(),False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(20, 10), False, True, 0) buttons_row.pack_start(_get_edit_buttons_3_panel(),False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(20, 10), False, True, 0) buttons_row.pack_start(_get_monitor_insert_buttons(), False, True, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0)
def fill_with_TC_LEFT_pattern(buttons_row, window): global w w = window buttons_row.pack_start(w.worflow_launch.widget, False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(7, MIDDLE_ROW_HEIGHT), False, True, 0) buttons_row.pack_start(w.big_TC, False, True, 0) buttons_row.pack_start( guiutils.get_pad_label(7, MIDDLE_ROW_HEIGHT), False, True, 0) #### NOTE!!!!!! THIS DETERMINES THE HEIGHT OF MIDDLE ROW buttons_row.pack_start(w.tool_selector.widget, False, True, 0) if editorstate.SCREEN_WIDTH > 1279: buttons_row.pack_start(guiutils.get_pad_label(10, 10), False, True, 0) buttons_row.pack_start(_get_tools_buttons(), False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(120, 10), False, True, 0) else: buttons_row.pack_start(guiutils.get_pad_label(20, 10), False, True, 0) buttons_row.pack_start(_get_undo_buttons_panel(), False, True, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start(_get_zoom_buttons_panel(), False, True, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start(_get_edit_buttons_panel(), False, True, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start(_get_edit_buttons_2_panel(), False, True, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start(_get_edit_buttons_3_panel(), False, True, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start(_get_monitor_insert_buttons(), False, True, 0)
def fill_with_TC_FREE_pattern(buttons_row, window): global w w = window prefs = editorpersistance.prefs groups_tools_current = prefs.groups_tools cbutton_active_current = prefs.cbutton tools_dict = {appconsts.WORKFLOW_LAUNCH:w.worflow_launch.widget, appconsts.BUTTON_GROUP_ZOOM:_get_zoom_buttons_panel(), \ appconsts.BUTTON_GROUP_UNDO:_get_undo_buttons_panel(), appconsts.BUTTON_GROUP_TOOLS:_get_tools_buttons(), \ appconsts.BUTTON_GROUP_EDIT:_get_edit_buttons_panel(), appconsts.BUTTON_GROUP_DELETE:_get_edit_buttons_3_panel(), \ appconsts.BUTTON_GROUP_SYNC_SPLIT:_get_edit_buttons_2_panel(), appconsts.BUTTON_GROUP_MONITOR_ADD:_get_monitor_insert_buttons(), \ appconsts.BIG_TIME_CODE:w.big_TC} if editorpersistance.prefs.tools_selection == appconsts.TOOL_SELECTOR_IS_MENU: tools_dict[appconsts.TOOL_SELECT] = w.tool_selector.widget buttons_row.set_homogeneous(False) buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start( guiutils.get_pad_label(7, MIDDLE_ROW_HEIGHT), False, True, 0) #### NOTE!!!!!! THIS DETERMINES THE HEIGHT OF MIDDLE ROW for row_number in range(0, len(groups_tools_current)): if cbutton_active_current[row_number] is True: try: tool = tools_dict[groups_tools_current[row_number]] buttons_row.pack_start(tool, False, True, 0) # does not support dock yet buttons_row.pack_start(guiutils.get_pad_label(10, 10), False, True, 0) except: pass # This will fail for appconsts.TOOL_SELECT if we are now using tool dock. buttons_row.pack_start(Gtk.Label(), True, True, 0)
def _create_composite_editor(clip, editable_properties): aligned = filter(lambda ep: ep.name == "aligned", editable_properties)[0] distort = filter(lambda ep: ep.name == "distort", editable_properties)[0] operator = filter(lambda ep: ep.name == "operator", editable_properties)[0] values = ["over","and","or","xor"] deinterlace = filter(lambda ep: ep.name == "deinterlace", editable_properties)[0] progressive = filter(lambda ep: ep.name == "progressive", editable_properties)[0] force_values = [_("Nothing"),_("Progressive"),_("Deinterlace"),_("Both")] combo_box = Gtk.ComboBoxText() for val in force_values: combo_box.append_text(val) selection = _get_force_combo_index(deinterlace, progressive) combo_box.set_active(selection) combo_box.connect("changed", _compositor_editor_force_combo_box_callback, (deinterlace, progressive)) force_vbox = Gtk.VBox(False, 4) force_vbox.pack_start(Gtk.Label(label=_("Force")), True, True, 0) force_vbox.pack_start(combo_box, True, True, 0) hbox = Gtk.HBox(False, 4) hbox.pack_start(guiutils.get_pad_label(3, 5), False, False, 0) hbox.pack_start(_get_boolean_check_box_button_column(_("Align"), aligned), False, False, 0) hbox.pack_start(_get_boolean_check_box_button_column(_("Distort"), distort), False, False, 0) hbox.pack_start(Gtk.Label(), True, True, 0) # THESE ARE DISABLED BECAUSE CHANGING APLHA MODE CAN MAKE PROJECTS UNOPENABLE IF AFFECTED # COMPOSITOR IS ON THE FIRST FRAME #hbox.pack_start(_get_combo_box_column(_("Alpha"), values, operator), False, False, 0) #hbox.pack_start(Gtk.Label(), True, True, 0) hbox.pack_start(force_vbox, False, False, 0) hbox.pack_start(guiutils.get_pad_label(3, 5), False, False, 0) return hbox
def _create_region_editor(clip, editable_properties): aligned = filter(lambda ep: ep.name == "composite.aligned", editable_properties)[0] distort = filter(lambda ep: ep.name == "composite.distort", editable_properties)[0] operator = filter(lambda ep: ep.name == "composite.operator", editable_properties)[0] values = ["over","and","or","xor"] deinterlace = filter(lambda ep: ep.name == "composite.deinterlace", editable_properties)[0] progressive = filter(lambda ep: ep.name == "composite.progressive", editable_properties)[0] force_values = [_("Nothing"),_("Progressive"),_("Deinterlace"),_("Both")] combo_box = Gtk.ComboBoxText() for val in force_values: combo_box.append_text(val) selection = _get_force_combo_index(deinterlace, progressive) combo_box.set_active(selection) combo_box.connect("changed", _compositor_editor_force_combo_box_callback, (deinterlace, progressive)) force_vbox = Gtk.VBox(False, 4) force_vbox.pack_start(Gtk.Label(label=_("Force")), True, True, 0) force_vbox.pack_start(combo_box, True, True, 0) hbox = Gtk.HBox(False, 4) hbox.pack_start(guiutils.get_pad_label(3, 5), False, False, 0) hbox.pack_start(_get_boolean_check_box_button_column(_("Align"), aligned), False, False, 0) hbox.pack_start(_get_boolean_check_box_button_column(_("Distort"), distort), False, False, 0) hbox.pack_start(Gtk.Label(), True, True, 0) hbox.pack_start(_get_combo_box_column(_("Alpha"), values, operator), False, False, 0) hbox.pack_start(Gtk.Label(), True, True, 0) hbox.pack_start(force_vbox, False, False, 0) hbox.pack_start(guiutils.get_pad_label(3, 5), False, False, 0) return hbox
def get_clip_effects_editor_panel(group_combo_box, effects_list_view): """ Use components created at clipeffectseditor.py. """ create_widgets() ad_buttons_box = Gtk.HBox(True,1) ad_buttons_box.pack_start(widgets.add_effect_b, True, True, 0) ad_buttons_box.pack_start(widgets.del_effect_b, True, True, 0) stack_buttons_box = Gtk.HBox(False,1) stack_buttons_box.pack_start(ad_buttons_box, True, True, 0) stack_buttons_box.pack_start(widgets.toggle_all, False, False, 0) effect_stack = widgets.effect_stack_view for group in mltfilters.groups: group_name, filters_array = group group_combo_box.append_text(group_name) group_combo_box.set_active(0) # Same callback function works for filter select window too group_combo_box.connect("changed", lambda w,e: _group_selection_changed(w,effects_list_view), None) widgets.group_combo = group_combo_box widgets.effect_list_view = effects_list_view set_enabled(False) exit_button_vbox = Gtk.VBox(False, 2) exit_button_vbox.pack_start(widgets.exit_button, False, False, 0) exit_button_vbox.pack_start(Gtk.Label(), True, True, 0) info_row = Gtk.HBox(False, 2) info_row.pack_start(widgets.clip_info, False, False, 0) info_row.pack_start(exit_button_vbox, True, True, 0) combo_row = Gtk.HBox(False, 2) combo_row.pack_start(group_combo_box, True, True, 0) combo_row.pack_start(guiutils.get_pad_label(8, 2), False, False, 0) group_name, filters_array = mltfilters.groups[0] effects_list_view.fill_data_model(filters_array) effects_list_view.treeview.get_selection().select_path("0") effects_vbox = Gtk.VBox(False, 2) effects_vbox.pack_start(info_row, False, False, 0) if editorstate.screen_size_small_height() == False: effects_vbox.pack_start(guiutils.get_pad_label(2, 2), 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
def get_clip_effects_editor_panel(group_combo_box, effects_list_view): """ Use components created at clipeffectseditor.py. """ create_widgets() ad_buttons_box = Gtk.HBox(True, 1) ad_buttons_box.pack_start(widgets.add_effect_b, True, True, 0) ad_buttons_box.pack_start(widgets.del_effect_b, True, True, 0) stack_buttons_box = Gtk.HBox(False, 1) stack_buttons_box.pack_start(ad_buttons_box, True, True, 0) stack_buttons_box.pack_start(widgets.toggle_all, False, False, 0) effect_stack = widgets.effect_stack_view for group in mltfilters.groups: group_name, filters_array = group group_combo_box.append_text(group_name) group_combo_box.set_active(0) # Same callback function works for filter select window too group_combo_box.connect( "changed", lambda w, e: _group_selection_changed(w, effects_list_view), None) widgets.group_combo = group_combo_box widgets.effect_list_view = effects_list_view set_enabled(False) exit_button_vbox = Gtk.VBox(False, 2) exit_button_vbox.pack_start(widgets.exit_button, False, False, 0) exit_button_vbox.pack_start(Gtk.Label(), True, True, 0) info_row = Gtk.HBox(False, 2) info_row.pack_start(widgets.clip_info, False, False, 0) info_row.pack_start(exit_button_vbox, True, True, 0) combo_row = Gtk.HBox(False, 2) combo_row.pack_start(group_combo_box, True, True, 0) combo_row.pack_start(guiutils.get_pad_label(8, 2), False, False, 0) group_name, filters_array = mltfilters.groups[0] effects_list_view.fill_data_model(filters_array) effects_list_view.treeview.get_selection().select_path("0") effects_vbox = Gtk.VBox(False, 2) effects_vbox.pack_start(info_row, False, False, 0) if editorstate.screen_size_small_height() == False: effects_vbox.pack_start(guiutils.get_pad_label(2, 2), 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
def render_progress_dialog(callback, parent_window, frame_rates_match=True): dialog = Gtk.Dialog( _("Render Progress"), parent_window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Cancel"), Gtk.ResponseType.REJECT)) dialog.status_label = Gtk.Label() dialog.remaining_time_label = Gtk.Label() dialog.passed_time_label = Gtk.Label() dialog.progress_bar = Gtk.ProgressBar() status_box = Gtk.HBox(False, 2) status_box.pack_start(dialog.status_label, False, False, 0) status_box.pack_start(Gtk.Label(), True, True, 0) remaining_box = Gtk.HBox(False, 2) remaining_box.pack_start(dialog.remaining_time_label, False, False, 0) remaining_box.pack_start(Gtk.Label(), True, True, 0) passed_box = Gtk.HBox(False, 2) passed_box.pack_start(dialog.passed_time_label, False, False, 0) passed_box.pack_start(Gtk.Label(), True, True, 0) if frame_rates_match == False: # Aug-2019 - SvdB - BB if editorpersistance.prefs.double_track_hights: warning_icon = Gtk.Image.new_from_stock(Gtk.STOCK_DIALOG_WARNING, Gtk.IconSize.DND) else: warning_icon = Gtk.Image.new_from_stock(Gtk.STOCK_DIALOG_WARNING, Gtk.IconSize.MENU) warning_text = Gtk.Label(label=_( "Project and Render Profile FPS values are not same. Rendered file may have A/V sync issues." )) warning_box = Gtk.HBox(False, 2) warning_box.pack_start(warning_icon, False, False, 0) warning_box.pack_start(warning_text, False, False, 0) warning_box.pack_start(Gtk.Label(), True, True, 0) progress_vbox = Gtk.VBox(False, 2) progress_vbox.pack_start(status_box, False, False, 0) progress_vbox.pack_start(remaining_box, False, False, 0) progress_vbox.pack_start(passed_box, False, False, 0) if frame_rates_match == False: progress_vbox.pack_start(guiutils.get_pad_label(10, 10), False, False, 0) progress_vbox.pack_start(warning_box, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 10), False, False, 0) progress_vbox.pack_start(dialog.progress_bar, False, False, 0) alignment = guiutils.set_margins(progress_vbox, 12, 12, 12, 12) dialog.vbox.pack_start(alignment, True, True, 0) dialogutils.set_outer_margins(dialog.vbox) dialog.set_default_size(500, 125) alignment.show_all() dialog.connect('response', callback) dialog.show() return dialog
def __init__(self, name, seq, producer, is_master=False): GObject.GObject.__init__(self) self.seq = seq self.producer = producer self.is_master = is_master if is_master: gain_value = seq.master_audio_gain # tractor master else: gain_value = producer.audio_gain # track gain_value = gain_value * 100 self.adjustment = Gtk.Adjustment(value=gain_value, lower=0, upper=100, step_incr=1) self.slider = Gtk.VScale() self.slider.set_adjustment(self.adjustment) self.slider.set_size_request(SLOT_W - 10, CONTROL_SLOT_H - 105) self.slider.set_inverted(True) self.slider.connect("value-changed", self.gain_changed) if is_master: pan_value = seq.master_audio_pan else: pan_value = producer.audio_pan if pan_value == appconsts.NO_PAN: pan_value = 0.5 # center pan_value = (pan_value - 0.5) * 200 # from range 0 - 1 to range -100 - 100 self.pan_adjustment = Gtk.Adjustment(value=pan_value, lower=-100, upper=100, step_incr=1) self.pan_slider = Gtk.HScale() self.pan_slider.set_adjustment(self.pan_adjustment) self.pan_slider.connect("value-changed", self.pan_changed) self.pan_button = Gtk.ToggleButton(_("Pan")) self.pan_button.connect("toggled", self.pan_active_toggled) if pan_value == 0.0: self.pan_slider.set_sensitive(False) else: self.pan_button.set_active(True) self.pan_adjustment.set_value(pan_value) # setting button active sets value = 0, set correct value again label = guiutils.bold_label(name) vbox = Gtk.VBox(False, 0) vbox.pack_start(guiutils.get_pad_label(5,5), False, False, 0) vbox.pack_start(label, False, False, 0) vbox.pack_start(guiutils.get_pad_label(5,5), False, False, 0) vbox.pack_start(self.slider, False, False, 0) vbox.pack_start(self.pan_button, False, False, 0) vbox.pack_start(self.pan_slider, False, False, 0) vbox.pack_start(guiutils.get_pad_label(5,5), False, False, 0) self.add(vbox) self.set_size_request(SLOT_W, CONTROL_SLOT_H)
def __init__(self, name, seq, producer, is_master=False): GObject.GObject.__init__(self) self.seq = seq self.producer = producer self.is_master = is_master if is_master: gain_value = seq.master_audio_gain # tractor master else: gain_value = producer.audio_gain # track gain_value = gain_value * 100 self.adjustment = Gtk.Adjustment(value=gain_value, lower=0, upper=100, step_incr=1) self.slider = Gtk.VScale() self.slider.set_adjustment(self.adjustment) self.slider.set_size_request(SLOT_W - 10, CONTROL_SLOT_H - 105) self.slider.set_inverted(True) self.slider.connect("value-changed", self.gain_changed) if is_master: pan_value = seq.master_audio_pan else: pan_value = producer.audio_pan if pan_value == appconsts.NO_PAN: pan_value = 0.5 # center pan_value = (pan_value - 0.5) * 200 # from range 0 - 1 to range -100 - 100 self.pan_adjustment = Gtk.Adjustment(value=pan_value, lower=-100, upper=100, step_incr=1) self.pan_slider = Gtk.HScale() self.pan_slider.set_adjustment(self.pan_adjustment) self.pan_slider.connect("value-changed", self.pan_changed) self.pan_button = Gtk.ToggleButton(_("Pan")) self.pan_button.connect("toggled", self.pan_active_toggled) if pan_value == 0.0: self.pan_slider.set_sensitive(False) else: self.pan_button.set_active(True) self.pan_adjustment.set_value(pan_value) # setting button active sets value = 0, set correct value again label = guiutils.bold_label(name) vbox = Gtk.VBox(False, 0) vbox.pack_start(guiutils.get_pad_label(5,5), False, False, 0) vbox.pack_start(label, False, False, 0) vbox.pack_start(guiutils.get_pad_label(5,5), False, False, 0) vbox.pack_start(self.slider, False, False, 0) vbox.pack_start(self.pan_button, False, False, 0) vbox.pack_start(self.pan_slider, False, False, 0) vbox.pack_start(guiutils.get_pad_label(5,5), False, False, 0) self.add(vbox) self.set_size_request(SLOT_W, CONTROL_SLOT_H) self.mute_changed()
def fill_with_TC_MIDDLE_pattern(buttons_row, window): global w w = window left_panel = Gtk.HBox(False, 0) left_panel.pack_start(_get_undo_buttons_panel(), False, True, 0) left_panel.pack_start(guiutils.get_pad_label(10, MIDDLE_ROW_HEIGHT), False, True, 0) #### NOTE!!!!!! THIS DETERMINES THE HEIGHT OF MIDDLE ROW left_panel.pack_start(_get_zoom_buttons_panel(), False, True, 0) if editorstate.SCREEN_WIDTH > NORMAL_WIDTH: left_panel.pack_start(guiutils.get_pad_label(10, 10), False, True, 0) left_panel.pack_start(_get_tools_buttons(), False, True, 0) left_panel.pack_start(guiutils.get_pad_label(50, 10), False, True, 10) # to left and right panel same size for centering else: left_panel.pack_start(guiutils.get_pad_label(60, 10), False, True, 10) # to left and right panel same size for centering left_panel.pack_start(Gtk.Label(), True, True, 0) middle_panel = Gtk.HBox(False, 0) middle_panel.pack_start(w.worflow_launch.widget, False, True, 0) middle_panel.pack_start(guiutils.get_pad_label(7, MIDDLE_ROW_HEIGHT), False, True, 0) middle_panel.pack_start(w.big_TC, False, True, 0) middle_panel.pack_start(guiutils.get_pad_label(10, 10), False, True, 0) middle_panel.pack_start(w.tool_selector.widget, False, True, 0) right_panel = Gtk.HBox(False, 0) right_panel.pack_start(Gtk.Label(), True, True, 0) right_panel.pack_start(_get_edit_buttons_panel(), False, True, 0) right_panel.pack_start(guiutils.get_pad_label(10, 10), False, True, 0) right_panel.pack_start(_get_edit_buttons_3_panel(),False, True, 0) right_panel.pack_start(guiutils.get_pad_label(10, 10), False, True, 0) right_panel.pack_start(_get_edit_buttons_2_panel(),False, True, 0) right_panel.pack_start(guiutils.get_pad_label(10, 10), False, True, 0) right_panel.pack_start(_get_monitor_insert_buttons(), False, True, 0) buttons_row.pack_start(left_panel, True, True, 0) buttons_row.pack_start(middle_panel, False, False, 0) buttons_row.pack_start(right_panel, True, True, 0)
def render_progress_dialog(callback, parent_window, frame_rates_match=True): dialog = gtk.Dialog(_("Render Progress"), parent_window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Cancel").encode('utf-8'), gtk.RESPONSE_REJECT)) dialog.status_label = gtk.Label() dialog.remaining_time_label = gtk.Label() dialog.passed_time_label = gtk.Label() dialog.progress_bar = gtk.ProgressBar() status_box = gtk.HBox(False, 2) status_box.pack_start(dialog.status_label, False, False, 0) status_box.pack_start(gtk.Label(), True, True, 0) remaining_box = gtk.HBox(False, 2) remaining_box.pack_start(dialog.remaining_time_label, False, False, 0) remaining_box.pack_start(gtk.Label(), True, True, 0) passed_box = gtk.HBox(False, 2) passed_box.pack_start(dialog.passed_time_label, False, False, 0) passed_box.pack_start(gtk.Label(), True, True, 0) if frame_rates_match == False: warning_icon = gtk.image_new_from_stock(gtk.STOCK_DIALOG_WARNING, gtk.ICON_SIZE_MENU) warning_text = gtk.Label( _("Project and Render Profile FPS values are not same. Rendered file may have A/V sync issues." )) warning_box = gtk.HBox(False, 2) warning_box.pack_start(warning_icon, False, False, 0) warning_box.pack_start(warning_text, False, False, 0) warning_box.pack_start(gtk.Label(), True, True, 0) progress_vbox = gtk.VBox(False, 2) progress_vbox.pack_start(status_box, False, False, 0) progress_vbox.pack_start(remaining_box, False, False, 0) progress_vbox.pack_start(passed_box, False, False, 0) if frame_rates_match == False: progress_vbox.pack_start(guiutils.get_pad_label(10, 10), False, False, 0) progress_vbox.pack_start(warning_box, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 10), False, False, 0) progress_vbox.pack_start(dialog.progress_bar, False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(12, 12, 12, 12) alignment.add(progress_vbox) dialog.vbox.pack_start(alignment, True, True, 0) dialog.set_default_size(500, 125) alignment.show_all() dialog.set_has_separator(False) dialog.connect('response', callback) dialog.show() return dialog
def fill_with_TC_MIDDLE_pattern(buttons_row, window): if editorpersistance.prefs.force_small_midbar == False: buttons_row.set_homogeneous(True) global w w = window left_panel = Gtk.HBox(False, 0) left_panel.pack_start(_get_undo_buttons_panel(), False, True, 0) left_panel.pack_start( guiutils.get_pad_label(10, MIDDLE_ROW_HEIGHT), False, True, 0) #### NOTE!!!!!! THIS DETERMINES THE HEIGHT OF MIDDLE ROW left_panel.pack_start(_get_zoom_buttons_panel(), False, True, 0) if editorpersistance.prefs.force_small_midbar == False: if editorstate.SCREEN_WIDTH > NORMAL_WIDTH: left_panel.pack_start(guiutils.get_pad_label(10, 10), False, True, 0) left_panel.pack_start(_get_tools_buttons(), False, True, 0) left_panel.pack_start( guiutils.get_pad_label(50, 10), False, True, 10) # to left and right panel same size for centering else: left_panel.pack_start( guiutils.get_pad_label(60, 10), False, True, 10) # to left and right panel same size for centering else: left_panel.pack_start(guiutils.get_pad_label(10, 10), False, True, 0) left_panel.pack_start(_get_edit_buttons_panel(), False, True, 0) left_panel.pack_start(Gtk.Label(), True, True, 0) middle_panel = Gtk.HBox(False, 0) middle_panel.pack_start(w.worflow_launch.widget, False, True, 0) middle_panel.pack_start(guiutils.get_pad_label(7, MIDDLE_ROW_HEIGHT), False, True, 0) middle_panel.pack_start(w.big_TC, False, True, 0) middle_panel.pack_start(guiutils.get_pad_label(10, 10), False, True, 0) if editorpersistance.prefs.tools_selection == appconsts.TOOL_SELECTOR_IS_MENU: middle_panel.pack_start(w.tool_selector.widget, False, True, 0) right_panel = Gtk.HBox(False, 0) right_panel.pack_start(Gtk.Label(), True, True, 0) if editorpersistance.prefs.force_small_midbar == False: right_panel.pack_start(_get_edit_buttons_panel(), False, True, 0) right_panel.pack_start(guiutils.get_pad_label(10, 10), False, True, 0) right_panel.pack_start(_get_edit_buttons_3_panel(), False, True, 0) right_panel.pack_start(guiutils.get_pad_label(10, 10), False, True, 0) if editorpersistance.prefs.force_small_midbar == False: if editorstate.screen_size_small_width() == False: right_panel.pack_start(_get_edit_buttons_2_panel(), False, True, 0) right_panel.pack_start(guiutils.get_pad_label(10, 10), False, True, 0) right_panel.pack_start(_get_monitor_insert_buttons(), False, True, 0) buttons_row.pack_start(left_panel, True, True, 0) buttons_row.pack_start(middle_panel, False, False, 0) buttons_row.pack_start(right_panel, True, True, 0)
def render_progress_dialog(callback, parent_window, frame_rates_match=True): dialog = gtk.Dialog(_("Render Progress"), parent_window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Cancel").encode('utf-8'), gtk.RESPONSE_REJECT)) dialog.status_label = gtk.Label() dialog.remaining_time_label = gtk.Label() dialog.passed_time_label = gtk.Label() dialog.progress_bar = gtk.ProgressBar() status_box = gtk.HBox(False, 2) status_box.pack_start(dialog.status_label,False, False, 0) status_box.pack_start(gtk.Label(), True, True, 0) remaining_box = gtk.HBox(False, 2) remaining_box.pack_start(dialog.remaining_time_label,False, False, 0) remaining_box.pack_start(gtk.Label(), True, True, 0) passed_box = gtk.HBox(False, 2) passed_box.pack_start(dialog.passed_time_label,False, False, 0) passed_box.pack_start(gtk.Label(), True, True, 0) if frame_rates_match == False: warning_icon = gtk.image_new_from_stock(gtk.STOCK_DIALOG_WARNING, gtk.ICON_SIZE_MENU) warning_text = gtk.Label(_("Project and Render Profile FPS values are not same. Rendered file may have A/V sync issues.")) warning_box = gtk.HBox(False, 2) warning_box.pack_start(warning_icon,False, False, 0) warning_box.pack_start(warning_text,False, False, 0) warning_box.pack_start(gtk.Label(), True, True, 0) progress_vbox = gtk.VBox(False, 2) progress_vbox.pack_start(status_box, False, False, 0) progress_vbox.pack_start(remaining_box, False, False, 0) progress_vbox.pack_start(passed_box, False, False, 0) if frame_rates_match == False: progress_vbox.pack_start(guiutils.get_pad_label(10, 10), False, False, 0) progress_vbox.pack_start(warning_box, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 10), False, False, 0) progress_vbox.pack_start(dialog.progress_bar, False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(12, 12, 12, 12) alignment.add(progress_vbox) dialog.vbox.pack_start(alignment, True, True, 0) dialog.set_default_size(500, 125) alignment.show_all() dialog.set_has_separator(False) dialog.connect('response', callback) dialog.show() return dialog
def __init__(self): # Window self.window = Gtk.Window(Gtk.WindowType.TOPLEVEL) self.window.connect("delete-event", lambda w, e:_start_single_render_shutdown()) app_icon = GdkPixbuf.Pixbuf.new_from_file(respaths.IMAGE_PATH + "flowbladesinglerendericon.png") self.window.set_icon(app_icon) self.est_time_left = Gtk.Label() self.current_render = Gtk.Label() self.current_render_time = Gtk.Label() est_r = guiutils.get_right_justified_box([guiutils.bold_label(_("Estimated Left:"))]) current_r = guiutils.get_right_justified_box([guiutils.bold_label(_("File:"))]) current_r_t = guiutils.get_right_justified_box([guiutils.bold_label(_("Elapsed:"))]) est_r.set_size_request(250, 20) current_r.set_size_request(250, 20) current_r_t.set_size_request(250, 20) info_vbox = Gtk.VBox(False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([current_r, self.current_render]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([current_r_t, self.current_render_time]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([est_r, self.est_time_left]), False, False, 0) self.stop_render_button = Gtk.Button(_("Stop Render")) self.stop_render_button.connect("clicked", lambda w, e: _start_single_render_shutdown(), None) self.render_progress_bar = Gtk.ProgressBar() self.progress_label = Gtk.Label("0 %") button_row = Gtk.HBox(False, 0) button_row.pack_start(self.progress_label, False, False, 0) button_row.pack_start(Gtk.Label(), True, True, 0) button_row.pack_start(self.stop_render_button, False, False, 0) top_vbox = Gtk.VBox(False, 0) top_vbox.pack_start(info_vbox, False, False, 0) top_vbox.pack_start(guiutils.get_pad_label(12, 12), False, False, 0) top_vbox.pack_start(self.render_progress_bar, False, False, 0) top_vbox.pack_start(guiutils.get_pad_label(12, 12), False, False, 0) top_vbox.pack_start(button_row, False, False, 0) top_align = guiutils.set_margins(top_vbox, 12, 12, 12, 12) top_align.set_size_request(SINGLE_WINDOW_WIDTH, 20) # Set pane and show window self.window.add(top_align) self.window.set_title(_("Flowblade Timeline Render")) self.window.set_position(Gtk.WindowPosition.CENTER) self.window.show_all()
def render_progress_dialog(callback, parent_window, frame_rates_match=True): dialog = Gtk.Dialog(_("Render Progress"), parent_window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Cancel").encode('utf-8'), Gtk.ResponseType.REJECT)) dialog.status_label = Gtk.Label() dialog.remaining_time_label = Gtk.Label() dialog.passed_time_label = Gtk.Label() dialog.progress_bar = Gtk.ProgressBar() status_box = Gtk.HBox(False, 2) status_box.pack_start(dialog.status_label,False, False, 0) status_box.pack_start(Gtk.Label(), True, True, 0) remaining_box = Gtk.HBox(False, 2) remaining_box.pack_start(dialog.remaining_time_label,False, False, 0) remaining_box.pack_start(Gtk.Label(), True, True, 0) passed_box = Gtk.HBox(False, 2) passed_box.pack_start(dialog.passed_time_label,False, False, 0) passed_box.pack_start(Gtk.Label(), True, True, 0) if frame_rates_match == False: warning_icon = Gtk.Image.new_from_stock(Gtk.STOCK_DIALOG_WARNING, Gtk.IconSize.MENU) warning_text = Gtk.Label(label=_("Project and Render Profile FPS values are not same. Rendered file may have A/V sync issues.")) warning_box = Gtk.HBox(False, 2) warning_box.pack_start(warning_icon,False, False, 0) warning_box.pack_start(warning_text,False, False, 0) warning_box.pack_start(Gtk.Label(), True, True, 0) progress_vbox = Gtk.VBox(False, 2) progress_vbox.pack_start(status_box, False, False, 0) progress_vbox.pack_start(remaining_box, False, False, 0) progress_vbox.pack_start(passed_box, False, False, 0) if frame_rates_match == False: progress_vbox.pack_start(guiutils.get_pad_label(10, 10), False, False, 0) progress_vbox.pack_start(warning_box, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 10), False, False, 0) progress_vbox.pack_start(dialog.progress_bar, False, False, 0) alignment = guiutils.set_margins(progress_vbox, 12, 12, 12, 12) dialog.vbox.pack_start(alignment, True, True, 0) dialogutils.set_outer_margins(dialog.vbox) dialog.set_default_size(500, 125) alignment.show_all() dialog.connect('response', callback) dialog.show() return dialog
def get_render_panel_right(render_widgets, render_clicked_cb, to_queue_clicked_cb): small_height = (editorstate.SCREEN_HEIGHT < 898) if small_height: encoding_panel = guiutils.get_named_frame(_("Encoding Format"), render_widgets.encoding_panel.vbox, 4) opts_panel = guiutils.get_named_frame(_("Render Args"), render_widgets.args_panel.vbox, 4) bin_row = Gtk.HBox() bin_row.pack_start(guiutils.get_pad_label(10, 8), False, False, 0) bin_row.pack_start(Gtk.Label(label=_("Open File in Bin:")), False, False, 0) bin_row.pack_start(guiutils.get_pad_label(10, 2), False, False, 0) bin_row.pack_start(render_widgets.args_panel.open_in_bin, False, False, 0) bin_row.pack_start(Gtk.Label(), True, True, 0) range_row = Gtk.HBox() range_row.pack_start(guiutils.get_pad_label(10, 8), False, False, 0) if not editorstate.screen_size_small_width(): range_row.pack_start(Gtk.Label(label=_("Render Range:")), False, False, 0) range_row.pack_start(guiutils.get_pad_label(10, 2), False, False, 0) range_row.pack_start(render_widgets.range_cb, True, True, 0) buttons_panel = Gtk.HBox() buttons_panel.pack_start(guiutils.get_pad_label(10, 8), False, False, 0) buttons_panel.pack_start(render_widgets.reset_button, False, False, 0) if not editorstate.screen_size_small_width(): buttons_panel.pack_start(Gtk.Label(), True, True, 0) buttons_panel.pack_start(render_widgets.queue_button, False, False, 0) buttons_panel.pack_start(Gtk.Label(), True, True, 0) buttons_panel.pack_start(render_widgets.render_button, False, False, 0) render_widgets.queue_button.connect("clicked", to_queue_clicked_cb, None) render_widgets.render_button.connect("clicked", render_clicked_cb, None) render_panel = Gtk.VBox() if small_height: render_panel.pack_start(encoding_panel, False, False, 0) render_panel.pack_start(opts_panel, True, True, 0) #render_panel.pack_start(Gtk.Label(), True, True, 0) else: render_panel.pack_start(opts_panel, True, True, 0) if small_height == False: render_panel.pack_start(guiutils.get_pad_label(10, 22), False, False, 0) render_panel.pack_start(bin_row, False, False, 0) else: render_panel.pack_start(Gtk.Label(), True, True, 0) render_panel.pack_start(range_row, False, False, 0) if small_height == False: render_panel.pack_start(guiutils.get_pad_label(10, 12), False, False, 0) else: render_panel.pack_start(guiutils.get_pad_label(10, 4), False, False, 0) render_panel.pack_start(buttons_panel, False, False, 0) return render_panel
def get_single_line_text_input_dialog(chars, label_width, title, ok_button_text, label, default_text): dialog = Gtk.Dialog( title, None, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Cancel"), Gtk.ResponseType.REJECT, ok_button_text, Gtk.ResponseType.OK)) entry = Gtk.Entry() entry.set_width_chars(chars) entry.set_text(default_text) entry.set_activates_default(True) entry_row = guiutils.get_two_column_box(Gtk.Label(label=label), entry, label_width) vbox = Gtk.VBox(False, 2) vbox.pack_start(entry_row, False, False, 0) vbox.pack_start(guiutils.get_pad_label(12, 12), False, False, 0) alignment = guiutils.set_margins(vbox, 6, 24, 24, 24) dialog.vbox.pack_start(alignment, True, True, 0) set_outer_margins(dialog.vbox) default_behaviour(dialog) dialog.set_default_response(Gtk.ResponseType.ACCEPT) return (dialog, entry)
def get_file_properties_panel(data): media_file, img, size, length, vcodec, acodec, channels, frequency, fps, match_profile_name, matches_current_profile = data row0 = get_two_column_box(get_bold_label(_("Name:")), Gtk.Label(label=media_file.name)) row00 = get_two_column_box(get_bold_label(_("Path:")), Gtk.Label(label=media_file.path)) row1 = get_two_column_box(get_bold_label(_("Image Size:")), Gtk.Label(label=size)) row111 = get_two_column_box(get_bold_label(_("Frames Per Second:")), Gtk.Label(label=fps)) row11 = get_two_column_box(get_bold_label(_("Playtime:")), Gtk.Label(label=length)) row2 = get_two_column_box(get_bold_label(_("Video Codec:")), Gtk.Label(label=vcodec)) row3 = get_two_column_box(get_bold_label(_("Audio Codec:")), Gtk.Label(label=acodec)) row4 = get_two_column_box(get_bold_label(_("Audio Channels:")), Gtk.Label(label=channels)) row5 = get_two_column_box(get_bold_label(_("Audio Sample Rate:")), Gtk.Label(label=frequency)) row6 = get_two_column_box(get_bold_label(_("Best Profile:")), Gtk.Label(label=match_profile_name)) row7 = get_two_column_box(get_bold_label(_("Matches Project Profile:")), Gtk.Label(label=matches_current_profile)) vbox = Gtk.VBox(False, 2) vbox.pack_start(img, False, False, 0) vbox.pack_start(guiutils.get_pad_label(12, 16), False, False, 0) vbox.pack_start(row0, False, False, 0) vbox.pack_start(row00, False, False, 0) vbox.pack_start(row1, False, False, 0) vbox.pack_start(row111, False, False, 0) vbox.pack_start(row11, False, False, 0) vbox.pack_start(row2, False, False, 0) vbox.pack_start(row3, False, False, 0) vbox.pack_start(row4, False, False, 0) vbox.pack_start(row5, False, False, 0) vbox.pack_start(row6, False, False, 0) vbox.pack_start(row7, False, False, 0) vbox.pack_start(Gtk.Label(), True, True, 0) return vbox
def get_single_line_text_input_dialog(chars, label_width, title, ok_button_text, label, default_text): dialog = gtk.Dialog(title, None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Cancel").encode('utf-8'), gtk.RESPONSE_REJECT, ok_button_text, gtk.RESPONSE_OK)) entry = gtk.Entry(30) entry.set_width_chars(30) entry.set_text(default_text) entry.set_activates_default(True) entry_row = guiutils.get_two_column_box(gtk.Label(label), entry, 180) vbox = gtk.VBox(False, 2) vbox.pack_start(entry_row, False, False, 0) vbox.pack_start(guiutils.get_pad_label(12, 12), False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(6, 24, 24, 24) alignment.add(vbox) dialog.vbox.pack_start(alignment, True, True, 0) default_behaviour(dialog) dialog.set_default_response(gtk.RESPONSE_ACCEPT) return (dialog, entry)
def _waveform_render_progress_dialog(callback, title, text, progress_bar, parent_window): dialog = gtk.Dialog(title, parent_window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Cancel").encode('utf-8'), gtk.RESPONSE_REJECT)) dialog.text_label = gtk.Label(text) dialog.text_label.set_use_markup(True) text_box = gtk.HBox(False, 2) text_box.pack_start(dialog.text_label,False, False, 0) text_box.pack_start(gtk.Label(), True, True, 0) status_box = gtk.HBox(False, 2) status_box.pack_start(text_box, False, False, 0) status_box.pack_start(gtk.Label(), True, True, 0) progress_vbox = gtk.VBox(False, 2) progress_vbox.pack_start(status_box, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 10), False, False, 0) progress_vbox.pack_start(progress_bar, False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(12, 12, 12, 12) alignment.add(progress_vbox) dialog.vbox.pack_start(alignment, True, True, 0) dialog.set_default_size(500, 125) alignment.show_all() dialog.set_has_separator(False) dialog.connect('response', callback) dialog.show() return dialog
def _get_image_file_select_editor(editable_property): """ Returns GUI component for selecting image producing file """ dialog = Gtk.FileChooserDialog(_("Select Image Producing File"), None, Gtk.FileChooserAction.OPEN, (_("Cancel"), Gtk.ResponseType.CANCEL, _("OK"), Gtk.ResponseType.ACCEPT)) dialog.set_action(Gtk.FileChooserAction.OPEN) dialog.set_select_multiple(False) file_filter = utils.get_media_source_file_filter(False) dialog.add_filter(file_filter) file_select_button = Gtk.FileChooserButton.new_with_dialog(dialog) file_select_button.set_size_request(210, 28) file_select_label = Gtk.Label(editable_property.get_display_name()) editor_row = Gtk.HBox(False, 2) editor_row.pack_start(file_select_label, False, False, 2) editor_row.pack_start(guiutils.get_pad_label(3, 5), False, False, 2) editor_row.pack_start(file_select_button, False, False, 0) dialog.connect('response', editable_property.dialog_response_callback) return editor_row
def __init__(self, autosave_file): self.is_shutting_down = False # Window self.window = Gtk.Window(Gtk.WindowType.TOPLEVEL) self.window.connect("delete-event", lambda w, e:self.close_window()) app_icon = GdkPixbuf.Pixbuf.new_from_file(respaths.IMAGE_PATH + "flowbladebatchappicon.png") self.window.set_icon(app_icon) self.last_saved_job = None self.start_time = time.monotonic() self.autosave_file = autosave_file self.render_progress_bar = Gtk.ProgressBar() self.render_progress_bar.set_text("0 %") prog_align = guiutils.set_margins(self.render_progress_bar, 0, 0, 6, 0) prog_align.set_size_request(550, 30) self.elapsed_value = Gtk.Label() self.current_render_value = Gtk.Label() self.items_value = Gtk.Label() est_label = guiutils.get_right_justified_box([guiutils.bold_label(_("Elapsed:"))]) items_label = guiutils.get_right_justified_box([guiutils.bold_label(_("Jobs Remaining Item:"))]) current_label = guiutils.get_right_justified_box([guiutils.bold_label(_("Current Job:"))]) est_label.set_size_request(250, 20) current_label.set_size_request(250, 20) items_label.set_size_request(250, 20) self.status_label = Gtk.Label() self.status_label.set_text(_("Rendering")) cancel_button = Gtk.Button(_("Cancel All Jobs")) cancel_button.connect("clicked", lambda w: self.cancel_all()) control_row = Gtk.HBox(False, 0) control_row.pack_start(self.status_label, False, False, 0) control_row.pack_start(Gtk.Label(), True, True, 0) control_row.pack_start(cancel_button, False, False, 0) info_vbox = Gtk.VBox(False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([est_label, self.elapsed_value]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([items_label, self.items_value]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([current_label, self.current_render_value]), False, False, 0) progress_vbox = Gtk.VBox(False, 2) progress_vbox.pack_start(info_vbox, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 8), False, False, 0) progress_vbox.pack_start(prog_align, False, False, 0) progress_vbox.pack_start(control_row, False, False, 0) alignment = guiutils.set_margins(progress_vbox, 12, 12, 12, 12) alignment.show_all() # Set pane and show window self.window.add(alignment) self.window.set_title(_("Jobs Render Progress")) self.window.set_position(Gtk.WindowPosition.CENTER) self.window.show_all()
def get_single_line_text_input_dialog(chars, label_width,title, ok_button_text, label, default_text): dialog = gtk.Dialog(title, None, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Cancel").encode('utf-8'), gtk.RESPONSE_REJECT, ok_button_text, gtk.RESPONSE_OK)) entry = gtk.Entry(30) entry.set_width_chars(30) entry.set_text(default_text) entry.set_activates_default(True) entry_row = guiutils.get_two_column_box(gtk.Label(label), entry, 180) vbox = gtk.VBox(False, 2) vbox.pack_start(entry_row, False, False, 0) vbox.pack_start(guiutils.get_pad_label(12, 12), False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(6, 24, 24, 24) alignment.add(vbox) dialog.vbox.pack_start(alignment, True, True, 0) default_behaviour(dialog) dialog.set_default_response(gtk.RESPONSE_ACCEPT) return (dialog, entry)
def get_file_properties_panel(data): media_file, img, size, length, vcodec, acodec, channels, frequency, fps = data row0 = get_two_column_box(get_bold_label(_("Name:")), gtk.Label(media_file.name)) row00 = get_two_column_box(get_bold_label(_("Path:")), gtk.Label(media_file.path)) row1 = get_two_column_box(get_bold_label(_("Image Size:")), gtk.Label(size)) row111 = get_two_column_box(get_bold_label(_("Frames Per Second:")), gtk.Label(fps)) row11 = get_two_column_box(get_bold_label(_("Playtime:")), gtk.Label(length)) row2 = get_two_column_box(get_bold_label(_("Video Codec:")), gtk.Label(vcodec)) row3 = get_two_column_box(get_bold_label(_("Audio Codec:")), gtk.Label(acodec)) row4 = get_two_column_box(get_bold_label(_("Audio Channels:")), gtk.Label(channels)) row5 = get_two_column_box(get_bold_label(_("Audio Sample Rate:")), gtk.Label(frequency)) vbox = gtk.VBox(False, 2) vbox.pack_start(img, False, False, 0) vbox.pack_start(guiutils.get_pad_label(12, 16), False, False, 0) vbox.pack_start(row0, False, False, 0) vbox.pack_start(row00, False, False, 0) vbox.pack_start(row1, False, False, 0) vbox.pack_start(row111, False, False, 0) vbox.pack_start(row11, False, False, 0) vbox.pack_start(row2, False, False, 0) vbox.pack_start(row3, False, False, 0) vbox.pack_start(row4, False, False, 0) vbox.pack_start(row5, False, False, 0) vbox.pack_start(gtk.Label(), True, True, 0) return vbox
def get_media_files_panel(media_list_view, add_cb, del_cb, col_changed_cb, hamburger_launch_pressed, filtering_cb): # Create buttons and connect signals add_media_b = Gtk.Button(_("Add")) del_media_b = Gtk.Button(_("Delete")) add_media_b.connect("clicked", add_cb, None) del_media_b.connect("clicked", del_cb, None) add_media_b.set_tooltip_text(_("Add Media File to Bin")) del_media_b.set_tooltip_text(_("Delete Media File from Bin")) hamburger_launcher = guicomponents.HamburgerPressLaunch( hamburger_launch_pressed) guiutils.set_margins(hamburger_launcher.widget, 2, 0, 4, 12) columns_img = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "columns.png") columns_launcher = guicomponents.PressLaunch(col_changed_cb, columns_img, w=22, h=22) columns_launcher.surface_y = 6 columns_launcher.widget.set_tooltip_text( _("Number of Media File columns.")) all_pixbuf = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "show_all_files.png") audio_pixbuf = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "show_audio_files.png") graphics_pixbuf = cairo.ImageSurface.create_from_png( respaths.IMAGE_PATH + "show_graphics_files.png") video_pixbuf = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "show_video_files.png") imgseq_pixbuf = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "show_imgseq_files.png") pattern_pixbuf = cairo.ImageSurface.create_from_png( respaths.IMAGE_PATH + "show_pattern_producers.png") files_filter_launcher = guicomponents.ImageMenuLaunch( filtering_cb, [ all_pixbuf, video_pixbuf, audio_pixbuf, graphics_pixbuf, imgseq_pixbuf, pattern_pixbuf ], 24, 22) files_filter_launcher.surface_x = 3 files_filter_launcher.surface_y = 4 files_filter_launcher.widget.set_tooltip_text( _("Visible Media File types.")) gui.media_view_filter_selector = files_filter_launcher buttons_box = Gtk.HBox(False, 1) buttons_box.pack_start(hamburger_launcher.widget, False, False, 0) buttons_box.pack_start(guiutils.get_pad_label(4, 4), False, False, 0) buttons_box.pack_start(columns_launcher.widget, False, False, 0) buttons_box.pack_start(files_filter_launcher.widget, False, False, 0) buttons_box.pack_start(Gtk.Label(), True, True, 0) panel = Gtk.VBox() panel.pack_start(media_list_view, True, True, 0) panel.pack_start(buttons_box, False, True, 0) return panel
def _get_file_select_editor(editable_property): """ Returns GUI component for selecting file of determined type """ dialog = Gtk.FileChooserDialog(_("Select File"), None, Gtk.FileChooserAction.OPEN, (_("Cancel").encode('utf-8'), Gtk.ResponseType.CANCEL, _("OK").encode('utf-8'), Gtk.ResponseType.ACCEPT)) dialog.set_action(Gtk.FileChooserAction.OPEN) dialog.set_select_multiple(False) file_types_args_list = editable_property.args[FILE_TYPES].split(".") file_types_args_list = file_types_args_list[1:len(file_types_args_list)] file_filter = Gtk.FileFilter() for file_type in file_types_args_list: file_filter.add_pattern("*." + file_type) file_filter.set_name("Accepted Files") dialog.add_filter(file_filter) file_select_button = Gtk.FileChooserButton.new_with_dialog(dialog) file_select_button.set_size_request(210, 28) file_select_label = Gtk.Label(editable_property.get_display_name()) editor_row = Gtk.HBox(False, 2) editor_row.pack_start(file_select_label, False, False, 2) editor_row.pack_start(guiutils.get_pad_label(3, 5), False, False, 2) editor_row.pack_start(file_select_button, False, False, 0) dialog.connect('response', editable_property.dialog_response_callback) return editor_row
def clip_render_progress_dialog(callback, title, text, progress_bar, parent_window): dialog = Gtk.Dialog(title, parent_window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Cancel").encode('utf-8'), Gtk.ResponseType.REJECT)) dialog.text_label = Gtk.Label(label=text) dialog.text_label.set_use_markup(True) text_box = Gtk.HBox(False, 2) text_box.pack_start(dialog.text_label,False, False, 0) text_box.pack_start(Gtk.Label(), True, True, 0) status_box = Gtk.HBox(False, 2) status_box.pack_start(text_box, False, False, 0) status_box.pack_start(Gtk.Label(), True, True, 0) progress_vbox = Gtk.VBox(False, 2) progress_vbox.pack_start(status_box, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 10), False, False, 0) progress_vbox.pack_start(progress_bar, False, False, 0) alignment = guiutils.set_margins(progress_vbox, 12, 12, 12, 12) dialog.vbox.pack_start(alignment, True, True, 0) dialogutils.set_outer_margins(dialog.vbox) dialog.set_default_size(500, 125) alignment.show_all() dialog.connect('response', callback) dialog.show() return dialog
def _waveform_render_progress_dialog(callback, title, text, progress_bar, parent_window): dialog = gtk.Dialog(title, parent_window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Cancel").encode('utf-8'), gtk.RESPONSE_REJECT)) dialog.text_label = gtk.Label(text) dialog.text_label.set_use_markup(True) text_box = gtk.HBox(False, 2) text_box.pack_start(dialog.text_label, False, False, 0) text_box.pack_start(gtk.Label(), True, True, 0) status_box = gtk.HBox(False, 2) status_box.pack_start(text_box, False, False, 0) status_box.pack_start(gtk.Label(), True, True, 0) progress_vbox = gtk.VBox(False, 2) progress_vbox.pack_start(status_box, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 10), False, False, 0) progress_vbox.pack_start(progress_bar, False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(12, 12, 12, 12) alignment.add(progress_vbox) dialog.vbox.pack_start(alignment, True, True, 0) dialog.set_default_size(500, 125) alignment.show_all() dialog.set_has_separator(False) dialog.connect('response', callback) dialog.show() return dialog
def __init__(self, out_profile_changed_callback): self.use_project_label = Gtk.Label(label=_("Use Project Profile")) self.use_project_profile_check = Gtk.CheckButton() self.use_project_profile_check.set_active(True) self.use_project_profile_check.connect("toggled", self.use_project_check_toggled) self.out_profile_combo = ProfileSelector(out_profile_changed_callback) self.out_profile_info_box = ProfileInfoBox( ) # filled later when current sequence known use_project_profile_row = Gtk.HBox() use_project_profile_row.pack_start(self.use_project_profile_check, False, False, 0) use_project_profile_row.pack_start(guiutils.get_pad_label(4, 1), False, False, 0) use_project_profile_row.pack_start(self.use_project_label, False, False, 0) use_project_profile_row.pack_start(Gtk.Label(), True, True, 0) self.use_project_profile_check.set_tooltip_text( _("Select used project profile for rendering")) self.out_profile_info_box.set_tooltip_text(_("Render profile info")) self.vbox = Gtk.VBox(False, 2) self.vbox.pack_start(use_project_profile_row, False, False, 0) self.vbox.pack_start(self.out_profile_combo.widget, False, False, 0) if editorstate.screen_size_small_height() == False: self.vbox.pack_start(self.out_profile_info_box, False, False, 0)
def get_single_line_text_input_dialog(chars, label_width,title, ok_button_text, label, default_text): dialog = Gtk.Dialog(title, None, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Cancel").encode('utf-8'), Gtk.ResponseType.REJECT, ok_button_text, Gtk.ResponseType.OK)) entry = Gtk.Entry() entry.set_width_chars(30) entry.set_text(default_text) entry.set_activates_default(True) entry_row = guiutils.get_two_column_box(Gtk.Label(label=label), entry, 180) vbox = Gtk.VBox(False, 2) vbox.pack_start(entry_row, False, False, 0) vbox.pack_start(guiutils.get_pad_label(12, 12), False, False, 0) alignment = guiutils.set_margins(vbox, 6, 24, 24, 24) dialog.vbox.pack_start(alignment, True, True, 0) set_outer_margins(dialog.vbox) default_behaviour(dialog) dialog.set_default_response(Gtk.ResponseType.ACCEPT) return (dialog, entry)
def _get_image_file_select_editor(editable_property): """ Returns GUI component for selecting image producing file """ dialog = Gtk.FileChooserDialog(_("Select Image Producing File"), None, Gtk.FileChooserAction.OPEN, (_("Cancel").encode('utf-8'), Gtk.ResponseType.CANCEL, _("OK").encode('utf-8'), Gtk.ResponseType.ACCEPT)) dialog.set_action(Gtk.FileChooserAction.OPEN) dialog.set_select_multiple(False) file_filter = utils.get_media_source_file_filter(False) dialog.add_filter(file_filter) file_select_button = Gtk.FileChooserButton.new_with_dialog(dialog) file_select_button.set_size_request(210, 28) file_select_label = Gtk.Label(editable_property.get_display_name()) editor_row = Gtk.HBox(False, 2) editor_row.pack_start(file_select_label, False, False, 2) editor_row.pack_start(guiutils.get_pad_label(3, 5), False, False, 2) editor_row.pack_start(file_select_button, False, False, 0) dialog.connect('response', editable_property.dialog_response_callback) return editor_row
def get_media_files_panel(media_list_view, add_cb, del_cb, col_changed_cb, proxy_cb, filtering_cb): # Create buttons and connect signals add_media_b = Gtk.Button(_("Add")) del_media_b = Gtk.Button(_("Delete")) add_media_b.connect("clicked", add_cb, None) del_media_b.connect("clicked", del_cb, None) add_media_b.set_tooltip_text(_("Add Media File to Bin")) del_media_b.set_tooltip_text(_("Delete Media File from Bin")) proxy_b = Gtk.Button() proxy_b.set_image( Gtk.Image.new_from_file(respaths.IMAGE_PATH + "proxy_button.png")) proxy_b.connect("clicked", proxy_cb, None) proxy_b.set_tooltip_text(_("Render Proxy Files For Selected Media")) gui.proxy_button = proxy_b columns_img = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "columns.png") columns_launcher = guicomponents.PressLaunch(col_changed_cb, columns_img, w=22, h=22) columns_launcher.surface_y = 9 all_pixbuf = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "show_all_files.png") audio_pixbuf = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "show_audio_files.png") graphics_pixbuf = cairo.ImageSurface.create_from_png( respaths.IMAGE_PATH + "show_graphics_files.png") video_pixbuf = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "show_video_files.png") imgseq_pixbuf = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "show_imgseq_files.png") pattern_pixbuf = cairo.ImageSurface.create_from_png( respaths.IMAGE_PATH + "show_pattern_producers.png") files_filter_launcher = guicomponents.ImageMenuLaunch( filtering_cb, [ all_pixbuf, video_pixbuf, audio_pixbuf, graphics_pixbuf, imgseq_pixbuf, pattern_pixbuf ], 24, 22) files_filter_launcher.surface_x = 3 files_filter_launcher.surface_y = 8 gui.media_view_filter_selector = files_filter_launcher buttons_box = Gtk.HBox(False, 1) buttons_box.pack_start(add_media_b, True, True, 0) buttons_box.pack_start(del_media_b, True, True, 0) buttons_box.pack_start(proxy_b, False, False, 0) buttons_box.pack_start(guiutils.get_pad_label(4, 4), False, False, 0) buttons_box.pack_start(columns_launcher.widget, False, False, 0) buttons_box.pack_start(files_filter_launcher.widget, False, False, 0) panel = Gtk.VBox() panel.pack_start(buttons_box, False, True, 0) panel.pack_start(media_list_view, True, True, 0) return panel
def __init__(self): Gtk.Dialog.__init__( self, _("Welcome To Flowblade 2"), None, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, (_("Select Preset Workflow and Continue").encode('utf-8'), Gtk.ResponseType.ACCEPT)) self.DEFAULT_SELECTION = 1 info_label_text_1 = _( "To audio sync clips you need move action origin clip by " ) # + str(data.clip_tline_media_offset - data.media_offset_frames) + _(" frames.") info_label_1 = Gtk.Label(info_label_text_1) info_label_text_2 = _( "To audio sync clips you need move action origin clip by " ) # + str(data.clip_tline_media_offset - data.media_offset_frames) + _(" frames.") info_label_2 = Gtk.Label(info_label_text_2) preset_workflow_text_1 = _( "workflow 1 " ) # + str(data.clip_tline_media_offset - data.media_offset_frames) + _(" frames.") workflow_select_item_1 = self.get_workflow_select_item( 1, preset_workflow_text_1) preset_workflow_text_2 = _( "workflow 2 " ) # + str(data.clip_tline_media_offset - data.media_offset_frames) + _(" frames.") workflow_select_item_2 = self.get_workflow_select_item( 2, preset_workflow_text_1) panel_vbox = Gtk.VBox(False, 2) panel_vbox.pack_start(guiutils.get_pad_label(24, 12), False, False, 0) panel_vbox.pack_start(guiutils.get_left_justified_box([info_label_1]), False, False, 0) panel_vbox.pack_start(workflow_select_item_1, False, False, 0) panel_vbox.pack_start(workflow_select_item_2, False, False, 0) panel_vbox.pack_start(info_label_2, False, False, 0) panel_vbox.pack_start(guiutils.get_pad_label(24, 24), False, False, 0) alignment = dialogutils.get_alignment2(panel_vbox) self.vbox.pack_start(alignment, True, True, 0) dialogutils.set_outer_margins(self.vbox) dialogs._default_behaviour(self) self.connect('response', self.done) self.show_all()
def fill_with_COMPONENTS_CENTERED_pattern(buttons_row, window): buttons_row.set_homogeneous(False) global w w = window buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start(w.worflow_launch.widget, False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(7, MIDDLE_ROW_HEIGHT), False, True, 0) buttons_row.pack_start(w.big_TC, False, True, 0) buttons_row.pack_start( guiutils.get_pad_label(7, MIDDLE_ROW_HEIGHT), False, True, 0) #### NOTE!!!!!! THIS DETERMINES THE HEIGHT OF MIDDLE ROW if editorpersistance.prefs.tools_selection == appconsts.TOOL_SELECTOR_IS_MENU: buttons_row.pack_start(w.tool_selector.widget, False, True, 0) if editorpersistance.prefs.force_small_midbar == False: if editorstate.SCREEN_WIDTH > NORMAL_WIDTH: buttons_row.pack_start(guiutils.get_pad_label(10, 10), False, True, 0) buttons_row.pack_start(_get_tools_buttons(), False, True, 0) #buttons_row.pack_start(guiutils.get_pad_label(120, 10), False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(20, 10), False, True, 0) else: buttons_row.pack_start(guiutils.get_pad_label(20, 10), False, True, 0) buttons_row.pack_start(_get_undo_buttons_panel(), False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(20, 10), False, True, 0) buttons_row.pack_start(_get_zoom_buttons_panel(), False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(20, 10), False, True, 0) buttons_row.pack_start(_get_edit_buttons_panel(), False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(20, 10), False, True, 0) if editorpersistance.prefs.force_small_midbar == False: if editorstate.screen_size_small_width() == False: buttons_row.pack_start(_get_edit_buttons_2_panel(), False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(20, 10), False, True, 0) buttons_row.pack_start(_get_edit_buttons_3_panel(), False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(20, 10), False, True, 0) buttons_row.pack_start(_get_monitor_insert_buttons(), False, True, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0)
def _create_region_editor(clip, editable_properties): aligned = filter(lambda ep: ep.name == "composite.aligned", editable_properties)[0] distort = filter(lambda ep: ep.name == "composite.distort", editable_properties)[0] operator = filter(lambda ep: ep.name == "composite.operator", editable_properties)[0] values = ["over", "and", "or", "xor"] deinterlace = filter(lambda ep: ep.name == "composite.deinterlace", editable_properties)[0] progressive = filter(lambda ep: ep.name == "composite.progressive", editable_properties)[0] force_values = [ _("Nothing"), _("Progressive"), _("Deinterlace"), _("Both") ] combo_box = gtk.combo_box_new_text() for val in force_values: combo_box.append_text(val) selection = _get_force_combo_index(deinterlace, progressive) combo_box.set_active(selection) combo_box.connect("changed", _compositor_editor_force_combo_box_callback, (deinterlace, progressive)) force_vbox = gtk.VBox(False, 4) force_vbox.pack_start(gtk.Label(_("Force")), True, True, 0) force_vbox.pack_start(combo_box, True, True, 0) hbox = gtk.HBox(False, 4) hbox.pack_start(guiutils.get_pad_label(3, 5), False, False, 0) hbox.pack_start(_get_boolean_check_box_button_column(_("Align"), aligned), False, False, 0) hbox.pack_start( _get_boolean_check_box_button_column(_("Distort"), distort), False, False, 0) hbox.pack_start(gtk.Label(), True, True, 0) hbox.pack_start(_get_combo_box_column(_("Alpha"), values, operator), False, False, 0) hbox.pack_start(gtk.Label(), True, True, 0) hbox.pack_start(force_vbox, False, False, 0) hbox.pack_start(guiutils.get_pad_label(3, 5), False, False, 0) return hbox
def __init__(self, editable_properties): self.widget = Gtk.VBox() # These properties hold the values that are writtenout to MLT to do the filtering self.cr_filter = lutfilter.CatmullRomFilter(editable_properties) default_curve = self.cr_filter.value_cr_curve self.current_edit_curve = CatmullRomFilterEditor.RGB # This is used to edit points of currently active curve self.curve_editor = CurvesBoxEditor(256.0, default_curve, self) # This is used to change currently active curve self.channel_buttons = glassbuttons.GlassButtonsToggleGroup(32, 19, 2, 2, 5) self.channel_buttons.add_button(cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "rgb_channel.png"), self.channel_changed) self.channel_buttons.add_button(cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "red_channel.png"), self.channel_changed) self.channel_buttons.add_button(cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "green_channel.png"), self.channel_changed) self.channel_buttons.add_button(cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "blue_channel.png"), self.channel_changed) self.channel_buttons.widget.set_pref_size(132, 28) self.channel_buttons.set_pressed_button(0) self.curve_buttons = glassbuttons.GlassButtonsGroup(32, 19, 2, 2, 5) self.curve_buttons.add_button(cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "linear_curve.png"), self.do_curve_reset_pressed) self.curve_buttons.add_button(cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "curve_s.png"), self.do_curve_reset_pressed) self.curve_buttons.add_button(cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "curve_flipped_s.png"), self.do_curve_reset_pressed) self.curve_buttons.widget.set_pref_size(97, 28) button_hbox = Gtk.HBox() button_hbox.pack_start(self.channel_buttons.widget, False, False, 0) button_hbox.pack_start(guiutils.get_pad_label(4, 4), False, False, 0) button_hbox.pack_start(self.curve_buttons.widget, False, False, 0) buttons_row = guiutils.get_in_centering_alignment(button_hbox) box_row = Gtk.HBox() box_row.pack_start(Gtk.Label(), True, True, 0) box_row.pack_start(self.curve_editor.widget, False, False, 0) box_row.pack_start(Gtk.Label(), True, True, 0) self.widget.pack_start(Gtk.Label(), True, True, 0) self.widget.pack_start(box_row, False, False, 0) self.widget.pack_start(guiutils.get_pad_label(12, 8), False, False, 0) self.widget.pack_start(buttons_row, False, False, 0) self.widget.pack_start(Gtk.Label(), True, True, 0)
def get_media_files_panel(media_list_view, add_cb, del_cb, col_changed_cb, hamburger_launch_pressed, filtering_cb): # Aug-2019 - SvdB - BB size_adj = 1 prefs = editorpersistance.prefs if prefs.double_track_hights: size_adj = 2 hamburger_launcher = guicomponents.HamburgerPressLaunch( hamburger_launch_pressed) guiutils.set_margins(hamburger_launcher.widget, 2, 0, 4, 12) columns_img = guiutils.get_cairo_image("columns") columns_launcher = guicomponents.PressLaunch(col_changed_cb, columns_img, w=22 * size_adj, h=22 * size_adj) columns_launcher.surface_y = 6 columns_launcher.widget.set_tooltip_text( _("Number of Media File columns.")) all_pixbuf = guiutils.get_cairo_image("show_all_files") audio_pixbuf = guiutils.get_cairo_image("show_audio_files") graphics_pixbuf = guiutils.get_cairo_image("show_graphics_files") video_pixbuf = guiutils.get_cairo_image("show_video_files") imgseq_pixbuf = guiutils.get_cairo_image("show_imgseq_files") pattern_pixbuf = guiutils.get_cairo_image("show_pattern_producers") unused_pixbuf = guiutils.get_cairo_image("show_unused_files") files_filter_launcher = guicomponents.ImageMenuLaunch( filtering_cb, [ all_pixbuf, video_pixbuf, audio_pixbuf, graphics_pixbuf, imgseq_pixbuf, pattern_pixbuf, unused_pixbuf ], 24 * size_adj, 22 * size_adj) files_filter_launcher.surface_x = 3 files_filter_launcher.surface_y = 4 files_filter_launcher.widget.set_tooltip_text( _("Visible Media File types.")) gui.media_view_filter_selector = files_filter_launcher bin_info = guicomponents.BinInfoPanel() buttons_box = Gtk.HBox(False, 1) buttons_box.pack_start(hamburger_launcher.widget, False, False, 0) buttons_box.pack_start(guiutils.get_pad_label(4, 4), False, False, 0) buttons_box.pack_start(columns_launcher.widget, False, False, 0) buttons_box.pack_start(files_filter_launcher.widget, False, False, 0) buttons_box.pack_start(Gtk.Label(), True, True, 0) buttons_box.pack_start(bin_info, False, False, 0) #buttons_box.pack_start(Gtk.Label(), True, True, 0) panel = Gtk.VBox() panel.pack_start(media_list_view, True, True, 0) panel.pack_start(buttons_box, False, True, 0) return (panel, bin_info)
def __init__(self, save_args_callback, load_args_callback, display_selection_callback): self.display_selection_callback = display_selection_callback self.args_edit_window = None self.text_buffer = None # only used here for small screen heights with dialog for setting agrs, but this value is always tested to determine where to get agrs if set self.ext = "" self.use_project_label = Gtk.Label(label=_("Use Project Profile:")) self.use_args_label = Gtk.Label(label=_("Render using args:")) self.use_args_check = Gtk.CheckButton() self.use_args_check.connect("toggled", self.use_args_toggled) self.opts_save_button = Gtk.Button() icon = Gtk.Image.new_from_stock(Gtk.STOCK_SAVE, Gtk.IconSize.MENU) self.opts_save_button.set_image(icon) self.opts_save_button.connect("clicked", lambda w: save_args_callback()) self.opts_save_button.set_sensitive(False) self.opts_load_button = Gtk.Button() icon = Gtk.Image.new_from_stock(Gtk.STOCK_OPEN, Gtk.IconSize.MENU) self.opts_load_button.set_image(icon) self.opts_load_button.connect("clicked", lambda w: load_args_callback()) self.open_in_bin = Gtk.CheckButton() self.open_args_editor_button = Gtk.Button(_("Edit Args:")) self.open_args_editor_button.connect("clicked", lambda w: self.open_edit_window()) self.open_args_editor_button.set_sensitive(False) self.args_info = Gtk.Label() self.args_info.set_sensitive(False) self.args_info.set_ellipsize(Pango.EllipsizeMode.END) use_opts_row = Gtk.HBox() use_opts_row.pack_start(self.use_args_label, False, False, 0) use_opts_row.pack_start(self.use_args_check, False, False, 0) use_opts_row.pack_start(Gtk.Label(), True, True, 0) use_opts_row.pack_start(self.opts_load_button, False, False, 0) use_opts_row.pack_start(self.opts_save_button, False, False, 0) args_edit_row = Gtk.HBox(False) args_edit_row.pack_start(self.open_args_editor_button, False, False, 0) args_edit_row.pack_start(guiutils.get_pad_label(4, 2), False, False, 0) args_edit_row.pack_start(self.args_info, True, True, 0) self.use_args_check.set_tooltip_text(_("Render using key=value rendering options")) self.opts_save_button.set_tooltip_text(_("Save Render Args into a text file")) self.opts_load_button.set_tooltip_text(_("Load Render Args from a text file")) self.vbox = Gtk.VBox(False, 2) self.vbox.pack_start(use_opts_row , False, False, 0) self.vbox.pack_start(args_edit_row, False, False, 0)
def __init__(self): self.dialog = gtk.Dialog( _("Creating Proxy Files"), gui.editor_window.window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Stop").encode('utf-8'), gtk.RESPONSE_REJECT)) self.render_progress_bar = gtk.ProgressBar() self.render_progress_bar.set_text("0 %") prog_align = gtk.Alignment(0.5, 0.5, 1.0, 0.0) prog_align.set_padding(0, 0, 0, 0) prog_align.add(self.render_progress_bar) prog_align.set_size_request(550, 30) self.elapsed_value = gtk.Label() self.current_render_value = gtk.Label() self.items_value = gtk.Label() est_label = guiutils.get_right_justified_box( [guiutils.bold_label(_("Elapsed:"))]) current_label = guiutils.get_right_justified_box( [guiutils.bold_label(_("Current Media File:"))]) items_label = guiutils.get_right_justified_box( [guiutils.bold_label(_("Rendering Item:"))]) est_label.set_size_request(250, 20) current_label.set_size_request(250, 20) items_label.set_size_request(250, 20) info_vbox = gtk.VBox(False, 0) info_vbox.pack_start( guiutils.get_left_justified_box([est_label, self.elapsed_value]), False, False, 0) info_vbox.pack_start( guiutils.get_left_justified_box( [current_label, self.current_render_value]), False, False, 0) info_vbox.pack_start( guiutils.get_left_justified_box([items_label, self.items_value]), False, False, 0) progress_vbox = gtk.VBox(False, 2) progress_vbox.pack_start(info_vbox, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 8), False, False, 0) progress_vbox.pack_start(prog_align, False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(12, 12, 12, 12) alignment.add(progress_vbox) alignment.show_all() self.dialog.vbox.pack_start(alignment, True, True, 0) self.dialog.set_has_separator(False) self.dialog.connect('response', self.stop_pressed) self.dialog.show()
def get_media_files_panel(media_list_view, add_cb, del_cb, col_changed_cb, proxy_cb, filtering_cb): # Create buttons and connect signals add_media_b = gtk.Button(_("Add")) del_media_b = gtk.Button(_("Delete")) add_media_b.connect("clicked", add_cb, None) del_media_b.connect("clicked", del_cb, None) add_media_b.set_tooltip_text(_("Add Media File to Bin")) del_media_b.set_tooltip_text(_("Delete Media File from Bin")) proxy_b = gtk.Button() proxy_b.set_image(gtk.image_new_from_file(respaths.IMAGE_PATH + "proxy_button.png")) proxy_b.connect("clicked", proxy_cb, None) proxy_b.set_tooltip_text(_("Render Proxy Files For Selected Media")) gui.proxy_button = proxy_b columns_img = gtk.image_new_from_file(respaths.IMAGE_PATH + "columns.png") adj = gtk.Adjustment(value=editorpersistance.prefs.media_columns, lower=MEDIA_PANEL_MIN_ROWS, upper=MEDIA_PANEL_MAX_ROWS, step_incr=1) spin = gtk.SpinButton(adj) spin.set_numeric(True) spin.set_size_request(40, 30) spin.connect("changed", col_changed_cb) all_pixbuf = gtk.gdk.pixbuf_new_from_file(respaths.IMAGE_PATH + "show_all_files.png") audio_pixbuf = gtk.gdk.pixbuf_new_from_file(respaths.IMAGE_PATH + "show_audio_files.png") graphics_pixbuf = gtk.gdk.pixbuf_new_from_file(respaths.IMAGE_PATH + "show_graphics_files.png") video_pixbuf = gtk.gdk.pixbuf_new_from_file(respaths.IMAGE_PATH + "show_video_files.png") imgseq_pixbuf = gtk.gdk.pixbuf_new_from_file(respaths.IMAGE_PATH + "show_imgseq_files.png") pattern_pixbuf = gtk.gdk.pixbuf_new_from_file(respaths.IMAGE_PATH + "show_pattern_producers.png") files_filter_launcher = guicomponents.ImageMenuLaunch(filtering_cb, [all_pixbuf, video_pixbuf, audio_pixbuf, graphics_pixbuf, imgseq_pixbuf, pattern_pixbuf], 20, 22) files_filter_launcher.pixbuf_x = 3 files_filter_launcher.pixbuf_y = 9 gui.media_view_filter_selector = files_filter_launcher buttons_box = gtk.HBox(False,1) buttons_box.pack_start(add_media_b, True, True, 0) buttons_box.pack_start(del_media_b, True, True, 0) buttons_box.pack_start(proxy_b, False, False, 0) buttons_box.pack_start(guiutils.get_pad_label(4, 4), False, False, 0) buttons_box.pack_start(columns_img, False, False, 0) buttons_box.pack_start(spin, False, False, 0) buttons_box.pack_start(files_filter_launcher.widget, False, False, 0) panel = gtk.VBox() panel.pack_start(buttons_box, False, True, 0) panel.pack_start(media_list_view, True, True, 0) out_align = gtk.Alignment(0.5, 0.5, 1.0, 1.0) out_align.set_padding(4, 4, 0, 4) out_align.add(panel) return out_align
def get_compositor_clip_panel(): create_widgets() compositor_vbox = Gtk.VBox(False, 2) compositor_vbox.pack_start(widgets.compositor_info, False, False, 0) compositor_vbox.pack_start(Gtk.Label(), True, True, 0) compositor_vbox.pack_start(widgets.reset_b, False, False, 0) compositor_vbox.pack_start(widgets.delete_b, False, False, 0) compositor_vbox.pack_start(guiutils.get_pad_label(5, 3), False, False, 0) set_enabled(False) return compositor_vbox
def get_motion_render_progress_panel(file_name, progress_bar): status_box = gtk.HBox(False, 2) status_box.pack_start(gtk.Label(file_name),False, False, 0) status_box.pack_start(gtk.Label(), True, True, 0) progress_vbox = gtk.VBox(False, 2) progress_vbox.pack_start(status_box, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 10), False, False, 0) progress_vbox.pack_start(progress_bar, False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(12, 12, 12, 12) alignment.add(progress_vbox) return alignment
def get_compositor_clip_panel(): create_widgets() compositor_vbox = gtk.VBox(False, 2) compositor_vbox.pack_start(widgets.compositor_info, False, False, 0) compositor_vbox.pack_start(gtk.Label(), True, True, 0) compositor_vbox.pack_start(widgets.reset_b, False, False, 0) compositor_vbox.pack_start(widgets.delete_b, False, False, 0) compositor_vbox.pack_start(guiutils.get_pad_label(5, 3), False, False, 0) compositor_vbox.set_size_request(COMPOSITOR_PANEL_LEFT_WIDTH, 200) set_enabled(False) return compositor_vbox
def __init__(self, editor_parent): """ editor_parent needs to implement interface: ------------------------------------------- editor_parent.view_size_changed(widget_active_index) editor_parent.menu_item_activated() """ GObject.GObject.__init__(self) self.set_homogeneous(False) self.set_spacing(2) self.editor_parent = editor_parent name_label = Gtk.Label(label=_("View:")) surface = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "geom_action.png") action_menu_button = guicomponents.PressLaunch(self._show_actions_menu, surface, 24, 22) size_select = Gtk.ComboBoxText() size_select.append_text(_("Large")) size_select.append_text(_("Medium")) size_select.append_text(_("Small")) size_select.set_active(1) size_select.set_size_request(120, 30) font_desc = Pango.FontDescription("normal 9") size_select.get_child().modify_font(font_desc) size_select.connect("changed", lambda w,e: editor_parent.view_size_changed(w.get_active()), None) self.size_select = size_select # Build row self.pack_start(guiutils.get_pad_label(2, 10), False, False, 0) self.pack_start(name_label, False, False, 0) self.pack_start(size_select, False, False, 0) self.pack_start(Gtk.Label(), True, True, 0) self.pack_start(action_menu_button.widget, False, False, 0) self.pack_start(guiutils.get_pad_label(2, 10), False, False, 0)
def get_media_files_panel(media_list_view, add_cb, del_cb, col_changed_cb, proxy_cb, filtering_cb): # Create buttons and connect signals add_media_b = Gtk.Button(_("Add")) del_media_b = Gtk.Button(_("Delete")) add_media_b.connect("clicked", add_cb, None) del_media_b.connect("clicked", del_cb, None) add_media_b.set_tooltip_text(_("Add Media File to Bin")) del_media_b.set_tooltip_text(_("Delete Media File from Bin")) proxy_b = Gtk.Button() proxy_b.set_image(Gtk.Image.new_from_file(respaths.IMAGE_PATH + "proxy_button.png")) proxy_b.connect("clicked", proxy_cb, None) proxy_b.set_tooltip_text(_("Render Proxy Files For Selected Media")) gui.proxy_button = proxy_b columns_img = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "columns.png") columns_launcher = guicomponents.PressLaunch(col_changed_cb, columns_img, w=22, h=22) columns_launcher.surface_y = 7 all_pixbuf = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "show_all_files.png") audio_pixbuf = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "show_audio_files.png") graphics_pixbuf = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "show_graphics_files.png") video_pixbuf = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "show_video_files.png") imgseq_pixbuf = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "show_imgseq_files.png") pattern_pixbuf = cairo.ImageSurface.create_from_png(respaths.IMAGE_PATH + "show_pattern_producers.png") files_filter_launcher = guicomponents.ImageMenuLaunch(filtering_cb, [all_pixbuf, video_pixbuf, audio_pixbuf, graphics_pixbuf, imgseq_pixbuf, pattern_pixbuf], 24, 22) files_filter_launcher.pixbuf_x = 3 files_filter_launcher.pixbuf_y = 9 gui.media_view_filter_selector = files_filter_launcher buttons_box = Gtk.HBox(False,1) buttons_box.pack_start(add_media_b, True, True, 0) buttons_box.pack_start(del_media_b, True, True, 0) buttons_box.pack_start(proxy_b, False, False, 0) buttons_box.pack_start(guiutils.get_pad_label(4, 4), False, False, 0) buttons_box.pack_start(columns_launcher.widget, False, False, 0) buttons_box.pack_start(files_filter_launcher.widget, False, False, 0) panel = Gtk.VBox() panel.pack_start(buttons_box, False, True, 0) panel.pack_start(media_list_view, True, True, 0) out_align = Gtk.Alignment.new(0.5, 0.5, 1.0, 1.0) out_align.set_padding(4, 4, 0, 4) out_align.add(panel) return out_align
def show_render_properties_panel(render_item): if render_item.render_data.user_args == False: enc_opt = renderconsumer.encoding_options[render_item.render_data.enc_index] enc_desc = enc_opt.name audio_desc = enc_opt.audio_desc quality_opt = enc_opt.quality_options[render_item.render_data.quality_index] quality_desc = quality_opt.name else: enc_desc = " -" quality_desc = " -" audio_desc = " -" user_args = str(render_item.render_data.user_args) start_frame, end_frame, wait_for_stop_render = get_render_range(render_item) start_str = utils.get_tc_string_with_fps(start_frame, render_item.render_data.fps) end_str = utils.get_tc_string_with_fps(end_frame, render_item.render_data.fps) LEFT_WIDTH = 200 render_item.get_display_name() row0 = guiutils.get_two_column_box(guiutils.bold_label(_("Encoding:")), Gtk.Label(label=enc_desc), LEFT_WIDTH) row1 = guiutils.get_two_column_box(guiutils.bold_label(_("Quality:")), Gtk.Label(label=quality_desc), LEFT_WIDTH) row2 = guiutils.get_two_column_box(guiutils.bold_label(_("Audio Encoding:")), Gtk.Label(label=audio_desc), LEFT_WIDTH) row3 = guiutils.get_two_column_box(guiutils.bold_label(_("Use User Args:")), Gtk.Label(label=user_args), LEFT_WIDTH) row4 = guiutils.get_two_column_box(guiutils.bold_label(_("Start:")), Gtk.Label(label=start_str), LEFT_WIDTH) row5 = guiutils.get_two_column_box(guiutils.bold_label(_("End:")), Gtk.Label(label=end_str), LEFT_WIDTH) row6 = guiutils.get_two_column_box(guiutils.bold_label(_("Frames Per Second:")), Gtk.Label(label=str(render_item.render_data.fps)), LEFT_WIDTH) row7 = guiutils.get_two_column_box(guiutils.bold_label(_("Render Profile Name:")), Gtk.Label(label=str(render_item.render_data.profile_name)), LEFT_WIDTH) row8 = guiutils.get_two_column_box(guiutils.bold_label(_("Render Profile:")), Gtk.Label(label=render_item.render_data.profile_desc), LEFT_WIDTH) vbox = Gtk.VBox(False, 2) vbox.pack_start(Gtk.Label(label=render_item.get_display_name()), False, False, 0) vbox.pack_start(guiutils.get_pad_label(12, 16), False, False, 0) vbox.pack_start(row0, False, False, 0) vbox.pack_start(row1, False, False, 0) vbox.pack_start(row2, False, False, 0) vbox.pack_start(row3, False, False, 0) vbox.pack_start(row4, False, False, 0) vbox.pack_start(row5, False, False, 0) vbox.pack_start(row6, False, False, 0) vbox.pack_start(row7, False, False, 0) vbox.pack_start(row8, False, False, 0) vbox.pack_start(Gtk.Label(), True, True, 0) title = _("Render Properties") dialogutils.panel_ok_dialog(title, vbox)
def __init__(self): self.dialog = gtk.Dialog(_("Creating Proxy Files"), gui.editor_window.window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (_("Stop").encode('utf-8'), gtk.RESPONSE_REJECT)) self.render_progress_bar = gtk.ProgressBar() self.render_progress_bar.set_text("0 %") prog_align = gtk.Alignment(0.5, 0.5, 1.0, 0.0) prog_align.set_padding(0, 0, 0, 0) prog_align.add(self.render_progress_bar) prog_align.set_size_request(550, 30) self.elapsed_value = gtk.Label() self.current_render_value = gtk.Label() self.items_value = gtk.Label() est_label = guiutils.get_right_justified_box([guiutils.bold_label(_("Elapsed:"))]) current_label = guiutils.get_right_justified_box([guiutils.bold_label(_("Current Media File:"))]) items_label = guiutils.get_right_justified_box([guiutils.bold_label(_("Rendering Item:"))]) est_label.set_size_request(250, 20) current_label.set_size_request(250, 20) items_label.set_size_request(250, 20) info_vbox = gtk.VBox(False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([est_label, self.elapsed_value]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([current_label, self.current_render_value]), False, False, 0) info_vbox.pack_start(guiutils.get_left_justified_box([items_label, self.items_value]), False, False, 0) progress_vbox = gtk.VBox(False, 2) progress_vbox.pack_start(info_vbox, False, False, 0) progress_vbox.pack_start(guiutils.get_pad_label(10, 8), False, False, 0) progress_vbox.pack_start(prog_align, False, False, 0) alignment = gtk.Alignment(0.5, 0.5, 1.0, 1.0) alignment.set_padding(12, 12, 12, 12) alignment.add(progress_vbox) alignment.show_all() self.dialog.vbox.pack_start(alignment, True, True, 0) self.dialog.set_has_separator(False) self.dialog.connect('response', self.stop_pressed) self.dialog.show()
def fill_with_TC_LEFT_pattern(buttons_row, window): global w w = window buttons_row.pack_start(w.big_TC.widget, False, True, 0) buttons_row.pack_start(guiutils.get_pad_label(7, MIDDLE_ROW_HEIGHT), False, True, 0) #### NOTE!!!!!! THIS DETERMINES THE HEIGHT OF MIDDLE ROW buttons_row.pack_start(w.modes_selector.widget, False, True, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0) if editorstate.SCREEN_WIDTH > 1279: buttons_row.pack_start(_get_tools_buttons(), False, True, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start(_get_undo_buttons_panel(), False, True, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start(_get_zoom_buttons_panel(),False, True, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start(_get_edit_buttons_panel(),False, True, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start(_get_transition_button(), False, True, 0) buttons_row.pack_start(Gtk.Label(), True, True, 0) buttons_row.pack_start(_get_monitor_insert_buttons(), False, True, 0)
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)