разделил vimview и cursesadapter на 2 класса
parent
435987dcc6
commit
e5ff723cb1
11
main.py
11
main.py
|
@ -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()
|
80
mvc/views.py
80
mvc/views.py
|
@ -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
|
||||
|
@ -45,41 +87,3 @@ 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)) # Общее количество строк
|
Loading…
Reference in New Issue