46 lines
1.7 KiB
Python
46 lines
1.7 KiB
Python
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 |