From d63f635d285615611945d829a2f96f9eeb0c24ca Mon Sep 17 00:00:00 2001 From: serr Date: Tue, 11 Feb 2025 17:44:13 +0300 Subject: [PATCH] =?UTF-8?q?=D1=87=D1=83=D1=82=D1=8C=20=D1=87=D1=83=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BF=D0=BE=D0=BC=D0=B5=D0=BD=D1=8F=D0=BB=20=D1=81?= =?UTF-8?q?=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 21 +++------------------ mvc/controllers.py | 19 ++++++++++++++++++- mvc/models.py | 18 +++++++++--------- 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/main.py b/main.py index a40eae5..33816cb 100644 --- a/main.py +++ b/main.py @@ -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() \ No newline at end of file diff --git a/mvc/controllers.py b/mvc/controllers.py index d782119..87d861e 100644 --- a/mvc/controllers.py +++ b/mvc/controllers.py @@ -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): @@ -47,6 +47,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""" diff --git a/mvc/models.py b/mvc/models.py index 259bc3f..ad8ab0b 100644 --- a/mvc/models.py +++ b/mvc/models.py @@ -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 = ""