You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cointop/cointop/statusbar.go

86 lines
2.1 KiB
Go

package cointop
import (
"fmt"
"unicode/utf8"
"github.com/cointop-sh/cointop/pkg/open"
"github.com/cointop-sh/cointop/pkg/pad"
"github.com/cointop-sh/cointop/pkg/ui"
log "github.com/sirupsen/logrus"
)
// StatusbarView is structure for statusbar view
type StatusbarView = ui.View
// NewStatusbarView returns a new statusbar view
func NewStatusbarView() *StatusbarView {
return ui.NewView("statusbar")
}
// UpdateStatusbar updates the statusbar view
func (ct *Cointop) UpdateStatusbar(s string) error {
log.Debug("UpdateStatusbar()")
currpage := ct.CurrentDisplayPage()
totalpages := ct.TotalPagesDisplay()
var quitText string
var favoritesText string
var portfolioText string
if ct.IsPortfolioVisible() || ct.IsFavoritesVisible() {
quitText = "Return"
} else {
quitText = "Quit"
}
if ct.IsPortfolioVisible() {
portfolioText = "[E]Edit"
} else {
portfolioText = "[P]Portfolio"
}
if ct.IsFavoritesVisible() {
favoritesText = "[Space]Unfavorite"
} else {
favoritesText = "[F]Favorites"
}
helpStr := fmt.Sprintf("%s%s %sHelp", "[Q]", quitText, "[?]")
var content string
if ct.IsPriceAlertsVisible() {
var editStr string
if ct.ActivePriceAlertsLen() > 0 {
editStr = "[E]Edit "
}
content = fmt.Sprintf("%s %s[+]Add", helpStr, editStr)
} else {
base := fmt.Sprintf("%s %sChart %sRange %sSearch %sConvert %s %s", helpStr, "[Enter]", "[[ ]]", "[/]", "[C]", favoritesText, portfolioText)
str := pad.Right(fmt.Sprintf("%v %sPage %v/%v %s", base, "[← →]", currpage, totalpages, s), ct.Width(), " ")
v := ct.Version()
size := utf8.RuneCountInString(str)
end := size - utf8.RuneCountInString(v) + 2
if end > size {
end = size
}
content = str[:end] + v
}
ct.UpdateUI(func() error {
return ct.Views.Statusbar.Update(content)
})
return nil
}
// RefreshRowLink updates the row link in the statusbar
func (ct *Cointop) RefreshRowLink() error {
log.Debug("RefreshRowLink()")
var shortcut string
if !open.CommandExists() {
shortcut = "[O]Open "
}
url := ct.RowLinkShort()
ct.UpdateStatusbar(fmt.Sprintf("%s%s", shortcut, url))
return nil
}