mirror of
https://github.com/bcicen/ctop.git
synced 2025-12-06 23:26:45 +08:00
integrate widget order, toggling into global config and compact grid
This commit is contained in:
122
config/widget.go
Normal file
122
config/widget.go
Normal file
@@ -0,0 +1,122 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// defaults
|
||||
var defaultWidgets = []*Widget{
|
||||
&Widget{
|
||||
Name: "status",
|
||||
Enabled: true,
|
||||
},
|
||||
&Widget{
|
||||
Name: "name",
|
||||
Enabled: true,
|
||||
},
|
||||
&Widget{
|
||||
Name: "id",
|
||||
Enabled: true,
|
||||
},
|
||||
&Widget{
|
||||
Name: "cpu",
|
||||
Enabled: true,
|
||||
},
|
||||
&Widget{
|
||||
Name: "mem",
|
||||
Enabled: true,
|
||||
},
|
||||
&Widget{
|
||||
Name: "net",
|
||||
Enabled: true,
|
||||
},
|
||||
&Widget{
|
||||
Name: "io",
|
||||
Enabled: true,
|
||||
},
|
||||
&Widget{
|
||||
Name: "pids",
|
||||
Enabled: true,
|
||||
},
|
||||
}
|
||||
|
||||
type Widget struct {
|
||||
Name string
|
||||
Enabled bool
|
||||
}
|
||||
|
||||
// GetWidget returns a Widget by name
|
||||
func GetWidget(name string) *Widget {
|
||||
lock.RLock()
|
||||
defer lock.RUnlock()
|
||||
|
||||
for _, w := range GlobalWidgets {
|
||||
if w.Name == name {
|
||||
return w
|
||||
}
|
||||
}
|
||||
log.Errorf("widget name not found: %s", name)
|
||||
return &Widget{} // default
|
||||
}
|
||||
|
||||
// Widgets returns a copy of all configurable Widgets, in order
|
||||
func Widgets() []Widget {
|
||||
a := make([]Widget, len(GlobalWidgets))
|
||||
|
||||
lock.RLock()
|
||||
defer lock.RUnlock()
|
||||
|
||||
for n, w := range GlobalWidgets {
|
||||
a[n] = *w
|
||||
}
|
||||
return a
|
||||
}
|
||||
|
||||
// EnabledWidgets returns an ordered array of enabled widget names
|
||||
func EnabledWidgets() (a []string) {
|
||||
for _, w := range Widgets() {
|
||||
if w.Enabled {
|
||||
a = append(a, w.Name)
|
||||
}
|
||||
}
|
||||
return a
|
||||
}
|
||||
|
||||
func UpdateWidget(name string, enabled bool) {
|
||||
w := GetWidget(name)
|
||||
oldVal := w.Enabled
|
||||
log.Noticef("config change [%s-enabled]: %t -> %t", name, oldVal, enabled)
|
||||
|
||||
lock.Lock()
|
||||
defer lock.Unlock()
|
||||
w.Enabled = enabled
|
||||
}
|
||||
|
||||
func ToggleWidgetEnabled(name string) {
|
||||
w := GetWidget(name)
|
||||
newVal := !w.Enabled
|
||||
log.Noticef("config change [%s-enabled]: %t -> %t", name, w.Enabled, newVal)
|
||||
|
||||
lock.Lock()
|
||||
defer lock.Unlock()
|
||||
w.Enabled = newVal
|
||||
}
|
||||
|
||||
// UpdateWidgets replaces existing ordered widgets with those provided
|
||||
func UpdateWidgets(newWidgets []Widget) {
|
||||
oldOrder := widgetNames()
|
||||
lock.Lock()
|
||||
for n, w := range newWidgets {
|
||||
GlobalWidgets[n] = &w
|
||||
}
|
||||
lock.Unlock()
|
||||
log.Noticef("config change [widget-order]: %s -> %s", oldOrder, widgetNames())
|
||||
}
|
||||
|
||||
func widgetNames() string {
|
||||
a := make([]string, len(GlobalWidgets))
|
||||
for n, w := range Widgets() {
|
||||
a[n] = w.Name
|
||||
}
|
||||
return strings.Join(a, ", ")
|
||||
}
|
||||
Reference in New Issue
Block a user