Source code for RWESharp.Core.HistorySystem
"""
All elements and actions are not made untill specific change in history happends
"""
from __future__ import annotations
from RWESharp.Modify.HistoryElement import HistoryElement
[docs]
class LevelHistory:
[docs]
def __init__(self, level):
from RWESharp.Level.RWELevel import RWELevel
self.undoactions: list[HistoryElement] = []
self.redoactions: list[HistoryElement] = []
self.level: RWELevel = level
[docs]
def undo(self):
if len(self.undoactions) == 0:
return
action = self.undoactions.pop()
action.undo_changes()
self.redoactions.append(action)
[docs]
def redo(self):
if len(self.redoactions) == 0:
return
action = self.redoactions.pop()
action.redo_changes()
self.undoactions.append(action)
@property
def last_element(self) -> HistoryElement | None:
try:
return self.undoactions[-1]
except IndexError:
return None
[docs]
def add_element(self, element: HistoryElement):
self.redoactions = []
self.undoactions.append(element)
[docs]
class MultiHistoryElement(HistoryElement):
[docs]
def __init__(self, history, elements: list[HistoryElement]):
super().__init__(history)
self.elements = elements
[docs]
def undo_changes(self):
for i in reversed(self.elements):
i.undo_changes()
[docs]
def redo_changes(self):
for i in self.elements:
i.redo_changes()
[docs]
class LevelResized(MultiHistoryElement):
[docs]
def __init__(self, history, elements, oldrect, newrect):
super().__init__(history, elements)
self.oldrect = oldrect
self.newrect = newrect
self.level._level_size = [self.newrect.width(), self.newrect.height()]
if self.level.viewport is None:
return
self.level.viewport.level_resized(self.newrect)
[docs]
def undo_changes(self):
super().undo_changes()
self.level._level_size = [self.oldrect.width(), self.oldrect.height()]
if self.level.viewport is None:
return
self.level.viewport.level_resized(self.oldrect)
[docs]
def redo_changes(self):
super().redo_changes()
self.level._level_size = [self.newrect.width(), self.newrect.height()]
if self.level.viewport is None:
return
self.level.viewport.level_resized(self.newrect)