(Init): Added shit

This commit is contained in:
2026-05-29 00:41:12 +00:00
commit 72005fd71d
52 changed files with 12875 additions and 0 deletions

61
nirimod/undo.py Normal file
View File

@@ -0,0 +1,61 @@
from __future__ import annotations
from dataclasses import dataclass
@dataclass
class UndoEntry:
description: str
snapshot_before: str
snapshot_after: str
class UndoManager:
def __init__(self, max_depth: int = 100):
self._stack: list[UndoEntry] = []
self._redo_stack: list[UndoEntry] = []
self._max = max_depth
def push(self, entry: UndoEntry) -> None:
self._stack.append(entry)
if len(self._stack) > self._max:
self._stack.pop(0)
self._redo_stack.clear()
@property
def last_snapshot(self) -> str | None:
if self._stack:
return self._stack[-1].snapshot_after
return None
@property
def last_description(self) -> str | None:
if self._stack:
return self._stack[-1].description
return None
def pop_undo(self) -> UndoEntry | None:
if not self._stack:
return None
entry = self._stack.pop()
self._redo_stack.append(entry)
return entry
def pop_redo(self) -> UndoEntry | None:
if not self._redo_stack:
return None
entry = self._redo_stack.pop()
self._stack.append(entry)
return entry
def can_undo(self) -> bool:
return bool(self._stack)
def can_redo(self) -> bool:
return bool(self._redo_stack)
def clear(self) -> None:
self._stack.clear()
self._redo_stack.clear()