//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/storage" "github.com/kamelion/ratatoskr-go/internal/ui" ) // TaskDetailPanel — Fyne-реализация ui.TaskDetailPanel (спец 12.8, 12.11): // детали выбранной задачи (заголовок, статус, детали) — верх right-сплита. type TaskDetailPanel struct { titleLbl *widget.Label statusLbl *widget.Label detailLbl *widget.Label } // NewTaskDetailPanel создаёт TaskDetailPanel. func NewTaskDetailPanel() *TaskDetailPanel { p := &TaskDetailPanel{} p.titleLbl = widget.NewLabel("—") p.titleLbl.TextStyle = fyne.TextStyle{Bold: true} p.statusLbl = widget.NewLabel("") p.statusLbl.TextStyle = fyne.TextStyle{Italic: true} p.detailLbl = widget.NewLabel("") p.detailLbl.Wrapping = fyne.TextWrapWord return p } // Widget возвращает контейнер панели для встраивания в окно (верх right-сплита). func (p *TaskDetailPanel) Widget() fyne.CanvasObject { return container.NewVBox(p.titleLbl, p.statusLbl, p.detailLbl) } // ShowTask рендерит детали из снимка задачи (спец 12.11). func (p *TaskDetailPanel) ShowTask(t storage.Task) { p.titleLbl.SetText(t.Title) p.statusLbl.SetText(string(t.Status)) p.detailLbl.SetText(ui.TaskDetailText(t)) } // ShowEmpty сбрасывает к placeholder при недоступной задаче. func (p *TaskDetailPanel) ShowEmpty() { p.titleLbl.SetText("—") p.statusLbl.SetText("") p.detailLbl.SetText("") } // compile-time проверка реализации контракта. var _ ui.TaskDetailPanel = (*TaskDetailPanel)(nil)