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