summaryrefslogtreecommitdiffstats
path: root/plug-ins/pygimp/gimpui.py
diff options
context:
space:
mode:
Diffstat (limited to 'plug-ins/pygimp/gimpui.py')
-rw-r--r--plug-ins/pygimp/gimpui.py227
1 files changed, 227 insertions, 0 deletions
diff --git a/plug-ins/pygimp/gimpui.py b/plug-ins/pygimp/gimpui.py
new file mode 100644
index 0000000..76ee584
--- /dev/null
+++ b/plug-ins/pygimp/gimpui.py
@@ -0,0 +1,227 @@
+# Gimp-Python - allows the writing of Gimp plugins in Python.
+# Copyright (C) 1997 James Henstridge <james@daa.com.au>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+'''This module implements the UI items found in the libgimpui library.
+It requires pygtk to work. These functions take use to callbacks -- one
+is a constraint function, and the other is the callback object. The
+constraint function takes an image object as its first argument, and
+a drawable object as its second if appropriate. The callback functions
+get the selected object as their first argument, and the user data as
+the second.
+
+It also implements a number of selector widgets, which can be used to select
+various gimp data types. Each of these selectors takes default as an argument
+to the constructor, and has a get_value() method for retrieving the result.
+'''
+
+import pygtk
+pygtk.require('2.0')
+
+import gtk, gobject, gimp, gimpcolor
+
+from _gimpui import *
+
+import gettext
+t = gettext.translation('gimp20-python', gimp.locale_directory, fallback=True)
+_ = t.ugettext
+
+def _callbackWrapper(menu_item, callback, data):
+ callback(menu_item.get_data("Gimp-ID"), data)
+
+def _createMenu(items, callback, data):
+ menu = gtk.Menu()
+ if not items:
+ items = [("(none)", None)]
+ for label, id in items:
+ menu_item = gtk.MenuItem(label)
+ menu_item.set_data("Gimp-ID", id)
+ menu.add(menu_item)
+ if callback:
+ menu_item.connect("activate", _callbackWrapper,
+ callback, data)
+ menu_item.show()
+ return menu
+
+
+def ImageMenu(constraint=None, callback=None, data=None):
+ items = []
+ for img in gimp.image_list():
+ if constraint and not constraint(img):
+ continue
+ if not img.filename:
+ filename = img.name
+ else:
+ filename = img.filename
+ items.append((filename, img))
+ items.sort()
+ return _createMenu(items, callback, data)
+
+def LayerMenu(constraint=None, callback=None, data=None):
+ items = []
+ for img in gimp.image_list():
+ filename = img.filename
+ if not filename:
+ filename = img.name
+ for layer in img.layers:
+ if constraint and not constraint(img, layer):
+ continue
+ name = filename + "/" + layer.name
+ items.append((name, layer))
+ items.sort()
+ return _createMenu(items, callback, data)
+
+def ChannelMenu(constraint=None, callback=None, data=None):
+ items = []
+ for img in gimp.image_list():
+ filename = img.filename
+ if not filename:
+ filename = img.name
+ for channel in img.channels:
+ if constraint and not constraint(img, channel):
+ continue
+ name = filename + "/" + channel.name
+ items.append((name, channel))
+ items.sort()
+ return _createMenu(items, callback, data)
+
+def DrawableMenu(constraint=None, callback=None, data=None):
+ items = []
+ for img in gimp.image_list():
+ filename = img.filename
+ if not filename:
+ filename = img.name
+ for drawable in img.layers + img.channels:
+ if constraint and not constraint(img, drawable):
+ continue
+ name = filename + "/" + drawable.name
+ items.append((name, drawable))
+ items.sort()
+ return _createMenu(items, callback, data)
+
+def VectorsMenu(constraint=None, callback=None, data=None):
+ items = []
+ for img in gimp.image_list():
+ filename = img.filename
+ if not filename:
+ filename = img.name
+ for vectors in img.vectors:
+ if constraint and not constraint(img, vectors):
+ continue
+ name = filename + "/" + vectors.name
+ items.append((name, vectors))
+ items.sort()
+ return _createMenu(items, callback, data)
+
+class ImageSelector(ImageComboBox):
+ def __init__(self, default=None):
+ ImageComboBox.__init__(self)
+ if default is not None:
+ self.set_active_image(default)
+ def get_value(self):
+ return self.get_active_image()
+
+class LayerSelector(LayerComboBox):
+ def __init__(self, default=None):
+ LayerComboBox.__init__(self)
+ if default is not None:
+ self.set_active_layer(default)
+ def get_value(self):
+ return self.get_active_layer()
+
+class ChannelSelector(ChannelComboBox):
+ def __init__(self, default=None):
+ ChannelComboBox.__init__(self)
+ if default is not None:
+ self.set_active_channel(default)
+ def get_value(self):
+ return self.get_active_channel()
+
+class DrawableSelector(DrawableComboBox):
+ def __init__(self, default=None):
+ DrawableComboBox.__init__(self)
+ if default is not None:
+ self.set_active_drawable(default)
+ def get_value(self):
+ return self.get_active_drawable()
+
+class VectorsSelector(VectorsComboBox):
+ def __init__(self, default=None):
+ VectorsComboBox.__init__(self)
+ if default is not None:
+ self.set_active_vectors(default)
+ def get_value(self):
+ return self.get_active_vectors()
+
+class ColorSelector(ColorButton):
+ def __init__(self, default=gimpcolor.RGB(1.0, 0, 0)):
+ if isinstance(default, gimpcolor.RGB):
+ color = default
+ elif isinstance(default, tuple):
+ color = apply(gimpcolor.RGB, default)
+ elif isinstance(default, str):
+ color = gimpcolor.rgb_parse_css(default)
+ ColorButton.__init__(self, _("Python-Fu Color Selection"), 100, 20,
+ color, COLOR_AREA_FLAT)
+ def get_value(self):
+ return self.get_color();
+
+class PatternSelector(PatternSelectButton):
+ def __init__(self, default=""):
+ PatternSelectButton.__init__(self)
+ if default:
+ self.set_pattern(default)
+ def get_value(self):
+ return self.get_pattern()
+
+class BrushSelector(BrushSelectButton):
+ def __init__(self, default=""):
+ BrushSelectButton.__init__(self)
+ if default:
+ self.set_brush(default, -1.0, -1, -1)
+ def get_value(self):
+ return self.get_brush()[0]
+
+class GradientSelector(GradientSelectButton):
+ def __init__(self, default=""):
+ GradientSelectButton.__init__(self)
+ if default:
+ self.set_gradient(default)
+ def get_value(self):
+ return self.get_gradient()
+
+class PaletteSelector(PaletteSelectButton):
+ def __init__(self, default=""):
+ PaletteSelectButton.__init__(self)
+ if default:
+ self.set_palette(default)
+ def get_value(self):
+ return self.get_palette()
+
+class FontSelector(FontSelectButton):
+ def __init__(self, default="Sans"):
+ FontSelectButton.__init__(self)
+ if default:
+ self.set_font(default)
+ def get_value(self):
+ return self.get_font()
+
+class FileSelector(gtk.FileChooserButton):
+ def __init__(self, default=""):
+ gtk.FileChooserButton.__init__(self, _("Python-Fu File Selection"))
+ if default:
+ self.set_filename(default)
+ def get_value(self):
+ return self.get_filename()