У модели теперь есть методы, отвечающие за изменение текущей позиции

master
serr 2025-02-04 13:37:47 +03:00
parent 50595ba6f6
commit f79ad4010f
3 changed files with 34 additions and 19 deletions

View File

@ -1 +1 @@
Простой консольный текстовый редактор по типу вима, написанный на Python в ходе лабораторной работы по ООП.
Простой консольный текстовый редактор по типу вима, написанный на Python в ходе лабораторной работы по ООП

View File

@ -1,7 +1,10 @@
import curses
from views import CursesAdapter
from models import VimModel
class EditController:
def __init__(self, model, view):
def __init__(self, model: VimModel, view: CursesAdapter):
self.model = model
self.view = view
@ -11,31 +14,19 @@ class EditController:
return False
elif symbolCode == curses.KEY_LEFT:
if self.model.currentCol > 0:
self.model.currentCol -= 1
elif self.model.currentLine > 0:
self.model.currentLine -= 1
self.model.currentCol = len(self.model.displayBuffer[self.model.currentLine])
self.model.MoveLeft()
elif symbolCode == curses.KEY_RIGHT:
if self.model.currentCol < len(self.model.displayBuffer[self.model.currentLine]):
self.model.currentCol += 1
elif self.model.currentLine < len(self.model.displayBuffer) - 1:
self.model.currentLine += 1
self.model.currentCol = 0
self.model.MoveRight()
elif symbolCode == curses.KEY_UP:
if self.model.currentLine > 0:
self.model.currentLine -= 1
self.model.currentCol = min(self.model.currentCol, len(self.model.displayBuffer[self.model.currentLine]))
self.model.MoveUp()
elif symbolCode == curses.KEY_DOWN:
if self.model.currentLine < len(self.model.displayBuffer) - 1:
self.model.currentLine += 1
self.model.currentCol = min(self.model.currentCol, len(self.model.displayBuffer[self.model.currentLine]))
self.model.MoveDown()
# BACKSPACE
elif symbolCode in (127, 8): # Backspace
elif symbolCode in (127, 8): # Backspace
if self.model.currentCol > 0: # Если символ существует в текущей строке
self.model.currentCol -= 1
del self.model.displayBuffer[self.model.currentLine][self.model.currentCol] # Удаляем символ

View File

@ -7,6 +7,30 @@ class VimModel:
self.scrollX = 0 # горизонтальная прокрутка
self.file_path = "" # путь к файлу
def MoveLeft(self):
if self.currentCol > 0:
self.currentCol -= 1
elif self.currentLine > 0:
self.currentLine -= 1
self.currentCol = len(self.displayBuffer[self.currentLine])
def MoveRight(self):
if self.currentCol < len(self.displayBuffer[self.currentLine]):
self.currentCol += 1
elif self.currentLine < len(self.displayBuffer) - 1:
self.currentLine += 1
self.currentCol = 0
def MoveUp(self):
if self.currentLine > 0:
self.currentLine -= 1
self.currentCol = min(self.currentCol, len(self.displayBuffer[self.currentLine]))
def MoveDown(self):
if self.currentLine < len(self.displayBuffer) - 1:
self.currentLine += 1
self.currentCol = min(self.currentCol, len(self.displayBuffer[self.currentLine]))
def load_file(self, file_path):
"""Загрузка файла для редактирования"""
self.file_path = file_path