From e5ff723cb1facc205b9404d14a6a201af51395f2 Mon Sep 17 00:00:00 2001 From: serr Date: Tue, 4 Feb 2025 15:05:41 +0300 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B8?= =?UTF-8?q?=D0=BB=20vimview=20=D0=B8=20cursesadapter=20=D0=BD=D0=B0=202=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 11 +++---- mvc/views.py | 82 +++++++++++++++++++++++++++------------------------- 2 files changed, 49 insertions(+), 44 deletions(-) diff --git a/main.py b/main.py index 814a1de..d136e3d 100644 --- a/main.py +++ b/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() \ No newline at end of file diff --git a/mvc/views.py b/mvc/views.py index 08e0f4f..9932201 100644 --- a/mvc/views.py +++ b/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 @@ -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)) # Общее количество строк \ No newline at end of file + return self.screen.getch() \ No newline at end of file