def __undo(self, update_history=True): """ Access the last committed transaction, and revert the data to the state before the transaction was committed. """ txn = self.undoq.pop() self.redoq.append(txn) transaction = txn db = self.db subitems = transaction.get_recnos(reverse=True) # Process all records in the transaction for record_id in subitems: (key, trans_type, handle, old_data, new_data) = \ pickle.loads(self.undodb[record_id]) if key == REFERENCE_KEY: self.undo_reference(old_data, handle, self.mapbase[key]) else: self.undo_data(old_data, handle, self.mapbase[key], db.emit, _SIGBASE[key]) # Notify listeners if db.undo_callback: if self.undo_count > 0: db.undo_callback( _("_Undo %s") % self.undoq[-1].get_description()) else: db.undo_callback(None) if db.redo_callback: db.redo_callback(_("_Redo %s") % transaction.get_description()) if update_history and db.undo_history_callback: db.undo_history_callback() return True
def __redo(self, db=None, update_history=True): """ Access the last undone transaction, and revert the data to the state before the transaction was undone. """ txn = self.redoq.pop() self.undoq.append(txn) transaction = txn db = self.db subitems = transaction.get_recnos() # Process all records in the transaction for record_id in subitems: (key, trans_type, handle, old_data, new_data) = \ pickle.loads(self.undodb[record_id]) if key == REFERENCE_KEY: self.undo_reference(new_data, handle, self.mapbase[key]) else: self.undo_data(new_data, handle, self.mapbase[key], db.emit, _SIGBASE[key]) # Notify listeners if db.undo_callback: db.undo_callback(_("_Undo %s") % transaction.get_description()) if db.redo_callback: if self.redo_count > 1: new_transaction = self.redoq[-2] db.redo_callback(_("_Redo %s") % new_transaction.get_description()) else: db.redo_callback(None) if update_history and db.undo_history_callback: db.undo_history_callback() return True