ped_core.undo module
undo module for the ped python editor, implements a simple undo mechanism
# Copyright 2009 James P Goodwin ped tiny python editor """ undo module for the ped python editor, implements a simple undo mechanism """ import copy class UndoAction: """ represents one undoable action """ def __init__(self, func, tpl ): """ constructed with an undo func which is a function to call on undo and tpl which is a tuple of arguments to pass to the function a shallow copy of the tuple is made preserving the state """ self.func = func self.tpl = copy.copy(tpl) def __del__(self): self.func = None self.tpl = None def undo(self): """ undo this action by invoking the function and passing the tuple to it """ self.func(*self.tpl) class UndoTransaction: """ represents a collection of undo actions that should be undone together as one transaction """ def __init__(self, manager): """ constructed with a reference to the UndoManager that this transaction belongs to """ self.manager = manager self.list = [] def __del__(self): self.manager = None self.list = None def isEmpty(self): """ tests to see if this transaction has no actions in it """ return not self.list def push(self, func, tpl ): """ pushes a new undo action onto this transaction """ if not self.manager.inUndo(): self.list.append(UndoAction(func,tpl)) def undo(self): """ undoes all of the actions in this transaction """ while self.list: self.list[-1].undo() del self.list[-1] self.list = [] class UndoManager: """ manager for a list of undo transactions for a given context """ def __init__(self): """ construct an UndoManager, no arguments """ self.transactions = [] self.inundo = False def __del__(self): self.transactions = None def inUndo(self): """ returns true if currently executing an undo, used to prevent recursion during undo """ return self.inundo def new_transaction(self): """ start a new transaction or return the current empty transaction """ if not self.transactions or not self.transactions[-1].isEmpty(): self.transactions.append(UndoTransaction(self)) return self.transactions[-1] def get_transaction(self): """ return the current transaction if any """ if self.transactions: return self.transactions[-1] else: return self.new_transaction() def undo_transaction(self): """ undo the current transaction """ if self.transactions: self.inundo = True self.transactions[-1].undo() del self.transactions[-1] self.inundo = False return not self.transactions def flush_undo(self): """ free the transactions and forget all the undo information """ self.transactions = []
Classes
class UndoAction
represents one undoable action
class UndoAction: """ represents one undoable action """ def __init__(self, func, tpl ): """ constructed with an undo func which is a function to call on undo and tpl which is a tuple of arguments to pass to the function a shallow copy of the tuple is made preserving the state """ self.func = func self.tpl = copy.copy(tpl) def __del__(self): self.func = None self.tpl = None def undo(self): """ undo this action by invoking the function and passing the tuple to it """ self.func(*self.tpl)
Ancestors (in MRO)
- UndoAction
- builtins.object
Static methods
def __init__(
self, func, tpl)
constructed with an undo func which is a function to call on undo and tpl which is a tuple of arguments to pass to the function a shallow copy of the tuple is made preserving the state
def __init__(self, func, tpl ): """ constructed with an undo func which is a function to call on undo and tpl which is a tuple of arguments to pass to the function a shallow copy of the tuple is made preserving the state """ self.func = func self.tpl = copy.copy(tpl)
def undo(
self)
undo this action by invoking the function and passing the tuple to it
def undo(self): """ undo this action by invoking the function and passing the tuple to it """ self.func(*self.tpl)
Instance variables
var func
var tpl
class UndoManager
manager for a list of undo transactions for a given context
class UndoManager: """ manager for a list of undo transactions for a given context """ def __init__(self): """ construct an UndoManager, no arguments """ self.transactions = [] self.inundo = False def __del__(self): self.transactions = None def inUndo(self): """ returns true if currently executing an undo, used to prevent recursion during undo """ return self.inundo def new_transaction(self): """ start a new transaction or return the current empty transaction """ if not self.transactions or not self.transactions[-1].isEmpty(): self.transactions.append(UndoTransaction(self)) return self.transactions[-1] def get_transaction(self): """ return the current transaction if any """ if self.transactions: return self.transactions[-1] else: return self.new_transaction() def undo_transaction(self): """ undo the current transaction """ if self.transactions: self.inundo = True self.transactions[-1].undo() del self.transactions[-1] self.inundo = False return not self.transactions def flush_undo(self): """ free the transactions and forget all the undo information """ self.transactions = []
Ancestors (in MRO)
- UndoManager
- builtins.object
Static methods
def __init__(
self)
construct an UndoManager, no arguments
def __init__(self): """ construct an UndoManager, no arguments """ self.transactions = [] self.inundo = False
def flush_undo(
self)
free the transactions and forget all the undo information
def flush_undo(self): """ free the transactions and forget all the undo information """ self.transactions = []
def get_transaction(
self)
return the current transaction if any
def get_transaction(self): """ return the current transaction if any """ if self.transactions: return self.transactions[-1] else: return self.new_transaction()
def inUndo(
self)
returns true if currently executing an undo, used to prevent recursion during undo
def inUndo(self): """ returns true if currently executing an undo, used to prevent recursion during undo """ return self.inundo
def new_transaction(
self)
start a new transaction or return the current empty transaction
def new_transaction(self): """ start a new transaction or return the current empty transaction """ if not self.transactions or not self.transactions[-1].isEmpty(): self.transactions.append(UndoTransaction(self)) return self.transactions[-1]
def undo_transaction(
self)
undo the current transaction
def undo_transaction(self): """ undo the current transaction """ if self.transactions: self.inundo = True self.transactions[-1].undo() del self.transactions[-1] self.inundo = False return not self.transactions
Instance variables
var inundo
var transactions
class UndoTransaction
represents a collection of undo actions that should be undone together as one transaction
class UndoTransaction: """ represents a collection of undo actions that should be undone together as one transaction """ def __init__(self, manager): """ constructed with a reference to the UndoManager that this transaction belongs to """ self.manager = manager self.list = [] def __del__(self): self.manager = None self.list = None def isEmpty(self): """ tests to see if this transaction has no actions in it """ return not self.list def push(self, func, tpl ): """ pushes a new undo action onto this transaction """ if not self.manager.inUndo(): self.list.append(UndoAction(func,tpl)) def undo(self): """ undoes all of the actions in this transaction """ while self.list: self.list[-1].undo() del self.list[-1] self.list = []
Ancestors (in MRO)
- UndoTransaction
- builtins.object
Static methods
def __init__(
self, manager)
constructed with a reference to the UndoManager that this transaction belongs to
def __init__(self, manager): """ constructed with a reference to the UndoManager that this transaction belongs to """ self.manager = manager self.list = []
def isEmpty(
self)
tests to see if this transaction has no actions in it
def isEmpty(self): """ tests to see if this transaction has no actions in it """ return not self.list
def push(
self, func, tpl)
pushes a new undo action onto this transaction
def push(self, func, tpl ): """ pushes a new undo action onto this transaction """ if not self.manager.inUndo(): self.list.append(UndoAction(func,tpl))
def undo(
self)
undoes all of the actions in this transaction
def undo(self): """ undoes all of the actions in this transaction """ while self.list: self.list[-1].undo() del self.list[-1] self.list = []
Instance variables
var list
var manager