Спеца 12.8-12.9: интерфейс + Nil в internal/ui/log_panel.go, Fyne-реализация в internal/ui/desktop/log_panel.go, окно использует контракт вместо logsLbl.
29 lines
1.9 KiB
Go
29 lines
1.9 KiB
Go
// Package ui — контроллер и представления десктопного интерфейса (Fyne).
|
||
//
|
||
// Слой обмена с ядром: однонаправленный поток (спец 12.2–12.5).
|
||
// - Core мутирует состояние; UI только читает снимки и реагирует на события.
|
||
// - Действия UI = команды (CreateTask/ApproveTask/...), которые зовут Core.
|
||
// - Подписчик шины (Controller) получает события и перекладывает их в View
|
||
// (реализация Fyne) через fyne.Do — никаких прямых вызовов Fyne из core.
|
||
//
|
||
// Контракты компонентов-виджетов (спец 12.8): интерфейс + Nil-реализация.
|
||
package ui
|
||
|
||
// LogPanel — панель «Логи» (спец 12.9): поток системных логов (сырые строки).
|
||
//
|
||
// Содержит строки лога в буфере ограниченного размера; при превышении лимита
|
||
// старые строки отбрасываются. Контейнер виджета отдаётся окну для встраивания
|
||
// в таб «Логи» — реализация (Fyne) сама владеет своим виджетом.
|
||
type LogPanel interface {
|
||
// Append добавляет строку лога. Реализация обязана перекладывать работу
|
||
// на поток Fyne (fyne.Do / fyne.DoAndWait), т.к. вызывается из горутин Hub.
|
||
Append(text string)
|
||
}
|
||
|
||
// NilLogPanel — no-op реализация LogPanel для headless-режима и тестов.
|
||
type NilLogPanel struct{}
|
||
|
||
// NewNilLogPanel создаёт NilLogPanel.
|
||
func NewNilLogPanel() *NilLogPanel { return &NilLogPanel{} }
|
||
|
||
func (NilLogPanel) Append(string) {} |