def _init_gui(self): self._dialog = gimpui.Dialog(title=pg.config.PLUGIN_TITLE, role=None) self._dialog.set_transient() self._dialog.set_border_width(self._BORDER_WIDTH) self._dialog.set_default_size(self._DIALOG_WIDTH, -1) self._button_stop = gtk.Button() self._button_stop.set_label(_("_Stop")) self._buttonbox = gtk.HButtonBox() self._buttonbox.pack_start(self._button_stop, expand=False, fill=False) self._progress_bar = gtk.ProgressBar() self._progress_bar.set_ellipsize(pango.ELLIPSIZE_MIDDLE) self._hbox_action_area = gtk.HBox(homogeneous=False) self._hbox_action_area.set_spacing(self._HBOX_HORIZONTAL_SPACING) self._hbox_action_area.pack_start(self._progress_bar, expand=True, fill=True) self._hbox_action_area.pack_end(self._buttonbox, expand=False, fill=False) self._dialog.vbox.pack_end(self._hbox_action_area, expand=False, fill=False) self._button_stop.connect("clicked", self._on_button_stop_clicked) self._dialog.connect("delete-event", self._on_dialog_delete_event)
def _init_gui(self): self._dialog = gimpui.Dialog(title="", role=None, parent=self._parent, flags=gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT) self._dialog.set_transient_for(self._parent) self._dialog.set_title(self._title) self._dialog.set_border_width(self._DIALOG_BORDER_WIDTH) self._dialog.set_resizable(False) self._dialog_icon = gtk.Image() self._dialog_icon.set_from_stock(gtk.STOCK_DIALOG_QUESTION, gtk.ICON_SIZE_DIALOG) self._dialog_text = gtk.Label("") self._dialog_text.set_line_wrap(True) self._dialog_text.set_use_markup(True) self._dialog_text_event_box = gtk.EventBox() self._dialog_text_event_box.add(self._dialog_text) self._hbox_dialog_contents = gtk.HBox(homogeneous=False) self._hbox_dialog_contents.set_spacing( self._DIALOG_HBOX_CONTENTS_SPACING) self._hbox_dialog_contents.pack_start(self._dialog_icon, expand=False, fill=False) self._hbox_dialog_contents.pack_start(self._dialog_text_event_box, expand=False, fill=False) self._checkbutton_apply_to_all = gtk.CheckButton( label=_("_Apply action to all files")) self._checkbutton_apply_to_all.set_use_underline(True) self._dialog.vbox.set_spacing(self._DIALOG_VBOX_SPACING) self._dialog.vbox.pack_start(self._hbox_dialog_contents, expand=False, fill=False) self._dialog.vbox.pack_start(self._checkbutton_apply_to_all, expand=False, fill=False) self._buttons = {} for value, display_name in self.values_and_display_names: self._buttons[value] = self._dialog.add_button(display_name, value) self._dialog.action_area.set_spacing(self._DIALOG_ACTION_AREA_SPACING) self._checkbutton_apply_to_all.connect( "toggled", self._on_checkbutton_apply_to_all_toggled) self._is_dialog_text_allocated_size = False self._dialog_text_event_box.connect( "size-allocate", self._on_dialog_text_event_box_size_allocate) self._dialog.set_focus(self._buttons[self.default_value])
def create_dialog(self): self.dialog = gimpui.Dialog("Hue map", "hue_map_dialog") #3x2 non-homogenous table self.table = gtk.Table(3, 2, False) self.table.set_row_spacings(8) self.table.set_col_spacings(8) self.table.show() #gradient selection button self.gradient_button = gimpui.GradientSelectButton("Pick a gradient") if self.gradient_exists(shelf[self.shelfkey]["gradient_name"]): self.gradient_button.set_gradient( shelf[self.shelfkey]["gradient_name"]) self.gradient_button.show() self.table.attach(self.gradient_button, 0, 1, 0, 1) #reset button self.reset_button = gtk.Button("_Reset gradient") self.reset_button.show() self.reset_button.connect("clicked", self.reset_clicked) self.table.attach(self.reset_button, 1, 2, 0, 1) #flatten checkbox self.flatten_check = gtk.CheckButton("Flatten the final image") self.flatten_check.set_active(shelf[self.shelfkey]["flatten"]) self.flatten_check.show() self.table.attach(self.flatten_check, 0, 2, 1, 2) #dialog inner frames #there is a table inside a hbox inside a vbox self.dialog.vbox.hbox1 = gtk.HBox(False, 7) self.dialog.vbox.hbox1.show() self.dialog.vbox.pack_start(self.dialog.vbox.hbox1, True, True, 7) self.dialog.vbox.hbox1.pack_start(self.table, True, True, 7) #buttons at the bottom #Preview, Ok and Cancel self.preview_button = gtk.Button("_Preview") self.preview_button.show() self.preview_button.connect("clicked", self.preview_clicked) if gtk.alternative_dialog_button_order(): self.dialog.action_area.add(self.preview_button) self.ok_button = self.dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) self.cancel_button = self.dialog.add_button( gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) else: self.cancel_button = self.dialog.add_button( gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) self.ok_button = self.dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) self.dialog.action_area.add(self.preview_button) self.ok_button.connect("clicked", self.ok_clicked) self.cancel_button.connect("clicked", self.cancel_clicked)
def _init_gui(self): self._dialog = gimpui.Dialog(title="", role=None) self._dialog.set_transient() self._dialog.set_border_width(8) self._dialog.set_resizable(False) self._dialog.set_title(self._title) self._dialog_icon = gtk.Image() self._dialog_icon.set_from_stock(gtk.STOCK_DIALOG_QUESTION, gtk.ICON_SIZE_DIALOG) self._dialog_text = gtk.Label("") self._hbox_dialog_contents = gtk.HBox(homogeneous=False) self._hbox_dialog_contents.set_spacing(10) self._hbox_dialog_contents.pack_start(self._dialog_icon, expand=False, fill=False) self._hbox_dialog_contents.pack_start(self._dialog_text, expand=False, fill=False) if self._use_mnemonics: apply_to_all_checkbox_label = _("_Apply action to all files") else: apply_to_all_checkbox_label = _("Apply action to all files") self._apply_to_all_checkbox = gtk.CheckButton( label=apply_to_all_checkbox_label) self._apply_to_all_checkbox.set_use_underline(self._use_mnemonics) self._hbox_apply_to_all = gtk.HBox(homogeneous=False) self._hbox_apply_to_all.set_spacing(5) self._hbox_apply_to_all.pack_start(self._apply_to_all_checkbox, expand=False, fill=False) self._dialog.vbox.set_spacing(3) self._dialog.vbox.pack_start(self._hbox_dialog_contents, expand=False, fill=False) self._dialog.vbox.pack_start(self._hbox_apply_to_all, expand=False, fill=False) self._buttons = {} for value, display_name in self.values_and_display_names: self._buttons[value] = self._dialog.add_button(display_name, value) self._dialog.action_area.set_spacing(8) self._apply_to_all_checkbox.connect("toggled", self._on_apply_to_all_changed) self._dialog.set_focus(self._buttons[self.default_value])
def create_dialog(self): self.dialog = gimpui.Dialog("LBP", "lbp_dialog") #3x2 non-homogenous table self.table = gtk.Table(3, 2, False) self.table.set_row_spacings(8) self.table.set_col_spacings(8) self.table.show() #create label for radius rad = 1 self.label = gtk.Label("Radius: ") self.label.set_alignment(0.5, 0.5) self.label.show() self.table.attach(self.label, 1, 2, 0, 1) #create button for radius adjustmentRadius = gtk.Adjustment(self.radius, 1, 8, 1) self.rad = gtk.SpinButton(adjustmentRadius, rad) self.rad.show() self.rad.connect("value-changed", self.spin) self.table.attach(self.rad, 2, 3, 0, 1) #dialog inner frames #there is a table inside a hbox inside a vbox self.dialog.vbox.hbox1 = gtk.HBox(False, 7) self.dialog.vbox.hbox1.show() self.dialog.vbox.pack_start(self.dialog.vbox.hbox1, True, True, 7) self.dialog.vbox.hbox1.pack_start(self.table, True, True, 7) #buttons at the bottom #Ok and Cancel if gtk.alternative_dialog_button_order(): self.ok_button = self.dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) self.cancel_button = self.dialog.add_button( gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) else: self.cancel_button = self.dialog.add_button( gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) self.ok_button = self.dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) self.ok_button.connect("clicked", self.ok_clicked)
def _init_gui(self): self._dialog = gimpui.Dialog(title=pygimplib.config.PLUGIN_TITLE, role=None) self._dialog.set_transient() self._dialog.set_border_width(8) self._dialog.set_default_size(self._DIALOG_WIDTH, -1) self._button_stop = gtk.Button() self._button_stop.set_label(_("_Stop")) self._buttonbox = gtk.HButtonBox() self._buttonbox.pack_start(self._button_stop, expand=False, fill=False) self._hbox_action_area = gtk.HBox(homogeneous=False) self._hbox_action_area.set_spacing(self._HBOX_HORIZONTAL_SPACING) self._hbox_action_area.pack_start(self._vbox_progress_bars, expand=True, fill=True) self._hbox_action_area.pack_end(self._buttonbox, expand=False, fill=False) self._dialog.vbox.pack_end(self._hbox_action_area, expand=False, fill=False) self._button_stop.connect("clicked", self._stop) self._dialog.connect("delete-event", self._stop)
def showDialog(self): self.dialog = gimpui.Dialog("Selection Bevel", "beveldialog") self.table = gtk.Table(16, 4, True) self.table.set_homogeneous(False) self.table.set_row_spacings(8) self.table.set_col_spacings(8) self.table.show() #layer mode parameter self.lmode_label = self.make_label("_Layer mode:") self.table.attach(self.lmode_label, 0, 1, 1, 2) self.lmode_box = self.make_blend_mode_box() self.lmode_box.set_active(HARDLIGHT_MODE) self.lmode_label.set_mnemonic_widget(self.lmode_box) self.table.attach(self.lmode_box, 1, 4, 1, 2) self.lmode_box.show() #direction parameter self.up_label = self.make_label("_Direction:") self.table.attach(self.up_label, 0, 1, 2, 3) self.up_radio = gtk.RadioButton(None, "_Up", True) self.down_radio = gtk.RadioButton(self.up_radio, "Do_wn", True) self.up_radio.set_active(True) self.down_radio.set_active(False) self.up_radio.show() self.down_radio.show() self.table.attach(self.up_radio, 1, 2, 2, 3) self.table.attach(self.down_radio, 2, 3, 2, 3) #inner/outer parameter self.inner_label = self.make_label("_Bevel type:") self.table.attach(self.inner_label, 0, 1, 3, 4) self.inner_radio = gtk.RadioButton(None, "_Inner bevel", True) self.outer_radio = gtk.RadioButton(self.inner_radio, "Ou_ter bevel", True) self.inner_radio.set_active(True) self.outer_radio.set_active(False) self.inner_radio.show() self.outer_radio.show() self.table.attach(self.inner_radio, 1, 2, 3, 4) self.table.attach(self.outer_radio, 2, 3, 3, 4) #width self.width_label = self.make_label("Bevel _width:") self.table.attach(self.width_label, 0, 1, 4, 5) self.width_spinner = self.make_slider_and_spinner( 10.0, 1.0, 250.0, 0.5, 5.0, 1) self.width_spinner['adj'].set_value(10.0) self.width_label.set_mnemonic_widget(self.width_spinner['spinner']) self.table.attach(self.width_spinner['slider'], 1, 2, 4, 5) self.table.attach(self.width_spinner['spinner'], 2, 3, 4, 5) #height self.height_label = self.make_label("Bevel _height:") self.table.attach(self.height_label, 0, 1, 5, 6) self.height_spinner = self.make_slider_and_spinner( 10.0, 1.0, 250.0, 0.5, 5.0, 1) self.height_spinner['adj'].set_value(10.0) self.height_label.set_mnemonic_widget(self.height_spinner['spinner']) self.table.attach(self.height_spinner['slider'], 1, 2, 5, 6) self.table.attach(self.height_spinner['spinner'], 2, 3, 5, 6) #shape self.shape_label = self.make_label("_Shape curve:") self.table.attach(self.shape_label, 0, 1, 6, 7) self.shape_spinner = self.make_slider_and_spinner( 0.0, -127.0, 128.0, 1.0, 10.0, 0) self.shape_spinner['adj'].set_value(0.0) self.shape_label.set_mnemonic_widget(self.shape_spinner['spinner']) self.table.attach(self.shape_spinner['slider'], 1, 2, 6, 7) self.table.attach(self.shape_spinner['spinner'], 2, 3, 6, 7) #prenoise self.prenoise_label = self.make_label("Pre-emboss _noise:") self.table.attach(self.prenoise_label, 0, 1, 7, 8) self.prenoise_spinner = self.make_slider_and_spinner( 0.0, 0.0, 25.0, 1.0, 10.0, 0) self.prenoise_spinner['adj'].set_value(0.0) self.prenoise_label.set_mnemonic_widget( self.prenoise_spinner['spinner']) self.table.attach(self.prenoise_spinner['slider'], 1, 2, 7, 8) self.table.attach(self.prenoise_spinner['spinner'], 2, 3, 7, 8) #azimuth self.azimuth_label = self.make_label("Light _angle:") self.table.attach(self.azimuth_label, 0, 1, 8, 9) self.azimuth_spinner = self.make_slider_and_spinner( 135.0, 0.0, 360.0, 1.0, 10.0, 1) self.azimuth_spinner['adj'].set_value(135.0) self.azimuth_label.set_mnemonic_widget(self.azimuth_spinner['spinner']) self.table.attach(self.azimuth_spinner['slider'], 1, 2, 8, 9) self.table.attach(self.azimuth_spinner['spinner'], 2, 3, 8, 9) #elevation self.elevation_label = self.make_label("Light _elevation:") self.table.attach(self.elevation_label, 0, 1, 9, 10) self.elevation_spinner = self.make_slider_and_spinner( 30.0, 0.0, 90.0, 1.0, 10.0, 1) self.elevation_spinner['adj'].set_value(30.0) self.elevation_label.set_mnemonic_widget( self.elevation_spinner['spinner']) self.table.attach(self.elevation_spinner['slider'], 1, 2, 9, 10) self.table.attach(self.elevation_spinner['spinner'], 2, 3, 9, 10) #depth self.depth_label = self.make_label("De_pth:") self.table.attach(self.depth_label, 0, 1, 10, 11) self.depth_spinner = self.make_slider_and_spinner( 20.0, 0.0, 50.0, 1.0, 10.0, 0) self.depth_spinner['adj'].set_value(20.0) self.depth_label.set_mnemonic_widget(self.depth_spinner['spinner']) self.table.attach(self.depth_spinner['slider'], 1, 2, 10, 11) self.table.attach(self.depth_spinner['spinner'], 2, 3, 10, 11) #postblur self.postblur_label = self.make_label("Post-e_mboss blur:") self.table.attach(self.postblur_label, 0, 1, 11, 12) self.postblur_spinner = self.make_slider_and_spinner( 3.0, 0.0, 50.0, 0.1, 1.0, 1) self.postblur_spinner['adj'].set_value(3.0) self.postblur_label.set_mnemonic_widget( self.postblur_spinner['spinner']) self.table.attach(self.postblur_spinner['slider'], 1, 2, 11, 12) self.table.attach(self.postblur_spinner['spinner'], 2, 3, 11, 12) #opacity self.opacity_label = self.make_label("Opac_ity:") self.table.attach(self.opacity_label, 0, 1, 12, 13) self.opacity_spinner = self.make_slider_and_spinner( 100.0, 0.0, 100.0, 1.0, 10.0, 1) self.opacity_spinner['adj'].set_value(100.0) self.opacity_label.set_mnemonic_widget(self.opacity_spinner['spinner']) self.table.attach(self.opacity_spinner['slider'], 1, 2, 12, 13) self.table.attach(self.opacity_spinner['spinner'], 2, 3, 12, 13) #gloss self.gloss_label = self.make_label("_Gloss:") self.table.attach(self.gloss_label, 0, 1, 13, 14) self.gloss_spinner = self.make_slider_and_spinner( 0.0, 0.0, 10.0, 1.0, 1.0, 0) self.gloss_spinner['adj'].set_value(0.0) self.gloss_label.set_mnemonic_widget(self.gloss_spinner['spinner']) self.table.attach(self.gloss_spinner['slider'], 1, 2, 13, 14) self.table.attach(self.gloss_spinner['spinner'], 2, 3, 13, 14) #ialpha self.ialpha_check = gtk.CheckButton("Intersect with alpha") self.ialpha_check.show() self.ialpha_check.set_active(False) self.table.attach(self.ialpha_check, 1, 2, 14, 15) #end parameters #see if saved parameters are found, if so restore them d = self.restore_values() #debugMessage(str(d)) if not d == None: values = [ int(d[0]), int(d[1]), int(d[2]), float(d[3]), float(d[4]), float(d[5]), float(d[6]), float(d[7]), float(d[8]), float(d[9]), float(d[10]), float(d[11]), int(d[12]), float(d[13]) ] self.lmode_box.set_active(values[0]) if values[1] == 1: self.up_radio.set_active(True) elif values[1] == 0: self.down_radio.set_active(True) if values[2] == 1: self.inner_radio.set_active(True) elif values[2] == 0: self.outer_radio.set_active(True) self.width_spinner['adj'].set_value(values[3]) self.shape_spinner['adj'].set_value(values[4]) self.prenoise_spinner['adj'].set_value(values[5]) self.azimuth_spinner['adj'].set_value(values[6]) self.elevation_spinner['adj'].set_value(values[7]) self.depth_spinner['adj'].set_value(values[8]) self.postblur_spinner['adj'].set_value(values[9]) self.opacity_spinner['adj'].set_value(values[10]) self.gloss_spinner['adj'].set_value(values[11]) if values[12] == 1: self.ialpha_check.set_active(True) if values[12] == 0: self.ialpha_check.set_active(False) self.height_spinner['adj'].set_value(values[13]) #buttons self.dialog.vbox.hbox1 = gtk.HBox(False, 7) self.dialog.vbox.hbox1.show() self.dialog.vbox.pack_start(self.dialog.vbox.hbox1, True, True, 7) self.dialog.vbox.hbox1.pack_start(self.table, True, True, 7) reset_button = gtk.Button("Reset") reset_button.connect("clicked", self.resetbutton) reset_button.show() self.preview_button = gtk.Button("Preview") self.preview_button.connect("clicked", self.preview) self.preview_button.set_size_request(100, -1) self.preview_button.show() # if gtk.alternative_dialog_button_order(): # ok_button = self.dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) # cancel_button = self.dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) # self.dialog.action_area.add(reset_button) # self.dialog.action_area.add(self.preview_button) # else: self.dialog.action_area.add(reset_button) self.dialog.action_area.add(self.preview_button) cancel_button = self.dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) ok_button = self.dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) ok_button.connect("clicked", self.okbutton) cancel_button.connect("clicked", self.cancelbutton) self.dialog.show() self.dialog.run() self.removePreviews()
def _init_gui(self): self.dialog = gimpui.Dialog(title=_(constants.PLUGIN_TITLE), role=constants.PLUGIN_PROGRAM_NAME) self.dialog.set_transient() self.dialog.set_default_size(*self.DIALOG_SIZE) self.dialog.set_border_width(self.DIALOG_BORDER_WIDTH) self.folder_chooser_label = gtk.Label() self.folder_chooser_label.set_markup("<b>" + _("Save in folder:") + "</b>") self.folder_chooser_label.set_alignment(0.0, 0.5) self.folder_chooser = gtk.FileChooserWidget(action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER) self.file_extension_label = gtk.Label() self.file_extension_label.set_markup("<b>" + self.settings['main']['file_extension'].display_name + ":</b>") self.file_extension_label.set_alignment(0.0, 0.5) self.file_extension_entry = pggui.FileExtensionEntry() self.file_extension_entry.set_size_request(100, -1) self.label_message = gtk.Label() self.label_message.set_alignment(0.0, 0.5) self.label_message.set_ellipsize(pango.ELLIPSIZE_MIDDLE) self.expander_advanced_settings = gtk.Expander() self.expander_advanced_settings.set_use_markup(True) self.expander_advanced_settings.set_use_underline(True) self.expander_advanced_settings.set_label("<b>" + _("_Advanced Settings") + "</b>") self.expander_advanced_settings.set_spacing(self.ADVANCED_SETTINGS_VERTICAL_SPACING // 2) self.advanced_settings_file_ext_mode_label = gtk.Label( self.settings['main']['file_ext_mode'].display_name + ":") self.advanced_settings_file_ext_mode_label.set_alignment(0, 0.5) self.advanced_settings_square_bracketed_mode_label = gtk.Label( self.settings['main']['square_bracketed_mode'].display_name + ":") self.advanced_settings_square_bracketed_mode_label.set_alignment(0, 0.5) self.settings.initialize_gui({ 'file_extension': [ pgsetting.SettingGuiTypes.file_extension_entry, self.file_extension_entry], 'output_directory': [ pgsetting.SettingGuiTypes.folder_chooser, self.folder_chooser], 'dialog_position': [ pgsetting.SettingGuiTypes.window_position, self.dialog], 'advanced_settings_expanded': [ pgsetting.SettingGuiTypes.expander, self.expander_advanced_settings], }) self.hbox_file_extension_entry = gtk.HBox(homogeneous=False) self.hbox_file_extension_entry.set_spacing(30) self.hbox_file_extension_entry.pack_start(self.file_extension_label, expand=False, fill=True) self.hbox_file_extension_entry.pack_start(self.file_extension_entry, expand=False, fill=True) self.hbox_file_extension = gtk.HBox(homogeneous=False) self.hbox_file_extension.set_spacing(self.HBOX_HORIZONTAL_SPACING) self.hbox_file_extension.pack_start(self.hbox_file_extension_entry, expand=False, fill=True) self.hbox_file_extension.pack_start(self.label_message, expand=True, fill=True) self.hbox_export_settings = gtk.HBox(homogeneous=False) self.hbox_export_settings.pack_start(self.settings['main']['layer_groups_as_folders'].gui.element) self.hbox_export_settings.pack_start(self.settings['main']['ignore_invisible'].gui.element) self.hbox_export_settings.pack_start(self.settings['main']['autocrop'].gui.element) self.hbox_export_settings.pack_start(self.settings['main']['use_image_size'].gui.element) self.table_labels = gtk.Table(rows=2, columns=1, homogeneous=False) self.table_labels.set_row_spacings(self.ADVANCED_SETTINGS_VERTICAL_SPACING) self.table_labels.attach(self.advanced_settings_file_ext_mode_label, 0, 1, 0, 1) self.table_labels.attach(self.advanced_settings_square_bracketed_mode_label, 0, 1, 1, 2) self.table_combo_boxes = gtk.Table(rows=2, columns=1, homogeneous=False) self.table_combo_boxes.set_row_spacings(self.ADVANCED_SETTINGS_VERTICAL_SPACING) self.table_combo_boxes.attach(self.settings['main']['file_ext_mode'].gui.element, 0, 1, 0, 1, yoptions=0) self.table_combo_boxes.attach( self.settings['main']['square_bracketed_mode'].gui.element, 0, 1, 1, 2, yoptions=0) self.table_additional_elems = gtk.Table(rows=2, columns=1, homogeneous=False) self.table_additional_elems.set_row_spacings(self.ADVANCED_SETTINGS_VERTICAL_SPACING) self.table_additional_elems.attach(self.settings['main']['strip_mode'].gui.element, 0, 1, 0, 1, yoptions=0) self.table_additional_elems.attach(self.settings['main']['crop_to_background'].gui.element, 0, 1, 1, 2) self.hbox_tables = gtk.HBox(homogeneous=False) self.hbox_tables.set_spacing(self.ADVANCED_SETTINGS_HORIZONTAL_SPACING) self.hbox_tables.pack_start(self.table_labels, expand=False, fill=True) self.hbox_tables.pack_start(self.table_combo_boxes, expand=False, fill=True) self.hbox_tables.pack_start(self.table_additional_elems, expand=False, fill=True) self.hbox_advanced_settings_checkbuttons = gtk.HBox(homogeneous=False) self.hbox_advanced_settings_checkbuttons.set_spacing(self.ADVANCED_SETTINGS_HORIZONTAL_SPACING) self.hbox_advanced_settings_checkbuttons.pack_start( self.settings['main']['merge_layer_groups'].gui.element, expand=False, fill=True) self.hbox_advanced_settings_checkbuttons.pack_start( self.settings['main']['empty_folders'].gui.element, expand=False, fill=True) self.hbox_advanced_settings_checkbuttons.pack_start( self.settings['main']['ignore_layer_modes'].gui.element, expand=False, fill=True) self.vbox_advanced_settings = gtk.VBox(homogeneous=False) self.vbox_advanced_settings.set_spacing(self.ADVANCED_SETTINGS_VERTICAL_SPACING) self.vbox_advanced_settings.pack_start(self.hbox_tables, expand=False, fill=False) self.vbox_advanced_settings.pack_start(self.hbox_advanced_settings_checkbuttons, expand=False, fill=False) self.alignment_advanced_settings = gtk.Alignment() self.alignment_advanced_settings.set_padding(0, 0, self.ADVANCED_SETTINGS_LEFT_MARGIN, 0) self.alignment_advanced_settings.add(self.vbox_advanced_settings) self.expander_advanced_settings.add(self.alignment_advanced_settings) self.export_layers_button = self.dialog.add_button(_("_Export Layers"), gtk.RESPONSE_OK) self.export_layers_button.grab_default() self.cancel_button = self.dialog.add_button(_("_Cancel"), gtk.RESPONSE_CANCEL) self.dialog.set_alternative_button_order([gtk.RESPONSE_OK, gtk.RESPONSE_CANCEL]) self.stop_button = gtk.Button() self.stop_button.set_label(_("_Stop")) self.save_settings_button = gtk.Button() self.save_settings_button.set_label(_("Save Settings")) self.save_settings_button.set_tooltip_text( _("Save settings permanently. " "If you start GIMP again, the saved settings will be loaded " "when {0} is first opened.").format(constants.PLUGIN_TITLE) ) self.reset_settings_button = gtk.Button() self.reset_settings_button.set_label(_("Reset Settings")) self.progress_bar = gtk.ProgressBar() self.progress_bar.set_ellipsize(pango.ELLIPSIZE_MIDDLE) self.dialog.action_area.pack_end(self.stop_button, expand=False, fill=True) self.dialog.action_area.pack_start(self.save_settings_button, expand=False, fill=True) self.dialog.action_area.pack_start(self.reset_settings_button, expand=False, fill=True) self.dialog.action_area.set_child_secondary(self.save_settings_button, True) self.dialog.action_area.set_child_secondary(self.reset_settings_button, True) self.dialog.vbox.set_spacing(self.DIALOG_VBOX_SPACING) self.dialog.vbox.pack_start(self.folder_chooser_label, expand=False, fill=False) self.dialog.vbox.pack_start(self.folder_chooser, padding=5) self.dialog.vbox.pack_start(self.hbox_file_extension, expand=False, fill=False) self.dialog.vbox.pack_start(self.hbox_export_settings, expand=False, fill=False) self.dialog.vbox.pack_start(self.expander_advanced_settings, expand=False, fill=False) self.dialog.vbox.pack_start(gtk.HSeparator(), expand=False, fill=True) self.dialog.vbox.pack_end(self.progress_bar, expand=False, fill=True) # Move the action area above the progress bar. self.dialog.vbox.reorder_child(self.dialog.action_area, -1) self.export_layers_button.connect("clicked", self.on_export_click) self.cancel_button.connect("clicked", self.cancel) self.stop_button.connect("clicked", self.stop) self.dialog.connect("delete-event", self.close) self.save_settings_button.connect("clicked", self.on_save_settings_clicked) self.reset_settings_button.connect("clicked", self.on_reset_settings_clicked) self.dialog.set_default_response(gtk.RESPONSE_CANCEL) self.dialog.vbox.show_all() self.progress_bar.hide() self.stop_button.hide() self.dialog.set_focus(self.file_extension_entry) self.dialog.set_default(self.export_layers_button) self.file_extension_entry.set_activates_default(True) # Place the cursor at the end of the text entry. self.file_extension_entry.set_position(-1) self.dialog.show() self.dialog.action_area.set_border_width(self.ACTION_AREA_BORDER_WIDTH) # This may fix the hidden file format dialog bug on Windows. self.dialog.grab_remove()
PF_FONT: gimpui.FontSelector, PF_FILE: FileSelector, PF_FILENAME: FilenameSelector, PF_DIRNAME: DirnameSelector, PF_BRUSH: gimpui.BrushSelector, PF_PATTERN: gimpui.PatternSelector, PF_GRADIENT: gimpui.GradientSelector, PF_PALETTE: gimpui.PaletteSelector, PF_TEXT: TextEntry } if on_run: on_run() dialog = gimpui.Dialog( proc_name, "python-fu", None, 0, None, proc_name, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK)) dialog.set_alternative_button_order((gtk.RESPONSE_OK, gtk.RESPONSE_CANCEL)) dialog.set_transient() vbox = gtk.VBox(False, 12) vbox.set_border_width(12) dialog.vbox.pack_start(vbox) vbox.show() if blurb: if domain: try: (domain, locale_dir) = domain
def parameter_dialog( proc_name, run_func, # on OK button clicked, call with actual params paramdefs, # tuple, definitions of formal parameters defaults, # tuple of initial values: last used (persistent) or standard values # defaults is a misnomer, but commonly used. blurb = None, # displays blurb of plugin at top of dialog is_use_toggles=False, is_use_progress=True ): ''' Builds dialog to ask user for parameters. Runs inside a gtk event loop. Largely copied from gimpfu.interact() . Should be unified. Changes: made it a function with parameters added optional toggle button in each control (row of table) made the action func a parameter changed certain names: dialog => dlg (same widget, different names) changed certain names: params => paramdefs (more descriptive, formal parameter defs) made the progress bar optional Busted out table into separate class, taking tooltips with it. ''' ''' This is a call to libgimpui, via _gimpui.so (the Python binding), not gimpui.py. Uses libgimpui so that the dialog follows the Gimp theme, help policy, progress policy, etc. See libgimp/gimpui.c etc. ''' dialog = gimpui.Dialog(proc_name, 'python-fu', None, 0, None, proc_name, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK)) dialog.set_alternative_button_order((gtk.RESPONSE_OK, gtk.RESPONSE_CANCEL)) dialog.set_transient() vbox = gtk.VBox(False, 12) vbox.set_border_width(12) dialog.vbox.pack_start(vbox) vbox.show() # part 1: blurb if blurb: # see gimpfu.py for excised domain i8n code box = gimpui.HintBox(blurb) vbox.pack_start(box, expand=False) box.show() # part 2: table of parameters # added from gimpfu def enable_OK(direction): dialog.set_response_sensitive(gtk.RESPONSE_OK, direction) table = GimpParamWidget(vbox, dialog, paramdefs, defaults, is_use_toggles, enable_OK) # part 3: progress if is_use_progress: progress_vbox = gtk.VBox(False, 6) vbox.pack_end(progress_vbox, expand=False) progress_vbox.show() progress = gimpui.ProgressBar() progress_vbox.pack_start(progress) progress.show() def response(dlg, id): if id == gtk.RESPONSE_OK: dlg.set_response_sensitive(gtk.RESPONSE_OK, False) dlg.set_response_sensitive(gtk.RESPONSE_CANCEL, False) try: dialog.res = run_func(table.validate()) except param_widgets.EntryValueError: warning_dialog(dlg, _("Invalid input")) # WAS wid.desc here # dialog continues with OK and CANCEL insensitive? except Exception: dlg.set_response_sensitive(gtk.RESPONSE_CANCEL, True) error_dialog(dlg, proc_name) raise dlg.hide() dialog.connect("response", response) dialog.show() return dialog
def showDialog(self): self.dialog = gimpui.Dialog("Multi export", "multi_export_dialog") self.table = gtk.Table(2, 4, True) self.table.set_homogeneous(True) self.table.set_row_spacings(5) self.table.set_col_spacings(5) self.table.show() #Config File label = gtk.Label(' '+_('Config File :')+' ') label.set_use_underline(True) label.show() self.table.attach(label, 0, 1, 0, 1) config_chooser_dialog = gtk.FileChooserDialog(title=_("Open a Yaml config file"), action=gtk.FILE_CHOOSER_ACTION_OPEN, buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK)) config_chooser_dialog.set_default_response(gtk.RESPONSE_OK) filtre = gtk.FileFilter() filtre.set_name(_('Yaml config file')) #TODO : find the real(s) mime-type format filtre.add_mime_type('text/yaml') filtre.add_pattern("*.yaml") filtre.add_pattern("*.yml") config_chooser_dialog.add_filter(filtre) self.config_chooser = gtk.FileChooserButton(config_chooser_dialog) self.yaml_file = os.path.splitext(self.img.filename)[0]+'.yaml' #select yaml file on the same image directory if os.path.exists(self.yaml_file): self.config_chooser.set_filename(self.yaml_file) #else choose the path on image directory else: self.config_chooser.set_filename(os.path.dirname(self.img.filename)+'/*') self.config_chooser.show() self.table.attach(self.config_chooser, 1, 4, 0, 1) #Save Directory label = gtk.Label(' '+_('Save Directory :')+' ') label.set_use_underline(True) label.show() self.table.attach(label, 0, 1, 1, 2) chooser_dialog = gtk.FileChooserDialog(title=_('Open the destination directory'), action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK)) chooser_dialog.set_default_response(gtk.RESPONSE_OK) self.chooser = gtk.FileChooserButton(chooser_dialog) self.chooser.set_current_folder(os.path.dirname(self.img.filename)) self.chooser.show() self.table.attach(self.chooser, 1, 4, 1, 2) self.bar_progress = gimpui.ProgressBar() self.bar_progress.set_text(_('Processing ...')) self.dialog.vbox.hbox1 = gtk.HBox(False, 5) self.dialog.vbox.hbox1.show() self.dialog.vbox.pack_start(self.dialog.vbox.hbox1, False, False, 5) self.dialog.vbox.hbox1.pack_start(self.table, True, True, 5) self.dialog.vbox.hbox2 = gtk.HBox(False, 5) self.dialog.vbox.hbox2.show() self.dialog.vbox.pack_end(self.dialog.vbox.hbox2, False, False, 5) self.dialog.vbox.hbox2.pack_end(self.bar_progress, True, True, 5) self.bar_progress.show() cancel_button = self.dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) ok_button = self.dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) cancel_button.connect("clicked", self.cancel) ok_button.connect("clicked", self.validate) #progress self.process = gimp.progress_install(self.start_progress, self.end_progress,\ self.text_progress, self.value_progress) self.dialog.show() gtk.main()
def _init_gui_elements(self): self._dialog = gimpui.Dialog(title=pg.config.PLUGIN_TITLE, role=pg.config.PLUGIN_NAME) self._dialog.set_transient() self._dialog.set_default_size(*self._DIALOG_SIZE) self._dialog.set_border_width(self._DIALOG_BORDER_WIDTH) self._dialog.set_default_response(gtk.RESPONSE_CANCEL) self._folder_chooser_label = gtk.Label() self._folder_chooser_label.set_markup("<b>" + _("Save in folder:") + "</b>") self._folder_chooser_label.set_alignment(0.0, 0.5) self._folder_chooser = gtk.FileChooserWidget( action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER) self._vbox_folder_chooser = gtk.VBox(homogeneous=False) self._vbox_folder_chooser.set_spacing(self._DIALOG_VBOX_SPACING) self._vbox_folder_chooser.pack_start( self._folder_chooser_label, expand=False, fill=False, padding=self._SAVE_IN_FOLDER_LABEL_PADDING) self._vbox_folder_chooser.pack_start(self._folder_chooser) self._init_gui_previews() self._preview_label = gtk.Label() self._preview_label.set_markup("<b>" + _("Preview") + "</b>") self._preview_label.set_alignment(0.0, 0.5) self._hbox_preview_label = gtk.HBox() self._hbox_preview_label.set_border_width( self._PREVIEW_LABEL_BORDER_WIDTH) self._hbox_preview_label.pack_start(self._preview_label) self._vpaned_previews = gtk.VPaned() self._vpaned_previews.pack1(self._name_preview, resize=True, shrink=True) self._vpaned_previews.pack2(self._image_preview, resize=True, shrink=True) self._vbox_previews = gtk.VBox() self._vbox_previews.pack_start(self._hbox_preview_label, expand=False, fill=False) self._vbox_previews.pack_start(self._vpaned_previews, expand=True, fill=True) self._frame_previews = gtk.Frame() self._frame_previews.set_shadow_type(gtk.SHADOW_ETCHED_OUT) self._frame_previews.add(self._vbox_previews) self._file_extension_label = gtk.Label() self._file_extension_label.set_markup("<b>{}:</b>".format( gobject.markup_escape_text( self._settings["main/file_extension"].display_name))) self._file_extension_label.set_alignment(0.0, 0.5) self._file_extension_entry = pg.gui.FileExtensionEntry( minimum_width_chars=self._FILE_EXTENSION_ENTRY_MIN_WIDTH_CHARS, maximum_width_chars=self._FILE_EXTENSION_ENTRY_MAX_WIDTH_CHARS) self._file_extension_entry.set_activates_default(True) self._save_as_label = gtk.Label() self._save_as_label.set_markup("<b>{}:</b>".format( gobject.markup_escape_text(_("Save as")))) self._save_as_label.set_alignment(0.0, 0.5) self._dot_label = gtk.Label(".") self._dot_label.set_alignment(0.0, 1.0) self._filename_pattern_entry = pg.gui.FilenamePatternEntry( renamer.get_field_descriptions(renamer.FIELDS), minimum_width_chars=self._FILENAME_PATTERN_ENTRY_MIN_WIDTH_CHARS, maximum_width_chars=self._FILENAME_PATTERN_ENTRY_MAX_WIDTH_CHARS, default_item=self._settings["main/layer_filename_pattern"]. default_value) self._filename_pattern_entry.set_activates_default(True) self._label_message = message_label_.MessageLabel() self._hbox_export_name_labels = gtk.HBox(homogeneous=False) self._hbox_export_name_labels.pack_start(self._file_extension_label, expand=False, fill=False) self._hbox_export_name_labels.pack_start(self._save_as_label, expand=False, fill=False) self._hbox_export_name_entries = gtk.HBox(homogeneous=False) self._hbox_export_name_entries.set_spacing( self._HBOX_EXPORT_NAME_ENTRIES_SPACING) self._hbox_export_name_entries.pack_start(self._filename_pattern_entry, expand=False, fill=False) self._hbox_export_name_entries.pack_start(self._dot_label, expand=False, fill=False) self._hbox_export_name_entries.pack_start(self._file_extension_entry, expand=False, fill=False) self._hbox_export_name = gtk.HBox(homogeneous=False) self._hbox_export_name.set_spacing( self._HBOX_EXPORT_LABELS_NAME_SPACING) self._hbox_export_name.pack_start(self._hbox_export_name_labels, expand=False, fill=False) self._hbox_export_name.pack_start(self._hbox_export_name_entries, expand=False, fill=False) self._hbox_export_name_and_message = gtk.HBox(homogeneous=False) self._hbox_export_name_and_message.set_spacing( self._HBOX_EXPORT_NAME_AND_MESSAGE_HORIZONTAL_SPACING) self._hbox_export_name_and_message.set_border_width( self._HBOX_EXPORT_NAME_AND_MESSAGE_BORDER_WIDTH) self._hbox_export_name_and_message.pack_start(self._hbox_export_name, expand=False, fill=False) self._hbox_export_name_and_message.pack_start(self._label_message, expand=True, fill=True) self._box_procedures = operations_.OperationBox( self._settings["main/procedures"], builtin_procedures.BUILTIN_PROCEDURES, _("Add P_rocedure..."), _("Edit Procedure"), add_custom_operation_text=_("Add Custom Procedure...")) self._box_constraints = operations_.OperationBox( self._settings["main/constraints"], builtin_constraints.BUILTIN_CONSTRAINTS, _("Add C_onstraint..."), _("Edit Constraint"), allow_custom_operations=False) self._hbox_operations = gtk.HBox(homogeneous=True) self._hbox_operations.set_spacing( self._MORE_SETTINGS_HORIZONTAL_SPACING) self._hbox_operations.set_border_width( self._MORE_SETTINGS_BORDER_WIDTH) self._hbox_operations.pack_start(self._box_procedures, expand=True, fill=True) self._hbox_operations.pack_start(self._box_constraints, expand=True, fill=True) self._vbox_chooser_and_settings = gtk.VBox() self._vbox_chooser_and_settings.set_spacing(self._DIALOG_VBOX_SPACING) self._vbox_chooser_and_settings.pack_start(self._vbox_folder_chooser, expand=True, fill=True) self._vbox_chooser_and_settings.pack_start( self._hbox_export_name_and_message, expand=False, fill=False) self._vpaned_chooser_and_operations = gtk.VPaned() self._vpaned_chooser_and_operations.pack1( self._vbox_chooser_and_settings, resize=True, shrink=False) self._vpaned_chooser_and_operations.pack2(self._hbox_operations, resize=False, shrink=True) self._hpaned_settings_and_previews = gtk.HPaned() self._hpaned_settings_and_previews.pack1( self._vpaned_chooser_and_operations, resize=True, shrink=False) self._hpaned_settings_and_previews.pack2(self._frame_previews, resize=True, shrink=True) self._button_export = self._dialog.add_button(_("_Export"), gtk.RESPONSE_OK) self._button_export.set_flags(gtk.CAN_DEFAULT) self._button_export.hide() self._button_cancel = self._dialog.add_button(_("_Cancel"), gtk.RESPONSE_CANCEL) self._button_cancel.hide() self._dialog.set_alternative_button_order( [gtk.RESPONSE_OK, gtk.RESPONSE_CANCEL]) self._button_stop = gtk.Button() self._button_stop.set_label(_("_Stop")) self._button_stop.set_no_show_all(True) self._label_button_settings = gtk.Label(_("_Settings")) self._label_button_settings.set_use_underline(True) self._hbox_button_settings = gtk.HBox() self._hbox_button_settings.pack_start(self._label_button_settings, expand=True, fill=True) self._hbox_button_settings.pack_start(gtk.Arrow( gtk.ARROW_DOWN, gtk.SHADOW_IN), expand=False, fill=False) self._button_settings = gtk.Button() self._button_settings.add(self._hbox_button_settings) self._menu_item_show_more_settings = gtk.CheckMenuItem( _("Show More Settings")) self._menu_item_save_settings = gtk.MenuItem(_("Save Settings")) self._menu_item_reset_settings = gtk.MenuItem(_("Reset settings")) self._menu_settings = gtk.Menu() self._menu_settings.append(self._menu_item_show_more_settings) self._menu_settings.append(self._menu_item_save_settings) self._menu_settings.append(self._menu_item_reset_settings) self._menu_settings.show_all() self._dialog.action_area.pack_end(self._button_stop, expand=False, fill=False) self._dialog.action_area.pack_start(self._button_settings, expand=False, fill=False) self._dialog.action_area.set_child_secondary(self._button_settings, True) if _webbrowser_module_found: self._button_help = gtk.Button() self._button_help.set_label(_("_Help")) self._dialog.action_area.pack_start(self._button_help, expand=False, fill=False) self._dialog.action_area.set_child_secondary( self._button_help, True) self._progress_bar = gtk.ProgressBar() self._progress_bar.set_ellipsize(pango.ELLIPSIZE_MIDDLE) self._progress_bar.set_no_show_all(True) self._hbox_contents = gtk.HBox() self._hbox_contents.pack_start(self._hpaned_settings_and_previews, expand=True, fill=True) self._hbox_contents.set_border_width( self._DIALOG_CONTENTS_BORDER_WIDTH) self._dialog.vbox.set_spacing(self._DIALOG_VBOX_SPACING) self._dialog.vbox.pack_start(self._hbox_contents, expand=True, fill=True) self._dialog.vbox.pack_end(self._progress_bar, expand=False, fill=False) # Move the action area above the progress bar. self._dialog.vbox.reorder_child(self._dialog.action_area, -1)
def __init__(self, image): self.image = image self.dialog = gimpui.Dialog(PLUGIN_TITLE, None, None, 0, None, None) self.dialog.set_transient() self.dialog.set_default_size(850, 660) # self.dialog.set_size_request(850,660) self.dialog.set_border_width(8) dialog_position = retrieve_setting('dialog_position') if dialog_position is not None: self.dialog.move(*dialog_position) self.directory_chooser_label = gtk.Label() self.directory_chooser_label.set_markup( "<b>Choose output directory</b>") self.directory_chooser_label.set_alignment(0.0, 0.5) self.directory_chooser = gtk.FileChooserWidget( action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER) self.hbox_file_format = gtk.HBox(homogeneous=False) self.hbox_file_format.set_spacing(5) self.file_format_label = gtk.Label() self.file_format_label.set_markup("<b>File format:</b>") self.file_format_label.set_alignment(0.0, 0.5) self.file_format_label.set_size_request(100, -1) self.file_format_entry = gtk.Entry() self.file_format_entry.set_size_request(100, -1) self.file_format_error_icon = gtk.Image() self.file_format_error_icon.set_from_stock(gtk.STOCK_STOP, gtk.ICON_SIZE_BUTTON) self.file_format_error_message = gtk.Label() self.file_format_error_message.set_alignment(0.0, 0.5) self.hbox_file_format.pack_start(self.file_format_label, expand=False) self.hbox_file_format.pack_start(self.file_format_entry, expand=False) self.hbox_file_format.pack_start(self.file_format_error_icon, expand=False) self.hbox_file_format.pack_start(self.file_format_error_message, expand=False) self.hbox_export_options = gtk.HBox(homogeneous=False) self.export_options_layer_groups = gtk.CheckButton( "Treat layer groups as directories") self.export_options_ignore_invisible = gtk.CheckButton( "Ignore invisible layers") self.export_options_is_autocrop = gtk.CheckButton("Autocrop layers") self.export_options_use_image_size = gtk.CheckButton( "Use image size instead of layer size") self.hbox_export_options.pack_start(self.export_options_layer_groups) self.hbox_export_options.pack_start( self.export_options_ignore_invisible) self.hbox_export_options.pack_start(self.export_options_is_autocrop) self.hbox_export_options.pack_start(self.export_options_use_image_size) self.hbox_action_area = gtk.HBox(homogeneous=False) self.export_layers_button = gtk.Button(label="Export Layers") self.export_layers_button.set_size_request(110, -1) self.cancel_button = gtk.Button(label="Cancel") self.cancel_button.set_size_request(110, -1) self.progress_bar = gimpui.ProgressBar() # self.progress_bar = gtk.ProgressBar() self.hbox_action_area.set_spacing(8) self.hbox_action_area.set_border_width(8) self.hbox_action_area.pack_start(self.progress_bar, expand=True, fill=True) self.hbox_action_area.pack_end(self.export_layers_button, expand=False, fill=True) self.hbox_action_area.pack_end(self.cancel_button, expand=False, fill=True) self.dialog.vbox.set_spacing(3) self.dialog.vbox.pack_start(self.directory_chooser_label, expand=False, fill=False) self.dialog.vbox.pack_start(self.directory_chooser, padding=5) self.dialog.vbox.pack_start(self.hbox_file_format, expand=False, fill=False) self.dialog.vbox.pack_start(self.hbox_export_options, expand=False, fill=False) self.dialog.vbox.pack_start(self.hbox_action_area, expand=False, fill=False) self.dialog.connect("response", self.response) self.cancel_button.connect("clicked", self.cancel) self.export_layers_button.connect("clicked", self.export) # Assign last used values if last export was successful and # if there are any, otherwise use default values. selected_directory = retrieve_setting('output_directory') if selected_directory is not None: self.directory_chooser.set_current_folder(selected_directory) else: if self.image.uri is not None: self.directory_chooser.set_uri(self.image.uri) else: self.directory_chooser.set_current_folder( ExportLayersPlugin. PARAMS_DEFAULT_VALUES['output_directory']) self.file_format_entry.set_text( retrieve_setting( 'file_format', ExportLayersPlugin.PARAMS_DEFAULT_VALUES['file_format'])) self.export_options_layer_groups.set_active( retrieve_setting( 'layer_groups_as_directories', ExportLayersPlugin. PARAMS_DEFAULT_VALUES['layer_groups_as_directories'])) self.export_options_ignore_invisible.set_active( retrieve_setting( 'ignore_invisible', ExportLayersPlugin.PARAMS_DEFAULT_VALUES['ignore_invisible'])) self.export_options_is_autocrop.set_active( retrieve_setting( 'is_autocrop', ExportLayersPlugin.PARAMS_DEFAULT_VALUES['is_autocrop'])) self.export_options_use_image_size.set_active( retrieve_setting( 'use_image_size', ExportLayersPlugin.PARAMS_DEFAULT_VALUES['use_image_size'])) self.dialog.show_all() # Action area is unused, the dialog bottom would otherwise be filled with empty space. self.dialog.action_area.hide() self.display_label_error_message() self.progress_bar.set_visible(False)
def _init_gui(self): self._dialog = gimpui.Dialog(title=pygimplib.config.PLUGIN_TITLE, role=pygimplib.config.PLUGIN_NAME) self._dialog.set_transient() self._dialog.set_default_size(*self._DIALOG_SIZE) self._dialog.set_border_width(self._DIALOG_BORDER_WIDTH) self._folder_chooser_label = gtk.Label() self._folder_chooser_label.set_markup("<b>" + _("Save in folder:") + "</b>") self._folder_chooser_label.set_alignment(0.0, 0.5) self._folder_chooser = gtk.FileChooserWidget(action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER) self._export_name_preview = gui_previews.ExportNamePreview( self._layer_exporter_for_previews, self._initial_layer_tree, self._settings['gui_session/export_name_preview_layers_collapsed_state'].value[self._image.ID], self._settings['main/selected_layers'].value[self._image.ID], self._settings['gui/displayed_tags'], on_selection_changed_func=self._on_name_preview_selection_changed, on_after_update_func=self._on_name_preview_after_update, on_after_edit_tags_func=self._on_name_preview_after_edit_tags) self._export_image_preview = gui_previews.ExportImagePreview( self._layer_exporter_for_previews, self._initial_layer_tree, self._settings['gui_session/export_image_preview_displayed_layers'].value[self._image.ID]) self._vbox_folder_chooser = gtk.VBox(homogeneous=False) self._vbox_folder_chooser.set_spacing(self._DIALOG_VBOX_SPACING * 2) self._vbox_folder_chooser.pack_start(self._folder_chooser_label, expand=False, fill=False) self._vbox_folder_chooser.pack_start(self._folder_chooser) self._vpaned_previews = gtk.VPaned() self._vpaned_previews.pack1(self._export_name_preview.widget, resize=True, shrink=True) self._vpaned_previews.pack2(self._export_image_preview.widget, resize=True, shrink=True) self._frame_previews = gtk.Frame() self._frame_previews.set_shadow_type(gtk.SHADOW_ETCHED_OUT) self._frame_previews.add(self._vpaned_previews) self._hpaned_chooser_and_previews = gtk.HPaned() self._hpaned_chooser_and_previews.pack1(self._vbox_folder_chooser, resize=True, shrink=False) self._hpaned_chooser_and_previews.pack2(self._frame_previews, resize=True, shrink=True) self._file_extension_label = gtk.Label() self._file_extension_label.set_markup( "<b>" + gobject.markup_escape_text(self._settings['main/file_extension'].display_name) + ":</b>") self._file_extension_label.set_alignment(0.0, 0.5) self._file_extension_entry = pggui_entries.FileExtensionEntry() self._file_extension_entry.set_width_chars(self._FILE_EXTENSION_ENTRY_WIDTH_CHARS) self._save_as_label = gtk.Label() self._save_as_label.set_markup("<b>" + _("Save as") + ":</b>") self._save_as_label.set_alignment(0.0, 0.5) self._dot_label = gtk.Label(".") self._dot_label.set_alignment(0.0, 1.0) self._filename_pattern_entry = pggui_entries.FilenamePatternEntry( exportlayers.LayerExporter.SUGGESTED_LAYER_FILENAME_PATTERNS, minimum_width_chars=self._FILENAME_PATTERN_ENTRY_MIN_WIDTH_CHARS, maximum_width_chars=self._FILENAME_PATTERN_ENTRY_MAX_WIDTH_CHARS, default_item=self._settings['main/layer_filename_pattern'].default_value) self._label_message = gtk.Label() self._label_message.set_alignment(0.0, 0.5) self._label_message.set_ellipsize(pango.ELLIPSIZE_MIDDLE) self._menu_item_show_more_settings = gtk.CheckMenuItem(_("Show More Settings")) self._vpaned_settings = gtk.VPaned() self._settings.initialize_gui({ 'file_extension': [pgsetting.SettingGuiTypes.extended_entry, self._file_extension_entry], 'dialog_position': [pgsetting.SettingGuiTypes.window_position, self._dialog], 'dialog_size': [pgsetting.SettingGuiTypes.window_size, self._dialog], 'show_more_settings': [pgsetting.SettingGuiTypes.check_menu_item, self._menu_item_show_more_settings], 'chooser_and_previews_hpane_position': [ pgsetting.SettingGuiTypes.paned_position, self._hpaned_chooser_and_previews], 'previews_vpane_position': [ pgsetting.SettingGuiTypes.paned_position, self._vpaned_previews], 'settings_vpane_position': [ pgsetting.SettingGuiTypes.paned_position, self._vpaned_settings], 'layer_filename_pattern': [pgsetting.SettingGuiTypes.extended_entry, self._filename_pattern_entry] }) self._current_directory_setting.set_gui(pgsetting.SettingGuiTypes.folder_chooser, self._folder_chooser) self._hbox_export_name_labels = gtk.HBox(homogeneous=False) self._hbox_export_name_labels.pack_start(self._file_extension_label, expand=False, fill=False) self._hbox_export_name_labels.pack_start(self._save_as_label, expand=False, fill=False) self._hbox_export_name_entries = gtk.HBox(homogeneous=False) self._hbox_export_name_entries.set_spacing(self._HBOX_EXPORT_NAME_ENTRIES_SPACING) self._hbox_export_name_entries.pack_start(self._filename_pattern_entry, expand=False, fill=False) self._hbox_export_name_entries.pack_start(self._dot_label, expand=False, fill=False) self._hbox_export_name_entries.pack_start(self._file_extension_entry, expand=False, fill=False) self._hbox_export_name = gtk.HBox(homogeneous=False) self._hbox_export_name.set_spacing(self._HBOX_EXPORT_LABELS_NAME_SPACING) self._hbox_export_name.pack_start(self._hbox_export_name_labels, expand=False, fill=False) self._hbox_export_name.pack_start(self._hbox_export_name_entries, expand=False, fill=False) self._hbox_export_name_and_message = gtk.HBox(homogeneous=False) self._hbox_export_name_and_message.set_spacing(self._HBOX_HORIZONTAL_SPACING) self._hbox_export_name_and_message.pack_start(self._hbox_export_name, expand=False, fill=False) self._hbox_export_name_and_message.pack_start(self._label_message, expand=True, fill=True) self._hbox_settings_checkbuttons = gtk.HBox(homogeneous=False) self._hbox_settings_checkbuttons.pack_start(self._settings['main/layer_groups_as_folders'].gui.element) self._hbox_settings_checkbuttons.pack_start(self._settings['main/use_image_size'].gui.element) self._hbox_settings_checkbuttons.pack_start(self._settings['main/only_visible_layers'].gui.element) self._vbox_more_settings_builtin = gtk.VBox(homogeneous=False) self._vbox_more_settings_builtin.set_spacing(self._MORE_SETTINGS_VERTICAL_SPACING) self._vbox_more_settings_builtin.pack_start( self._settings['main/process_tagged_layers'].gui.element, expand=False, fill=False) self._vbox_more_settings_builtin.pack_start( self._settings['main/export_only_selected_layers'].gui.element, expand=False, fill=False) self._scrolled_window_more_settings_builtin = gtk.ScrolledWindow() self._scrolled_window_more_settings_builtin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self._scrolled_window_more_settings_builtin.add_with_viewport(self._vbox_more_settings_builtin) self._scrolled_window_more_settings_builtin.get_child().set_shadow_type(gtk.SHADOW_NONE) self._box_more_operations = gui_operations.OperationsBox( label_add_text=_("Add _Operations..."), spacing=self._MORE_SETTINGS_OPERATIONS_SPACING, settings=list(self._settings['main/more_operations'].iterate_all()), displayed_settings_names=self._settings['gui/displayed_builtin_operations'].value) self._box_more_filters = gui_operations.OperationsBox( label_add_text=_("Add _Filters..."), spacing=self._MORE_SETTINGS_OPERATIONS_SPACING, settings=list(self._settings['main/more_filters'].iterate_all()), displayed_settings_names=self._settings['gui/displayed_builtin_filters'].value) self._hbox_more_settings = gtk.HBox(homogeneous=True) self._hbox_more_settings.set_spacing(self._MORE_SETTINGS_HORIZONTAL_SPACING) self._hbox_more_settings.pack_start(self._scrolled_window_more_settings_builtin, expand=True, fill=True) self._hbox_more_settings.pack_start(self._box_more_operations.widget, expand=True, fill=True) self._hbox_more_settings.pack_start(self._box_more_filters.widget, expand=True, fill=True) self._vbox_basic_settings = gtk.VBox() self._vbox_basic_settings.set_spacing(self._DIALOG_VBOX_SPACING) self._vbox_basic_settings.pack_start(self._hpaned_chooser_and_previews) self._vbox_basic_settings.pack_start(self._hbox_export_name_and_message, expand=False, fill=False) self._vbox_basic_settings.pack_start(self._hbox_settings_checkbuttons, expand=False, fill=False) self._vpaned_settings.pack1(self._vbox_basic_settings, resize=True, shrink=False) self._vpaned_settings.pack2(self._hbox_more_settings, resize=False, shrink=True) self._button_export = self._dialog.add_button(_("_Export"), gtk.RESPONSE_OK) self._button_cancel = self._dialog.add_button(_("_Cancel"), gtk.RESPONSE_CANCEL) self._dialog.set_alternative_button_order([gtk.RESPONSE_OK, gtk.RESPONSE_CANCEL]) self._button_stop = gtk.Button() self._button_stop.set_label(_("_Stop")) self._label_button_settings = gtk.Label(_("_Settings")) self._label_button_settings.set_use_underline(True) self._hbox_button_settings = gtk.HBox() self._hbox_button_settings.pack_start(self._label_button_settings, expand=True, fill=True) self._hbox_button_settings.pack_start( gtk.Arrow(gtk.ARROW_DOWN, gtk.SHADOW_IN), expand=False, fill=False) self._button_settings = gtk.Button() self._button_settings.add(self._hbox_button_settings) self._menu_item_save_settings = gtk.MenuItem(_("Save Settings")) self._menu_item_reset_settings = gtk.MenuItem(_("Reset settings")) self._menu_settings = gtk.Menu() self._menu_settings.append(self._menu_item_show_more_settings) self._menu_settings.append(self._menu_item_save_settings) self._menu_settings.append(self._menu_item_reset_settings) self._menu_settings.show_all() self._dialog.action_area.pack_end(self._button_stop, expand=False, fill=False) self._dialog.action_area.pack_start(self._button_settings, expand=False, fill=False) self._dialog.action_area.set_child_secondary(self._button_settings, True) self._dialog.vbox.set_spacing(self._DIALOG_VBOX_SPACING) self._dialog.vbox.pack_start(self._vpaned_settings, expand=True, fill=True) self._dialog.vbox.pack_end(self._vbox_progress_bars, expand=False, fill=False) # Move the action area above the progress bar. self._dialog.vbox.reorder_child(self._dialog.action_area, -1) self._button_export.connect("clicked", self._on_button_export_clicked) self._button_cancel.connect("clicked", self._on_button_cancel_clicked) self._button_stop.connect("clicked", self._stop) self._dialog.connect("key-press-event", self._on_dialog_key_press) self._dialog.connect("delete-event", self._on_dialog_delete_event) self._button_settings.connect("clicked", self._on_button_settings_clicked) self._menu_item_show_more_settings.connect("toggled", self._on_menu_item_show_more_settings_toggled) self._menu_item_save_settings.connect("activate", self._on_save_settings_activate) self._menu_item_reset_settings.connect("activate", self._on_reset_settings_activate) self._file_extension_entry.connect( "changed", self._on_text_entry_changed, self._settings['main/file_extension'], "invalid_file_extension") self._filename_pattern_entry.connect( "changed", self._on_text_entry_changed, self._settings['main/layer_filename_pattern'], "invalid_layer_filename_pattern") self._dialog.connect("notify::is-active", self._on_dialog_is_active_changed) self._hpaned_chooser_and_previews.connect("notify::position", self._on_hpaned_position_changed) self._vpaned_previews.connect("notify::position", self._on_vpaned_position_changed) self._connect_setting_changes_to_previews() self._connect_setting_changes_to_operations_boxes() self._dialog.set_default_response(gtk.RESPONSE_CANCEL) self._dialog.vbox.show_all() self._vbox_progress_bars.hide() self._button_stop.hide() self._dialog.action_area.set_border_width(self._DIALOG_ACTION_AREA_BORDER_WIDTH) self._connect_visible_changed_for_previews() self._show_hide_more_settings() self._init_previews() self._dialog.set_focus(self._file_extension_entry) self._button_export.set_flags(gtk.CAN_DEFAULT) self._button_export.grab_default() self._filename_pattern_entry.set_activates_default(True) self._file_extension_entry.set_activates_default(True) # Place the cursor at the end of the text entry. self._file_extension_entry.set_position(-1) self._dialog.show()