чуть чуть поменял структуру

MyString
serr 2025-02-11 17:44:13 +03:00
parent ee2337591c
commit d63f635d28
3 changed files with 30 additions and 28 deletions

21
main.py
View File

@ -2,8 +2,8 @@ import sys
from mvc.models import VimModel
from mvc.views import VimView
from adapter import CursesAdapter
from mvc.controllers import Controller, ReturnCode
from mvc.controllers import EditStrategy, CommandStrategy, NormalStrategy
from mvc.controllers import Controller
from mvc.controllers import NormalStrategy
import tools
def main():
@ -20,22 +20,7 @@ def main():
view.SetModel(model) # view subscribe model
while True:
model.notify()
symbolCode = view.curses_adapter.GetChar()
match controller.HandleInput(symbolCode):
case ReturnCode.SET_BASIC_MODE:
controller.SetStrategy(NormalStrategy(model, view.curses_adapter))
case ReturnCode.SET_COMMAND_MODE:
controller.SetStrategy(CommandStrategy(model, view.curses_adapter))
case ReturnCode.SET_EDIT_MODE:
controller.SetStrategy(EditStrategy(model, view.curses_adapter))
case ReturnCode.EXIT_CODE:
break
view.curses_adapter.Cleanup()
controller.Run()
if __name__ == "__main__":
main()

View File

@ -1,6 +1,6 @@
import tools
from abc import ABC, abstractmethod
from mvc.views import CursesAdapter
from adapter import CursesAdapter
from mvc.models import VimModel, ReturnCode
def CommonInput(HandleInputFunc):
@ -48,6 +48,23 @@ class Controller:
def HandleInput(self, symbolCode: int):
return self.strategy.HandleInput(symbolCode)
def Run(self) -> None:
while True:
self.strategy.model.notify()
symbolCode = self.strategy.adapter.GetChar()
match self.HandleInput(symbolCode):
case ReturnCode.SET_BASIC_MODE:
self.SetStrategy(NormalStrategy(self.strategy.model, self.strategy.adapter))
case ReturnCode.SET_COMMAND_MODE:
self.SetStrategy(CommandStrategy(self.strategy.model, self.strategy.adapter))
case ReturnCode.SET_EDIT_MODE:
self.SetStrategy(EditStrategy(self.strategy.model, self.strategy.adapter))
case ReturnCode.EXIT_CODE:
break
self.strategy.adapter.Cleanup()
class CommandStrategy(BaseStrategy):
"""command input mode"""
def __init__(self, model: VimModel, adapter: CursesAdapter):

View File

@ -15,16 +15,16 @@ class ReturnCode(Enum):
class Observable(ABC):
@abstractmethod
def attach(self, observer):
def attach(self, observer) -> None:
pass
@abstractmethod
def detach(self, observer):
def detach(self, observer) -> None:
pass
@abstractmethod
def notify(self):
def notify(self) -> None:
pass
class VimModel:
class VimModel(Observable):
observers: List
displayLinesCount: int
displayColsCount: int
@ -62,13 +62,13 @@ class VimModel:
self.commandBuffer = ""
self.exchangeBuffer = ""
def attach(self, observer):
def attach(self, observer) -> None:
self.observers.append(observer)
def detach(self, observer):
def detach(self, observer) -> None:
self.observers.remove(observer)
def notify(self):
def notify(self) -> None:
for observer in self.observers:
observer.Update()
@ -79,7 +79,7 @@ class VimModel:
if len(self.keyLog) > 5000: self.keyLog.clear()
self.keyLog.append((symbolCode, tools.UnixSec()))
def CombinationCheck(self, comb: str, interval: int) -> None:
def CombinationCheck(self, comb: str, interval: int) -> bool:
"""Проверяет была ли нажата комбинация клавиш.
Принимает фактический ввод, команду с которой сравниваем и интервал времени на команду"""
if len(self.keyLog) > len(comb) - 1:
@ -201,7 +201,7 @@ class VimModel:
self.currentLine = numberLine
self.currentCol = 0
def EnterCommand(self):
def EnterCommand(self) -> None:
"""Обработка введенной команды"""
cmd = ''.join(self.commandBuffer)
self.commandBuffer = ""