diff options
Diffstat (limited to 'plug-ins/pygimp/gimpshelf.py')
-rw-r--r-- | plug-ins/pygimp/gimpshelf.py | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/plug-ins/pygimp/gimpshelf.py b/plug-ins/pygimp/gimpshelf.py new file mode 100644 index 0000000..999d319 --- /dev/null +++ b/plug-ins/pygimp/gimpshelf.py @@ -0,0 +1,92 @@ +# 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/>. + +# gimpshelf.py -- a simple module to help gimp modules written in Python +# store persistent data. +# +# Copyright (C) 1997, James Henstridge +# +# The gimp module provides a basic method for storing information that persists +# for a whole gimp session, but only allows for the storage of strings. This +# is because other Python types usually have pointers to other Python objects, +# making it difficult to work out what to save. This module gives an interface +# to the gimp module's primitive interface, which resembles the shelve module. + +# use cPickle and cStringIO if available + +try: + import cPickle as pickle +except ImportError: + import pickle + +try: + import cStringIO as StringIO +except ImportError: + import StringIO + +import gimp + +import copy_reg + +def _image_id(obj): + return gimp._id2image, (obj.ID,) + +def _drawable_id(obj): + return gimp._id2drawable, (obj.ID,) + +def _display_id(obj): + return gimp._id2display, (obj.ID,) + +def _vectors_id(obj): + return gimp._id2vectors, (int(obj.ID),) + +copy_reg.pickle(gimp.Image, _image_id, gimp._id2image) +copy_reg.pickle(gimp.Layer, _drawable_id, gimp._id2drawable) +copy_reg.pickle(gimp.GroupLayer, _drawable_id, gimp._id2drawable) +copy_reg.pickle(gimp.Channel, _drawable_id, gimp._id2drawable) +copy_reg.pickle(gimp.Display, _display_id, gimp._id2display) +copy_reg.pickle(gimp.Vectors, _vectors_id, gimp._id2vectors) + +del copy_reg, _image_id, _drawable_id, _display_id, _vectors_id + +class Gimpshelf: + def has_key(self, key): + try: + s = gimp.get_data(key) + return 1 + except gimp.error: + return 0 + + def __getitem__(self, key): + try: + s = gimp.get_data(key) + except gimp.error: + raise KeyError, key + + f = StringIO.StringIO(s) + return pickle.Unpickler(f).load() + + def __setitem__(self, key, value): + f = StringIO.StringIO() + p = pickle.Pickler(f) + p.dump(value) + gimp.set_data(key, f.getvalue()) + + def __delitem__(self, key): + gimp.set_data(key, '') + +shelf = Gimpshelf() +del Gimpshelf |