| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- // package win_debug -- окно отладки для экрана
- package win_debug
- import (
- "fmt"
- "github.com/gdamore/tcell"
- "p78git.ddns.net/svi/libtui/alias"
- "p78git.ddns.net/svi/libtui/lib/line_cell/cell"
- "p78git.ddns.net/svi/libtui/types"
- "p78git.ddns.net/svi/libtui/lib/widget"
- )
- // WinDebug -- окно отладки для экрана
- type WinDebug struct {
- *widget.Widget
- app types.IKernel
- screen types.IScreen
- }
- // NewWinDebug -- возвращает новое окно отладки для экрана
- func NewWinDebug(app types.IKernel) (*WinDebug, error) {
- if app == nil {
- return nil, fmt.Errorf("NewWinDebug(): IApp==nil")
- }
- widget, err := widget.NewWidget(app)
- if err != nil {
- return nil, fmt.Errorf("NewWinDebug(): in create IWidget, err=\n\t%w", err)
- }
- sf := &WinDebug{
- Widget: widget,
- app: app,
- screen: app.Screen(),
- }
- return sf, nil
- }
- // Hide -- скрыть окно отладки экрана
- func (sf *WinDebug) Hide() {
- sf.Widget.Hide()
- }
- // Show -- показать окно отладки экрана
- func (sf *WinDebug) Show() {
- sf.Widget.Show()
- }
- // SetPos -- устанавливает позицию окна отладки
- func (sf *WinDebug) SetPos(x alias.PosX, y alias.PosY) {
- // Сначала вычислить квадрант экрана
- sizeX, sizeY := sf.app.Screen().Size()
- if alias.SizeX(x) >= sizeX/2 { // Кусор в правой половине
- x -= 30
- } else {
- x += 5
- }
- if alias.SizeY(y) >= sizeY/2 { // Курсор в нижней половине
- y -= 5
- } else {
- y += 5
- }
- sf.Widget.SetPos(x, y)
- }
- // Draw -- перерисовывает окноотладки по требованию
- func (sf *WinDebug) Draw() {
- if !sf.Widget.IsVisible() {
- return
- }
- sf.Widget.Draw()
- posX, posY := sf.app.Cursor().Pos()
- strOut := fmt.Sprintf("WinDebug.Draw(): pos=%v:%v", posX, posY)
- colorFg := tcell.NewRGBColor(200, 200, 200)
- style1 := tcell.StyleDefault
- colorBg := tcell.NewRGBColor(0, 0, 255)
- style1 = style1.Foreground(colorFg).Background(colorBg)
- sf.drawText(alias.Style(style1), strOut)
- }
- func (sf *WinDebug) drawText(style alias.Style, text string) {
- posX, posY := sf.Pos()
- for adr, r := range text {
- cell := cell.NewCell()
- cell.SetPos(posX+alias.PosX(adr), posY)
- cell.SetLit(alias.Lit(r))
- cell.SetStyle(style)
- sf.screen.SetCell(cell)
- }
- }
|