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

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.models import VimModel
from mvc.views import VimView from mvc.views import VimView
from adapter import CursesAdapter from adapter import CursesAdapter
from mvc.controllers import Controller, ReturnCode from mvc.controllers import Controller
from mvc.controllers import EditStrategy, CommandStrategy, NormalStrategy from mvc.controllers import NormalStrategy
import tools import tools
def main(): def main():
@ -20,22 +20,7 @@ def main():
view.SetModel(model) # view subscribe model view.SetModel(model) # view subscribe model
while True: controller.Run()
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()
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@ -1,6 +1,6 @@
import tools import tools
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from mvc.views import CursesAdapter from adapter import CursesAdapter
from mvc.models import VimModel, ReturnCode from mvc.models import VimModel, ReturnCode
def CommonInput(HandleInputFunc): def CommonInput(HandleInputFunc):
@ -47,6 +47,23 @@ class Controller:
def HandleInput(self, symbolCode: int): def HandleInput(self, symbolCode: int):
return self.strategy.HandleInput(symbolCode) 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): class CommandStrategy(BaseStrategy):
"""command input mode""" """command input mode"""

View File

@ -15,16 +15,16 @@ class ReturnCode(Enum):
class Observable(ABC): class Observable(ABC):
@abstractmethod @abstractmethod
def attach(self, observer): def attach(self, observer) -> None:
pass pass
@abstractmethod @abstractmethod
def detach(self, observer): def detach(self, observer) -> None:
pass pass
@abstractmethod @abstractmethod
def notify(self): def notify(self) -> None:
pass pass
class VimModel: class VimModel(Observable):
observers: List observers: List
displayLinesCount: int displayLinesCount: int
displayColsCount: int displayColsCount: int
@ -62,13 +62,13 @@ class VimModel:
self.commandBuffer = "" self.commandBuffer = ""
self.exchangeBuffer = "" self.exchangeBuffer = ""
def attach(self, observer): def attach(self, observer) -> None:
self.observers.append(observer) self.observers.append(observer)
def detach(self, observer): def detach(self, observer) -> None:
self.observers.remove(observer) self.observers.remove(observer)
def notify(self): def notify(self) -> None:
for observer in self.observers: for observer in self.observers:
observer.Update() observer.Update()
@ -79,7 +79,7 @@ class VimModel:
if len(self.keyLog) > 5000: self.keyLog.clear() if len(self.keyLog) > 5000: self.keyLog.clear()
self.keyLog.append((symbolCode, tools.UnixSec())) 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: if len(self.keyLog) > len(comb) - 1:
@ -201,7 +201,7 @@ class VimModel:
self.currentLine = numberLine self.currentLine = numberLine
self.currentCol = 0 self.currentCol = 0
def EnterCommand(self): def EnterCommand(self) -> None:
"""Обработка введенной команды""" """Обработка введенной команды"""
cmd = ''.join(self.commandBuffer) cmd = ''.join(self.commandBuffer)
self.commandBuffer = "" self.commandBuffer = ""