refactor(ui): вынести панель «Логи» (LogPanel) из монолита окна
Спеца 12.8-12.9: интерфейс + Nil в internal/ui/log_panel.go, Fyne-реализация в internal/ui/desktop/log_panel.go, окно использует контракт вместо logsLbl.
This commit is contained in:
29
internal/ui/log_panel.go
Normal file
29
internal/ui/log_panel.go
Normal file
@@ -0,0 +1,29 @@
|
||||
// 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) {}
|
||||
Reference in New Issue
Block a user