tvxwidgets/gauge_am.go
Navid Yaghoobi 36e3d86da4 golangci-lint update 1.56.2
Signed-off-by: Navid Yaghoobi <navidys@fedoraproject.org>
2024-03-05 21:56:13 +11:00

102 lines
2.3 KiB
Go

package tvxwidgets
import (
"fmt"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
)
// ActivityModeGauge represents activity mode gauge permitive.
type ActivityModeGauge struct {
*tview.Box
// counter value
counter int
// pgBgColor: progress block background color
pgBgColor tcell.Color
}
// NewActivityModeGauge returns new activity mode gauge permitive.
func NewActivityModeGauge() *ActivityModeGauge {
gauge := &ActivityModeGauge{
Box: tview.NewBox(),
counter: 0,
pgBgColor: tcell.ColorBlue,
}
return gauge
}
// Draw draws this primitive onto the screen.
func (g *ActivityModeGauge) Draw(screen tcell.Screen) {
g.Box.DrawForSubclass(screen, g)
x, y, width, height := g.Box.GetInnerRect()
tickStr := g.tickStr(width)
for i := 0; i < height; i++ {
tview.Print(screen, tickStr, x, y+i, width, tview.AlignLeft, g.pgBgColor)
}
}
// Focus is called when this primitive receives focus.
func (g *ActivityModeGauge) Focus(delegate func(p tview.Primitive)) { //nolint:revive
}
// HasFocus returns whether or not this primitive has focus.
func (g *ActivityModeGauge) HasFocus() bool {
return g.Box.HasFocus()
}
// GetRect return primitive current rect.
func (g *ActivityModeGauge) GetRect() (int, int, int, int) {
return g.Box.GetRect()
}
// SetRect sets rect for this primitive.
func (g *ActivityModeGauge) SetRect(x, y, width, height int) {
g.Box.SetRect(x, y, width, height)
}
// SetPgBgColor sets progress block background color.
func (g *ActivityModeGauge) SetPgBgColor(color tcell.Color) {
g.pgBgColor = color
}
// Pulse pulse update the gauge progress bar.
func (g *ActivityModeGauge) Pulse() {
g.counter++
}
// Reset resets the gauge counter (set to 0).
func (g *ActivityModeGauge) Reset() {
g.counter = 0
}
func (g *ActivityModeGauge) tickStr(max int) string {
var (
prgHeadStr string
prgEndStr string
prgStr string
)
if g.counter >= max-4 {
g.counter = 0
}
hWidth := 0
for i := 0; i < g.counter; i++ {
prgHeadStr += fmt.Sprintf("[%s::]%s", getColorName(tview.Styles.PrimitiveBackgroundColor), prgCell)
hWidth++
}
prgStr = prgCell + prgCell + prgCell + prgCell
for i := 0; i < max+hWidth+4; i++ {
prgEndStr += fmt.Sprintf("[%s::]%s", getColorName(tview.Styles.PrimitiveBackgroundColor), prgCell)
}
return fmt.Sprintf("%s[%s::]%s%s", prgHeadStr, getColorName(g.pgBgColor), prgStr, prgEndStr)
}