displayLines, displayCols из модели, убрал лишнюю функцию
parent
7326aa1834
commit
8e711e95ae
8
main.py
8
main.py
|
@ -1,15 +1,13 @@
|
|||
from mvc.models import VimModel
|
||||
from mvc.views import VimView, CursesAdapter
|
||||
from mvc.views import VimView
|
||||
from mvc.controllers import Controller, ReturnCode
|
||||
from mvc.controllers import EditStrategy, CommandStrategy, NormalStrategy
|
||||
|
||||
def main():
|
||||
adapter = CursesAdapter()
|
||||
model = VimModel(adapter.lines, adapter.cols)
|
||||
view = VimView(adapter)
|
||||
model, view = VimModel(), VimView()
|
||||
|
||||
# start mode - navigation mode
|
||||
strategy = NormalStrategy(model, adapter)
|
||||
strategy = NormalStrategy(model, view.curses_adapter)
|
||||
controller = Controller(strategy)
|
||||
|
||||
# Загрузка файла для редактирования
|
||||
|
|
|
@ -50,7 +50,10 @@ class CommandStrategy(BaseStrategy):
|
|||
if result != ReturnCode.CONTINUE: return result
|
||||
|
||||
match symbolCode:
|
||||
case self.adapter.KEY_ENTER: return self.model.EnterCommand()
|
||||
case self.adapter.KEY_ENTER:
|
||||
code = self.model.EnterCommand()
|
||||
self.model.Scroll(self.adapter.lines, self.adapter.cols)
|
||||
return code
|
||||
case self.adapter.KEY_BACKSPACE_1 | self.adapter.KEY_BACKSPACE_2:
|
||||
self.model.BackspaceCommand()
|
||||
case _:
|
||||
|
|
|
@ -9,9 +9,7 @@ class ReturnCode(Enum):
|
|||
CONTINUE = -96
|
||||
|
||||
class VimModel:
|
||||
def __init__(self, displayLines: int, displayCols: int):
|
||||
self.displayLines = displayLines
|
||||
self.displayCols = displayCols
|
||||
def __init__(self):
|
||||
self.displayBuffer = [] # буфер для хранения всех строк
|
||||
self.currentLine = 0 # текущий индекс строки
|
||||
self.currentCol = 0 # текущий индекс колонки
|
||||
|
@ -46,56 +44,43 @@ class VimModel:
|
|||
self.displayBuffer[self.currentLine].insert(self.currentCol, chr(symbolCode))
|
||||
self.currentCol += 1
|
||||
|
||||
def MoveToPositionWithScroll(self, position: int) -> None:
|
||||
"""
|
||||
Перемещает курсор в указанную позицию в текущей строке
|
||||
и корректирует прокрутку, если это необходимо.
|
||||
"""
|
||||
line_length = len(self.displayBuffer[self.currentLine])
|
||||
self.currentCol = max(0, min(position, line_length))
|
||||
|
||||
# Корректируем прокрутку, если курсор выходит за пределы видимой области
|
||||
if self.currentCol < self.scrollX:
|
||||
self.scrollX = self.currentCol # Прокрутка влево
|
||||
elif self.currentCol >= self.scrollX + self.displayCols:
|
||||
self.scrollX = self.currentCol - self.displayCols + 1 # Прокрутка вправо
|
||||
|
||||
def EnterCommand(self):
|
||||
"""Обработка введенной команды"""
|
||||
cmd = ''.join(self.commandBuffer)
|
||||
self.commandBuffer.clear()
|
||||
match cmd:
|
||||
case "$":
|
||||
self.MoveToPositionWithScroll(len(self.displayBuffer[self.currentLine])) # Перемещение в конец строки
|
||||
self.currentCol = len(self.displayBuffer[self.currentLine]) # Перемещение в конец строки
|
||||
return ReturnCode.GOOD
|
||||
case "^" | "0":
|
||||
self.MoveToPositionWithScroll(0) # Перемещение в начало строки
|
||||
self.currentCol = 0 # Перемещение в начало строки
|
||||
return ReturnCode.GOOD
|
||||
case "q":
|
||||
return ReturnCode.EXIT_CODE
|
||||
case "i":
|
||||
return ReturnCode.SET_EDIT_MODE
|
||||
case "S":
|
||||
self.MoveToPositionWithScroll(0)
|
||||
self.currentCol = 0
|
||||
self.displayBuffer[self.currentLine] = []
|
||||
return ReturnCode.SET_EDIT_MODE
|
||||
case "RIGHT":
|
||||
self.MoveToPositionWithScroll(self.currentCol + 1)
|
||||
self.currentCol += 1
|
||||
return ReturnCode.GOOD
|
||||
case "LEFT":
|
||||
self.MoveToPositionWithScroll(self.currentCol - 1)
|
||||
if self.currentCol > 0:
|
||||
self.currentCol -= 1
|
||||
return ReturnCode.GOOD
|
||||
case "UP":
|
||||
if self.currentLine > 0:
|
||||
self.currentLine -= 1
|
||||
if self.currentCol > len(self.displayBuffer[self.currentLine]):
|
||||
self.MoveToPositionWithScroll(len(self.displayBuffer[self.currentLine]))
|
||||
self.currentCol = len(self.displayBuffer[self.currentLine])
|
||||
return ReturnCode.GOOD
|
||||
case "DOWN":
|
||||
if self.currentLine < len(self.displayBuffer) - 1:
|
||||
self.currentLine += 1
|
||||
if self.currentCol > len(self.displayBuffer[self.currentLine]):
|
||||
self.MoveToPositionWithScroll(len(self.displayBuffer[self.currentLine]))
|
||||
self.currentCol = len(self.displayBuffer[self.currentLine])
|
||||
return ReturnCode.GOOD
|
||||
|
||||
def Enter(self) -> None:
|
||||
|
|
|
@ -49,8 +49,8 @@ class CursesAdapter:
|
|||
|
||||
|
||||
class VimView:
|
||||
def __init__(self, adapter: CursesAdapter) -> None:
|
||||
self.curses_adapter = adapter
|
||||
def __init__(self) -> None:
|
||||
self.curses_adapter = CursesAdapter()
|
||||
|
||||
|
||||
def Render(self,
|
||||
|
|
Loading…
Reference in New Issue