from abc import ABC, abstractmethod from mvc.views import CursesAdapter from mvc.models import VimModel class IStrategy(ABC): def __init__(self, model: VimModel, adapter: CursesAdapter): self.model = model self.adapter = adapter @abstractmethod def HandleInput(self, symbolCode: int) -> bool: pass class Controller: def __init__(self, strategy: IStrategy): self.strategy = strategy def SetController(self, strategy: IStrategy): self.strategy = strategy def HandleInput(self, symbolCode: int): return self.strategy.HandleInput(symbolCode) class EditStrategy(IStrategy): def __init__(self, model: VimModel, adapter: CursesAdapter): self.model = model self.adapter = adapter def HandleInput(self, symbolCode): """Обработка ввода пользователя""" match symbolCode: case self.adapter.KEY_ESCAPE: return False case self.adapter.KEY_LEFT: self.model.MoveLeft() case self.adapter.KEY_RIGHT: self.model.MoveRight() case self.adapter.KEY_UP: self.model.MoveUp() case self.adapter.KEY_DOWN: self.model.MoveDown() case self.adapter.KEY_ENTER: self.model.Enter() case self.adapter.KEY_BACKSPACE_1: self.model.Backspace() case self.adapter.KEY_BACKSPACE_2: self.model.Backspace() case self.adapter.KEY_CTRL_S: self.model.SaveFile() case _: if symbolCode > 127 or symbolCode < 0: print("Only 1-byte symbols!") return False self.model.InsertSymbol(symbolCode) self.model.Scroll(self.adapter.lines, self.adapter.cols) return True