displayLines, displayCols из модели, убрал лишнюю функцию

master
serr 2025-02-04 20:28:41 +03:00
parent 7326aa1834
commit 8e711e95ae
4 changed files with 18 additions and 32 deletions

View File

@ -1,15 +1,13 @@
from mvc.models import VimModel 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 Controller, ReturnCode
from mvc.controllers import EditStrategy, CommandStrategy, NormalStrategy from mvc.controllers import EditStrategy, CommandStrategy, NormalStrategy
def main(): def main():
adapter = CursesAdapter() model, view = VimModel(), VimView()
model = VimModel(adapter.lines, adapter.cols)
view = VimView(adapter)
# start mode - navigation mode # start mode - navigation mode
strategy = NormalStrategy(model, adapter) strategy = NormalStrategy(model, view.curses_adapter)
controller = Controller(strategy) controller = Controller(strategy)
# Загрузка файла для редактирования # Загрузка файла для редактирования

View File

@ -50,7 +50,10 @@ class CommandStrategy(BaseStrategy):
if result != ReturnCode.CONTINUE: return result if result != ReturnCode.CONTINUE: return result
match symbolCode: 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: case self.adapter.KEY_BACKSPACE_1 | self.adapter.KEY_BACKSPACE_2:
self.model.BackspaceCommand() self.model.BackspaceCommand()
case _: case _:

View File

@ -9,9 +9,7 @@ class ReturnCode(Enum):
CONTINUE = -96 CONTINUE = -96
class VimModel: class VimModel:
def __init__(self, displayLines: int, displayCols: int): def __init__(self):
self.displayLines = displayLines
self.displayCols = displayCols
self.displayBuffer = [] # буфер для хранения всех строк self.displayBuffer = [] # буфер для хранения всех строк
self.currentLine = 0 # текущий индекс строки self.currentLine = 0 # текущий индекс строки
self.currentCol = 0 # текущий индекс колонки self.currentCol = 0 # текущий индекс колонки
@ -46,56 +44,43 @@ class VimModel:
self.displayBuffer[self.currentLine].insert(self.currentCol, chr(symbolCode)) self.displayBuffer[self.currentLine].insert(self.currentCol, chr(symbolCode))
self.currentCol += 1 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): def EnterCommand(self):
"""Обработка введенной команды""" """Обработка введенной команды"""
cmd = ''.join(self.commandBuffer) cmd = ''.join(self.commandBuffer)
self.commandBuffer.clear() self.commandBuffer.clear()
match cmd: match cmd:
case "$": case "$":
self.MoveToPositionWithScroll(len(self.displayBuffer[self.currentLine])) # Перемещение в конец строки self.currentCol = len(self.displayBuffer[self.currentLine]) # Перемещение в конец строки
return ReturnCode.GOOD return ReturnCode.GOOD
case "^" | "0": case "^" | "0":
self.MoveToPositionWithScroll(0) # Перемещение в начало строки self.currentCol = 0 # Перемещение в начало строки
return ReturnCode.GOOD return ReturnCode.GOOD
case "q": case "q":
return ReturnCode.EXIT_CODE return ReturnCode.EXIT_CODE
case "i": case "i":
return ReturnCode.SET_EDIT_MODE return ReturnCode.SET_EDIT_MODE
case "S": case "S":
self.MoveToPositionWithScroll(0) self.currentCol = 0
self.displayBuffer[self.currentLine] = [] self.displayBuffer[self.currentLine] = []
return ReturnCode.SET_EDIT_MODE return ReturnCode.SET_EDIT_MODE
case "RIGHT": case "RIGHT":
self.MoveToPositionWithScroll(self.currentCol + 1) self.currentCol += 1
return ReturnCode.GOOD return ReturnCode.GOOD
case "LEFT": case "LEFT":
self.MoveToPositionWithScroll(self.currentCol - 1) if self.currentCol > 0:
self.currentCol -= 1
return ReturnCode.GOOD return ReturnCode.GOOD
case "UP": case "UP":
if self.currentLine > 0: if self.currentLine > 0:
self.currentLine -= 1 self.currentLine -= 1
if self.currentCol > len(self.displayBuffer[self.currentLine]): 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 return ReturnCode.GOOD
case "DOWN": case "DOWN":
if self.currentLine < len(self.displayBuffer) - 1: if self.currentLine < len(self.displayBuffer) - 1:
self.currentLine += 1 self.currentLine += 1
if self.currentCol > len(self.displayBuffer[self.currentLine]): 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 return ReturnCode.GOOD
def Enter(self) -> None: def Enter(self) -> None:

View File

@ -49,8 +49,8 @@ class CursesAdapter:
class VimView: class VimView:
def __init__(self, adapter: CursesAdapter) -> None: def __init__(self) -> None:
self.curses_adapter = adapter self.curses_adapter = CursesAdapter()
def Render(self, def Render(self,