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])
示例#3
0
    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])
示例#5
0
    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)
示例#6
0
 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()
示例#8
0
 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()
示例#9
0
文件: gimpfu.py 项目: simplify20/gimp
        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
示例#10
0
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
示例#11
0
    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)
示例#13
0
    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)
示例#14
0
  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()