소스 검색

Добавление главного цикла экрана

SVI 3 년 전
부모
커밋
6120e187c6
4개의 변경된 파일37개의 추가작업 그리고 3개의 파일을 삭제
  1. 19 1
      libtui/v0/app/app.go
  2. 2 2
      libtui/v0/app/app_test.go
  3. 5 0
      libtui/v0/examples/examples.md
  4. 11 0
      libtui/v0/examples/show_app/show_app.go

+ 19 - 1
libtui/v0/app/app.go

@@ -31,10 +31,28 @@ func (sf *App) Screen() types.IScreen {
 
 // Run -- запускает объект приложения в работу
 func (sf *App) Run() error {
+	defer func() {
+		sf.scr.Fini() // Завершить работу с экраном
+	}()
 	if err := sf.run_init(); err != nil {
 		return fmt.Errorf("App.Run(): ininit screen, err=\n\t%w", err)
 	}
-	return fmt.Errorf("App.Run(): доделать")
+	sf.scr.Clear() // Зачистить экран перед началом работы
+	for {          // Главный цикл работы
+		sf.scr.Show() // Обновить экран
+
+		ev := sf.scr.PollEvent() // Получить событие
+
+		// Process event
+		switch ev := ev.(type) {
+		case *tcell.EventResize:
+			sf.scr.Sync()
+		case *tcell.EventKey:
+			if ev.Key() == tcell.KeyCtrlQ { // ev.Key() == tcell.KeyEscape
+				return nil
+			}
+		}
+	}
 }
 
 // Включение экрана терминала

+ 2 - 2
libtui/v0/app/app_test.go

@@ -37,7 +37,7 @@ func (sf *tester) create() {
 		sf.t.Fatalf("create(): screen==nil")
 	}
 	err := sf.iapp.Run()
-	if err != nil {
-		sf.t.Fatalf("create(): in run app, err=%v", err)
+	if err == nil {
+		sf.t.Fatalf("create(): in run app, err==nil")
 	}
 }

+ 5 - 0
libtui/v0/examples/examples.md

@@ -0,0 +1,5 @@
+# Примеры
+
+Директория содержит примеры для демонстрации возможностей библиотеки
+
+> Проверка отображения

+ 11 - 0
libtui/v0/examples/show_app/show_app.go

@@ -0,0 +1,11 @@
+// package main -- демонстрация создания приложения
+//
+//	go run ./examples/show_app
+package main
+
+import "p78git.ddns.net/svi/libtui/app"
+
+func main() {
+	app := app.NewApp()
+	_ = app.Run()
+}