Add: pages, text component
This commit is contained in:
77
api/pages/initpage.go
Normal file
77
api/pages/initpage.go
Normal file
@ -0,0 +1,77 @@
|
||||
package pages
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"gitea.unprism.ru/yotia/display-test/components"
|
||||
"gitea.unprism.ru/yotia/display-test/drawer"
|
||||
)
|
||||
|
||||
type initPage struct {
|
||||
drawer drawer.Drawer // Drawer with dysplay
|
||||
|
||||
title components.Text
|
||||
bar components.ProgressBar
|
||||
}
|
||||
|
||||
// Only functions that control content of page
|
||||
type InitPageContent interface {
|
||||
SetTitle(title string)
|
||||
GetProgressBar() components.ProgressBar
|
||||
}
|
||||
|
||||
type InitPage interface {
|
||||
Page
|
||||
InitPageContent
|
||||
}
|
||||
|
||||
func NewInitPage(d drawer.Drawer) (InitPage, error) {
|
||||
if err := d.GetDisplay().IsReady(); err != nil {
|
||||
return nil, fmt.Errorf("display is ready: %w", err)
|
||||
}
|
||||
|
||||
title, err := components.NewText(d, 0, 0)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("create title: %w", err)
|
||||
}
|
||||
pb, err := components.NewProgressBar(d, 0, drawer.LineH*3, d.W(), drawer.LineH) // Bottom
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("create progress bar: %w", err)
|
||||
}
|
||||
return &initPage{
|
||||
drawer: d,
|
||||
title: title,
|
||||
bar: pb,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (p *initPage) Activate() {
|
||||
// Draw
|
||||
p.drawer.Clear()
|
||||
p.title.Draw()
|
||||
p.bar.Draw()
|
||||
}
|
||||
|
||||
func (p *initPage) Diactivate() {
|
||||
// Do not clear because next page will have to clear whole screen any way
|
||||
}
|
||||
|
||||
func (p *initPage) SetTitle(title string) {
|
||||
p.title.SetPos((p.drawer.W()-len(title)*(drawer.FontCharW+drawer.CharGap))/2, drawer.FontCharH) // Text in center
|
||||
p.title.SetStr(title)
|
||||
}
|
||||
|
||||
func (p *initPage) GetProgressBar() components.ProgressBar {
|
||||
return p.bar
|
||||
}
|
||||
|
||||
func (p *initPage) Close() (outErr error) {
|
||||
// TODO Not the best way...
|
||||
if err := p.title.Close(); err != nil {
|
||||
outErr = fmt.Errorf("title close: %w:", err)
|
||||
}
|
||||
if err := p.bar.Close(); err != nil {
|
||||
outErr = fmt.Errorf("progress bar close: %w:", err)
|
||||
}
|
||||
return
|
||||
}
|
10
api/pages/pages.go
Normal file
10
api/pages/pages.go
Normal file
@ -0,0 +1,10 @@
|
||||
package pages
|
||||
|
||||
import "io"
|
||||
|
||||
type Page interface {
|
||||
Activate()
|
||||
Diactivate()
|
||||
|
||||
io.Closer
|
||||
}
|
Reference in New Issue
Block a user