From 10001c70061dc9eda1b2aceb5a8cade74a8cb3a0 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Thu, 4 Jan 2024 14:41:37 -0600 Subject: [PATCH] subsystem flags are displayed Signed-off-by: Jeff Carr --- logFlag.go | 22 +++++++-------- logsettings/draw.go | 62 +++++++++++++++++++++++++++++++++++++---- logsettings/settings.go | 1 + logsettings/structs.go | 2 ++ 4 files changed, 70 insertions(+), 17 deletions(-) diff --git a/logFlag.go b/logFlag.go index 1471a7e..dc95e59 100644 --- a/logFlag.go +++ b/logFlag.go @@ -18,36 +18,36 @@ type LogFlag struct { p *gui.Node // parent widget c *gui.Node // checkbox widget - name string - subsystem string - desc string + Name string + Subsystem string + Desc string b bool Custom func() } func (f *LogFlag) Get() bool { - return log.Get(f.subsystem, f.name) + return log.Get(f.Subsystem, f.Name) } func (f *LogFlag) Set(b bool) { log.Println("LogFlag.Set() =", b) - log.Set(f.subsystem, f.name, b) + log.Set(f.Subsystem, f.Name, b) } func NewLogFlag(n *gui.Node, lf *log.LogFlag) *LogFlag { f := LogFlag { - name: lf.Name, - subsystem: lf.Subsystem, - desc: lf.Desc, + Name: lf.Name, + Subsystem: lf.Subsystem, + Desc: lf.Desc, p: n, } // various timeout settings - f.c = n.NewCheckbox(f.name + " (" + f.desc + ")") + f.c = n.NewCheckbox(f.Name + ": " + f.Desc) f.c.Custom = func() { - log.Set(f.subsystem, f.name, f.c.B) - log.Println("LogFlag.Custom() user changed value to =", log.Get(f.subsystem, f.name)) + log.Set(f.Subsystem, f.Name, f.c.B) + log.Println("LogFlag.Custom() user changed value to =", log.Get(f.Subsystem, f.Name)) } return &f diff --git a/logsettings/draw.go b/logsettings/draw.go index f125f1b..d6aeeb3 100644 --- a/logsettings/draw.go +++ b/logsettings/draw.go @@ -47,15 +47,19 @@ func (d *LogSettings) draw() { newB = newW.NewBox("hBox", true) g = newB.NewGroup("Show").Pad() - g.NewButton("log.SetTmp()", func () { + g.NewButton("Redirect STDOUT to /tmp/", func () { log.SetTmp() }) - g.NewButton("log.SetAll(true)", func () { + g.NewButton("restore defaults", func () { + log.SetDefaults() + }) + + g.NewButton("all on", func () { log.SetAll(true) }) - g.NewButton("log.SetAll(false)", func () { + g.NewButton("all off", func () { log.SetAll(false) }) @@ -64,11 +68,57 @@ func (d *LogSettings) draw() { log.ShowFlags() }) - g = newB.NewGroup("List") - g = g.NewGrid("flags grid", 5, 2) + flagG := newB.NewGroup("Subsystem (aka package)") + + g.NewButton("Add all Flags", func () { + flags := log.ShowFlags() + for _, f := range flags { + log.Log(true, "Get() ", "(" + f.Subsystem + ")", f.Name, "=", f.B, ":", f.Desc) + addFlag(flagG, f) + } + }) + flags := log.ShowFlags() for _, f := range flags { log.Log(true, "Get() ", "(" + f.Subsystem + ")", f.Name, "=", f.B, ":", f.Desc) - gadgets.NewLogFlag(g, f) + addFlag(flagG, f) } } + +func addFlag(p *gui.Node, newf *log.LogFlag) { + var flagWidgets *flagGroup + if newf == nil { return } + if p == nil { return } + + if myLogGui.groups[newf.Subsystem] == nil { + flagWidgets = new(flagGroup) + flagWidgets.parent = p + flagWidgets.name = newf.Subsystem + flagWidgets.group = p.NewGroup(newf.Subsystem) + flagWidgets.grid = flagWidgets.group.NewGrid("flags grid", 3, 1) + myLogGui.groups[newf.Subsystem] = flagWidgets + } else { + flagWidgets = myLogGui.groups[newf.Subsystem] + } + + for _, f := range flagWidgets.flags { + log.Warn("addFlag() Already has flag =", f) + if f.Name == newf.Name { + log.Warn("addFlag() FOUND FLAG", f) + return + } + } + newWidget := gadgets.NewLogFlag(flagWidgets.grid, newf) + flagWidgets.flags = append(flagWidgets.flags, newWidget) +} + +type flagGroup struct { + name string // should be set to the flag.Subsystem + + parent *gui.Node // where to draw our group + group *gui.Node + grid *gui.Node + + // the widget for each flag + flags []*gadgets.LogFlag +} diff --git a/logsettings/settings.go b/logsettings/settings.go index 6d5f1dd..6e5b866 100644 --- a/logsettings/settings.go +++ b/logsettings/settings.go @@ -13,6 +13,7 @@ func New(p *gui.Node) *LogSettings { myLogGui.parent = p myLogGui.ready = true myLogGui.hidden = true + myLogGui.groups = make(map[string]*flagGroup) return myLogGui } diff --git a/logsettings/structs.go b/logsettings/structs.go index 3df504b..2a14cb5 100644 --- a/logsettings/structs.go +++ b/logsettings/structs.go @@ -12,6 +12,8 @@ type LogSettings struct { hidden bool err error + groups map[string]*flagGroup + parent *gui.Node // where to draw our window window *gui.Node // our window for displaying the log package settings