127 lines
2.9 KiB
Go
127 lines
2.9 KiB
Go
package osui
|
|
|
|
import (
|
|
"github.com/orus-dev/osui/colors"
|
|
)
|
|
|
|
type Style struct {
|
|
Background string `json:"background"`
|
|
Foreground string `json:"foreground"`
|
|
Outline string `json:"outline"`
|
|
|
|
ActiveBackground string `json:"activeBackground"`
|
|
ActiveForeground string `json:"activeForeground"`
|
|
ActiveOutline string `json:"activeOutline"`
|
|
|
|
ClickedBackground string `json:"clickedBackground"`
|
|
ClickedForeground string `json:"clickedForeground"`
|
|
ClickedOutline string `json:"clickedOutline"`
|
|
|
|
SelectedBackground string `json:"selectedBackground"`
|
|
SelectedForeground string `json:"selectedForeground"`
|
|
SelectedOutline string `json:"selectedOutline"`
|
|
|
|
Cursor string `json:"cursor"`
|
|
CursorColor string `json:"cursorColor"`
|
|
InactiveCursor string `json:"inactiveCursor"`
|
|
}
|
|
|
|
func (s *Style) SetDefaults() {
|
|
defaultValue(&s.Cursor, "> ")
|
|
defaultValue(&s.SelectedForeground, colors.Black)
|
|
defaultValue(&s.SelectedBackground, colors.Magenta)
|
|
defaultValue(&s.ActiveOutline, colors.Blue)
|
|
defaultValue(&s.ClickedForeground, colors.Blue)
|
|
defaultValue(&s.ClickedOutline, colors.Blue)
|
|
s.UseStyle()
|
|
}
|
|
|
|
func (s *Style) UseStyle() {
|
|
s.Foreground = colors.AsFg(s.Foreground)
|
|
s.Background = colors.AsBg(s.Background)
|
|
s.Outline = colors.AsFg(s.Outline)
|
|
|
|
s.ActiveForeground = colors.AsFg(s.ActiveForeground)
|
|
s.ActiveBackground = colors.AsBg(s.ActiveBackground)
|
|
s.ActiveOutline = colors.AsFg(s.ActiveOutline)
|
|
|
|
s.ClickedForeground = colors.AsFg(s.ClickedForeground)
|
|
s.ClickedBackground = colors.AsBg(s.ClickedBackground)
|
|
s.ClickedOutline = colors.AsFg(s.ClickedOutline)
|
|
|
|
s.SelectedForeground = colors.AsFg(s.SelectedForeground)
|
|
s.SelectedBackground = colors.AsBg(s.SelectedBackground)
|
|
s.SelectedOutline = colors.AsFg(s.SelectedOutline)
|
|
}
|
|
|
|
func defaultValue(sd *string, s string) {
|
|
if *sd == "" {
|
|
*sd = s
|
|
}
|
|
}
|
|
|
|
type Param struct {
|
|
Style Style `json:"style"`
|
|
X int `json:"y"`
|
|
Y int `json:"x"`
|
|
Width int `json:"width"`
|
|
Height int `json:"height"`
|
|
OnClick func()
|
|
Keys map[string]string
|
|
Toggle bool `json:"useToggle"`
|
|
}
|
|
|
|
func (p *Param) SetDefaultBindings(keys map[string]string) {
|
|
p.Style.SetDefaults()
|
|
if p.Keys == nil {
|
|
p.Keys = keys
|
|
return
|
|
}
|
|
for k, f := range keys {
|
|
if _, ok := p.Keys[k]; !ok {
|
|
p.Keys[k] = f
|
|
}
|
|
}
|
|
}
|
|
|
|
func (p *Param) UseParam(c Component) Component {
|
|
data := c.GetComponentData()
|
|
|
|
p.Style.SetDefaults()
|
|
data.Style = p.Style
|
|
data.X = p.X
|
|
data.Y = p.Y
|
|
if p.Height != 0 {
|
|
data.Height = p.Height
|
|
}
|
|
if p.Width != 0 {
|
|
data.Width = p.Width
|
|
}
|
|
|
|
if p.OnClick != nil {
|
|
data.OnClick = p.OnClick
|
|
} else {
|
|
data.OnClick = func() {}
|
|
}
|
|
|
|
data.Toggle = p.Toggle
|
|
|
|
data.Keys = p.Keys
|
|
|
|
return c
|
|
}
|
|
|
|
type ComponentData struct {
|
|
X int
|
|
Y int
|
|
Width int
|
|
Height int
|
|
DefaultColor string
|
|
IsActive bool
|
|
Style Style
|
|
OnClick func()
|
|
Keys map[string]string
|
|
Toggle bool
|
|
Screen *Screen
|
|
}
|