gotop/vendor/github.com/cjbassi/termui/gauge.go

52 lines
967 B
Go

package termui
import (
"strconv"
)
// Gauge is a progress bar like widget.
type Gauge struct {
*Block
Percent int
GaugeColor Color
Description string
}
// NewGauge return a new gauge with current theme.
func NewGauge() *Gauge {
return &Gauge{
Block: NewBlock(),
GaugeColor: Theme.GaugeColor,
}
}
// Buffer implements Bufferer interface.
func (self *Gauge) Buffer() *Buffer {
buf := self.Block.Buffer()
// plot bar
width := self.Percent * self.X / 100
for y := 1; y <= self.Y; y++ {
for x := 1; x <= width; x++ {
buf.SetCell(x, y, Cell{' ', self.GaugeColor, self.GaugeColor})
}
}
// plot percentage
s := strconv.Itoa(self.Percent) + "%" + self.Description
s = MaxString(s, self.X)
y := (self.Y + 1) / 2
x := ((self.X - len(s)) + 1) / 2
for i, char := range s {
bg := self.Bg
fg := self.Fg
if x+i < width {
fg = self.GaugeColor
bg = AttrReverse
}
buf.SetCell(1+x+i, y, Cell{char, fg, bg})
}
return buf
}