чуть чуть поменял структуру
parent
ee2337591c
commit
d63f635d28
21
main.py
21
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()
|
|
@ -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):
|
||||
|
|
|
@ -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 = ""
|
||||
|
|
Loading…
Reference in New Issue