разделил vimview и cursesadapter на 2 класса

master
serr 2025-02-04 15:05:41 +03:00
parent 435987dcc6
commit e5ff723cb1
2 changed files with 49 additions and 44 deletions

11
main.py
View File

@ -1,11 +1,11 @@
from mvc.models import VimModel
from mvc.views import CursesAdapter
from mvc.views import VimView
from mvc.controllers import EditController
def main():
model = VimModel()
view = CursesAdapter()
controller = EditController(model, view)
view = VimView()
controller = EditController(model, view.curses_adapter)
# Загрузка файла для редактирования
file_path = "example.txt" # Укажите путь к файлу
@ -16,10 +16,11 @@ def main():
model.currentLine, model.currentCol,
model.scrollX, model.scrollY,
model.file_path)
symbolCode = view.GetChar()
symbolCode = view.curses_adapter.GetChar()
if not controller.HandleInput(symbolCode): break
view.Cleanup()
view.curses_adapter.Cleanup()
if __name__ == "__main__":
main()

View File

@ -1,5 +1,47 @@
import curses
class VimView:
def __init__(self) -> None:
self.curses_adapter = CursesAdapter()
def Render(self,
displayBuffer: list[list[str]],
currentLine: int, currentCol: int,
scrollX: int, scrollY: int,
file_path: str):
"""Отрисовка текущего состояния"""
self.curses_adapter.screen.clear()
# display visible part of text
for i in range(self.curses_adapter.lines - 1):
if i + scrollY < len(displayBuffer):
line = ''.join(displayBuffer[i + scrollY])
if scrollX < len(line):
self.curses_adapter.SetString(i, 0, line[scrollX:scrollX + self.curses_adapter.cols])
else:
self.curses_adapter.SetString(i, 0, '')
else:
self.curses_adapter.SetString(i, 0, '')
# update mode bar
self.EditModeBar(currentLine, len(displayBuffer), file_path)
# update cursor
self.curses_adapter.SetCursor(currentLine - scrollY, currentCol - scrollX)
self.curses_adapter.Refresh()
def EditModeBar(self, currentLine, totalLines, fileName):
"""Print edit mode information panel"""
self.curses_adapter.screen.addstr(self.curses_adapter.lines - 1, 0, ' ' * (self.curses_adapter.cols - 1)) # Очистка строки
self.curses_adapter.screen.addstr(self.curses_adapter.lines - 1, 0, "FILE: ")
self.curses_adapter.screen.addstr(fileName, curses.color_pair(1)) # Имя файла
self.curses_adapter.screen.addstr(" | MODE:")
self.curses_adapter.screen.addstr(" EDIT", curses.color_pair(1))
self.curses_adapter.screen.addstr(" | LINE: ")
self.curses_adapter.screen.addstr(str(currentLine + 1), curses.color_pair(1))
self.curses_adapter.screen.addstr("/")
self.curses_adapter.screen.addstr(str(totalLines), curses.color_pair(1)) # Общее количество строк
class CursesAdapter:
def __init__(self) -> None:
self.KEY_LEFT = curses.KEY_LEFT
@ -44,42 +86,4 @@ class CursesAdapter:
def GetChar(self) -> int:
"""Wait users input"""
return self.screen.getch()
def Render(self,
displayBuffer: list[list[str]],
currentLine: int, currentCol: int,
scrollX: int, scrollY: int,
file_path: str):
"""Отрисовка текущего состояния"""
self.screen.clear()
# display visible part of text
for i in range(self.lines - 1):
if i + scrollY < len(displayBuffer):
line = ''.join(displayBuffer[i + scrollY])
if scrollX < len(line):
self.SetString(i, 0, line[scrollX:scrollX + self.cols])
else:
self.SetString(i, 0, '')
else:
self.SetString(i, 0, '')
# update mode bar
self.EditModeBar(currentLine, len(displayBuffer), file_path)
# update cursor
self.SetCursor(currentLine - scrollY, currentCol - scrollX)
self.Refresh()
def EditModeBar(self, currentLine, totalLines, fileName):
"""Print edit mode information panel"""
self.screen.addstr(self.lines - 1, 0, ' ' * (self.cols - 1)) # Очистка строки
self.screen.addstr(self.lines - 1, 0, "FILE: ")
self.screen.addstr(fileName, curses.color_pair(1)) # Имя файла
self.screen.addstr(" | MODE:")
self.screen.addstr(" EDIT", curses.color_pair(1))
self.screen.addstr(" | LINE: ")
self.screen.addstr(str(currentLine + 1), curses.color_pair(1))
self.screen.addstr("/")
self.screen.addstr(str(totalLines), curses.color_pair(1)) # Общее количество строк
return self.screen.getch()