//go:build cgo package desktop import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/widget" "github.com/kamelion/ratatoskr-go/internal/ui" ) // stateLimit — обрезка буфера панели «Состояние» (спец 12.13). const stateLimit = 200_000 // StatePanel — Fyne-реализация ui.StatePanel (спец 12.8, 12.13): агенты и // трейсы выбранной задачи (таб «Состояние»). type StatePanel struct { stateLbl *widget.Label } // NewStatePanel создаёт StatePanel. func NewStatePanel() *StatePanel { p := &StatePanel{} p.stateLbl = widget.NewLabel("") p.stateLbl.Wrapping = fyne.TextWrapWord return p } // Widget возвращает контейнер панели для встраивания в таб «Состояние». func (p *StatePanel) Widget() fyne.CanvasObject { return container.NewScroll(p.stateLbl) } // SetText заменяет содержимое снимком трасс (спец 12.13). func (p *StatePanel) SetText(text string) { p.stateLbl.SetText(text) } // Append добавляет live-строку (буфер ограничен). func (p *StatePanel) Append(text string) { s := p.stateLbl.Text + text + "\n" if len(s) > stateLimit { s = s[len(s)-stateLimit:] } p.stateLbl.SetText(s) } // compile-time проверка реализации контракта. var _ ui.StatePanel = (*StatePanel)(nil)