def init_actions(self):
# name, stock id, label, accelerator, tooltip, callback
actions = [
- ('Undo', gtk.STOCK_UNDO, _('Undo'), 'Z',
- _("Undo the last action"),
- self.undo_cb),
- ('Redo', gtk.STOCK_REDO, _('Redo'), 'Y',
- _("Redo the last undo action"),
- self.redo_cb),
+ ('Undo', gtk.STOCK_UNDO, None, 'Z', None, self.undo_cb),
+ ('Redo', gtk.STOCK_REDO, None, 'Y', None, self.redo_cb),
('Brighter', None, _('Brighter'), None, None, self.brighter_cb),
('Smaller', None, _('Smaller'), 'd', None, self.brush_smaller_cb),
ag = self.action_group
undo_action = ag.get_action("Undo")
undo_action.set_sensitive(len(stack.undo_stack) > 0)
+ if len(stack.undo_stack) > 0:
+ cmd = stack.undo_stack[-1]
+ desc = _("Undo %s") % cmd.display_name
+ else:
+ desc = _("Undo: nothing to undo")
+ undo_action.set_label(desc)
+ undo_action.set_tooltip(desc)
redo_action = ag.get_action("Redo")
redo_action.set_sensitive(len(stack.redo_stack) > 0)
+ if len(stack.redo_stack) > 0:
+ cmd = stack.redo_stack[-1]
+ desc = _("Redo %s") % cmd.display_name
+ else:
+ desc = _("Redo: nothing to redo")
+ redo_action.set_label(desc)
+ redo_action.set_tooltip(desc)
def frame_changed_cb(self):
self.tdw.queue_draw()
import layer
import helpers
+from gettext import gettext as _
class CommandStack:
def __init__(self):
undo and redo methods. They should have a reference to the document in
self.doc'''
automatic_undo = False
+ display_name = _("Unknown Action")
def redo(self):
raise NotImplementedError
self.doc.call_doc_observers()
class Stroke(Action):
+ display_name = _("Painting")
def __init__(self, doc, stroke, snapshot_before):
"""called only when the stroke was just completed and is now fully rendered"""
self.doc = doc
self.doc.layer.load_snapshot(self.after)
class ClearLayer(Action):
+ display_name = _("Clear Layer")
def __init__(self, doc):
self.doc = doc
def redo(self):
self._notify_document_observers()
class LoadLayer(Action):
+ display_name = _("Load Layer")
+
def __init__(self, doc, data, x, y):
self.doc = doc
self.data = [x, y, data]
class MergeLayer(Action):
"""merge the current layer into dst"""
+ display_name = _("Merge Layers")
def __init__(self, doc, dst_idx):
self.doc = doc
self.dst_layer = self.doc.layers[dst_idx]
self._notify_document_observers()
class AddLayer(Action):
+ display_name = _("Add Layer")
def __init__(self, doc, insert_idx=None, after=None, name=''):
self.doc = doc
self.insert_idx = insert_idx
self._notify_document_observers()
class RemoveLayer(Action):
+ display_name = _("Remove Layer")
def __init__(self, doc,layer=None):
self.doc = doc
self.layer = layer
self._notify_document_observers()
class SelectLayer(Action):
+ display_name = _("Select Layer")
automatic_undo = True
def __init__(self, doc, idx):
self.doc = doc
self._notify_document_observers()
class MoveLayer(Action):
+ display_name = _("Move Layer")
def __init__(self, doc, was_idx, new_idx, select_new=False):
self.doc = doc
self.was_idx = was_idx
self._notify_document_observers()
class DuplicateLayer(Action):
+ display_name = _("Duplicate Layer")
def __init__(self, doc, insert_idx=None, name=''):
self.doc = doc
self.insert_idx = insert_idx
self._notify_document_observers()
class ReorderLayers(Action):
+ display_name = _("Reorder Layer")
def __init__(self, doc, new_order):
self.doc = doc
self.old_order = doc.layers[:]
self.layer.visible = self.old_visibility
self._notify_canvas_observers([self.layer])
self._notify_document_observers()
+ @property
+ def display_name(self):
+ if self.new_visibility:
+ return _("Make Layer Visible")
+ else:
+ return _("Make Layer Invisible")
class SetLayerLocked (Action):
def __init__(self, doc, locked, layer):
self.layer.locked = self.old_locked
self._notify_canvas_observers([self.layer])
self._notify_document_observers()
+ @property
+ def display_name(self):
+ if self.new_locked:
+ return _("Lock Layer")
+ else:
+ return _("Unlock Layer")
class SetLayerOpacity(Action):
+ display_name = _("Change Layer Visibility")
def __init__(self, doc, opacity, layer=None):
self.doc = doc
self.new_opacity = opacity