|
@@ -3,6 +3,9 @@ package mock_screen
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
"fmt"
|
|
"fmt"
|
|
|
|
|
+ "os"
|
|
|
|
|
+ "os/exec"
|
|
|
|
|
+ "time"
|
|
|
|
|
|
|
|
"p78git.ddns.net/svi/libtui/alias"
|
|
"p78git.ddns.net/svi/libtui/alias"
|
|
|
"p78git.ddns.net/svi/libtui/types"
|
|
"p78git.ddns.net/svi/libtui/types"
|
|
@@ -11,6 +14,7 @@ import (
|
|
|
// MockScreen -- мок-экран для тестов
|
|
// MockScreen -- мок-экран для тестов
|
|
|
type MockScreen struct {
|
|
type MockScreen struct {
|
|
|
kern types.IKernel
|
|
kern types.IKernel
|
|
|
|
|
+ scr [][]string
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// NewMockScreen -- возвращает новый мок-экран для тестов
|
|
// NewMockScreen -- возвращает новый мок-экран для тестов
|
|
@@ -20,6 +24,14 @@ func NewMockScreen(kern types.IKernel) (*MockScreen, error) {
|
|
|
}
|
|
}
|
|
|
sf := &MockScreen{
|
|
sf := &MockScreen{
|
|
|
kern: kern,
|
|
kern: kern,
|
|
|
|
|
+ scr: make([][]string, 0),
|
|
|
|
|
+ }
|
|
|
|
|
+ for x := 0; x < 80; x++ {
|
|
|
|
|
+ row := make([]string, 0)
|
|
|
|
|
+ for y := 0; y < 40; y++ {
|
|
|
|
|
+ row = append(row, "")
|
|
|
|
|
+ }
|
|
|
|
|
+ sf.scr = append(sf.scr, row)
|
|
|
}
|
|
}
|
|
|
return sf, nil
|
|
return sf, nil
|
|
|
}
|
|
}
|
|
@@ -28,7 +40,9 @@ func NewMockScreen(kern types.IKernel) (*MockScreen, error) {
|
|
|
func (sf *MockScreen) Clear() {}
|
|
func (sf *MockScreen) Clear() {}
|
|
|
|
|
|
|
|
// Draw -- отрисовывает экран
|
|
// Draw -- отрисовывает экран
|
|
|
-func (sf *MockScreen) Draw() {}
|
|
|
|
|
|
|
+func (sf *MockScreen) Draw() {
|
|
|
|
|
+ sf.kern.Draw()
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
// DrawText -- отрисовывает текст по заданной позиции
|
|
// DrawText -- отрисовывает текст по заданной позиции
|
|
|
func (sf *MockScreen) DrawText(posX alias.PosX, posy alias.PosY, text string) {}
|
|
func (sf *MockScreen) DrawText(posX alias.PosX, posy alias.PosY, text string) {}
|
|
@@ -43,7 +57,10 @@ func (sf *MockScreen) Resize(sizeX alias.SizeX, sizeY alias.SizeY) {}
|
|
|
|
|
|
|
|
// Run -- типа запускает экран в работу
|
|
// Run -- типа запускает экран в работу
|
|
|
func (sf *MockScreen) Run() {
|
|
func (sf *MockScreen) Run() {
|
|
|
-
|
|
|
|
|
|
|
+ for {
|
|
|
|
|
+ time.Sleep(time.Millisecond * 500)
|
|
|
|
|
+ sf.Draw()
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// SetCell -- печатает ячейку на экране
|
|
// SetCell -- печатает ячейку на экране
|
|
@@ -57,4 +74,29 @@ func (sf *MockScreen) Size() (alias.SizeX, alias.SizeY) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Plot -- рисует точку на экране
|
|
// Plot -- рисует точку на экране
|
|
|
-func (sf *MockScreen) Plot(posX alias.PosX, posY alias.PosY, lit alias.Lit, color alias.Color) {}
|
|
|
|
|
|
|
+func (sf *MockScreen) Plot(posX alias.PosX, posY alias.PosY, lit alias.Lit, color alias.Color) {
|
|
|
|
|
+ strLit := string(lit)
|
|
|
|
|
+ if strLit == " " {
|
|
|
|
|
+ strLit = "."
|
|
|
|
|
+ }
|
|
|
|
|
+ sf.scr[posX][posY] = strLit
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// Flush -- сбрасывает содержимое буфера на экран
|
|
|
|
|
+func (sf *MockScreen) Flush() {
|
|
|
|
|
+ cmd := exec.Command("clear")
|
|
|
|
|
+ cmd.Stdout = os.Stdout
|
|
|
|
|
+ cmd.Run()
|
|
|
|
|
+ for _, row := range sf.scr {
|
|
|
|
|
+ strOut := ""
|
|
|
|
|
+ for _, strLit := range row {
|
|
|
|
|
+ if strLit==""{
|
|
|
|
|
+ strLit=" "
|
|
|
|
|
+ }
|
|
|
|
|
+ strOut += strLit
|
|
|
|
|
+ }
|
|
|
|
|
+ fmt.Printf(strOut + "\n")
|
|
|
|
|
+ }
|
|
|
|
|
+ // Очистка буфера
|
|
|
|
|
+
|
|
|
|
|
+}
|