From 04406b3561f5b4109c0f5111ae25ce6ddf284999 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sun, 2 Mar 2025 17:05:17 -0600 Subject: [PATCH] support a libnotify menu --- help.go | 114 --------------------------------------------- libnotify.go | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+), 114 deletions(-) create mode 100644 libnotify.go diff --git a/help.go b/help.go index fa011c6..de9b247 100644 --- a/help.go +++ b/help.go @@ -11,12 +11,9 @@ import ( "errors" "fmt" "strings" - "time" "github.com/awesome-gocui/gocui" log "go.wit.com/log" - "go.wit.com/toolkits/tree" - "go.wit.com/widget" ) /* @@ -112,114 +109,3 @@ func showHelp() error { } return nil } - -// create a new widget in the binary tree -func makeNewInternalWidget(wId int) *guiWidget { - if me.treeRoot == nil { - log.Info("GOGUI Init ERROR. treeRoot == nil") - return nil - } - n := new(tree.Node) - n.WidgetType = widget.Flag - n.WidgetId = wId - n.ParentId = 0 - - // store the internal toolkit information - tk := new(guiWidget) - tk.frame = true - - tk.node = n - tk.node.Parent = me.treeRoot - - // set the name used by gocui to the id - tk.cuiName = fmt.Sprintf("%d DR", wId) - - tk.setColorInput() - - // add this new widget on the binary tree - tk.parent = me.treeRoot.TK.(*guiWidget) - if tk.parent == nil { - panic("makeNewFlagWidget() didn't get treeRoot guiWidget") - } else { - tk.parent.children = append(tk.parent.children, tk) - } - - n.TK = tk - return tk -} - -func makeClock(wId int) { - if me.treeRoot == nil { - log.Info("gogui makeClock() error. treeRoot == nil") - return - } - me.notify.clock.tk = makeNewInternalWidget(wId) - me.notify.clock.tk.dumpWidget("init() clock") - w, h := me.baseGui.MousePosition() - me.notify.clock.tk.MoveToOffset(w, h) - me.notify.clock.tk.labelN = time.Now().Format("15:04:05") - me.notify.clock.tk.frame = false - me.notify.clock.tk.setColorLabel() - me.notify.clock.tk.Show() - me.notify.clock.active = true - me.notify.clock.tk.dumpWidget("showClock()") -} - -// in the very end of redrawing things, this will place the help and stdout on the top or botton -// depending on the state the user has chosen -func setThingsOnTop() { - if me.showHelp { // terrible variable name. FIXME - // log.Info("help does not exist") - } else { - me.baseGui.SetViewOnTop("help") - } - if me.notify.clock.tk != nil { - me.baseGui.SetViewOnTop(me.notify.clock.tk.v.Name()) - } - - if me.stdout.tk == nil { - makeOutputWidget(me.baseGui, "from setThingsOnTop()") - } - if me.stdout.tk == nil { - return - } - if me.stdout.tk.v == nil { - return - } - if me.dark { - me.stdout.tk.v.FgColor = gocui.ColorWhite - me.stdout.tk.v.BgColor = gocui.ColorBlack - } else { - me.stdout.tk.v.FgColor = gocui.ColorBlack - me.stdout.tk.v.BgColor = gocui.AttrNone - } - - if me.stdout.outputOnTop { - me.baseGui.SetViewOnTop("msg") - } else { - me.baseGui.SetViewOnBottom("msg") - } - if me.stdout.startOnscreen { - // log.Info("THIS TRIGGERS STDOUT") // todo: make a proper init() & move this there - me.stdout.tk.relocateStdout(me.stdout.lastW, me.stdout.lastH) - me.stdout.startOnscreen = false - } - setBottomBG() -} - -func setBottomBG() { - // this attempts to find the "BG" widget and set it to the background on the very very bottom - rootTK := me.treeRoot.TK.(*guiWidget) - if tk := rootTK.findBG(); tk != nil { - // log.Info("found BG. setting to bottom", tk.cuiName) - if me.dark { - tk.v.BgColor = gocui.ColorBlack - } else { - tk.v.BgColor = gocui.ColorWhite - } - tk.v.Clear() - me.baseGui.SetViewOnBottom(tk.cuiName) - w, h := me.baseGui.Size() - me.baseGui.SetView(tk.cuiName, -1, -1, w+1, h+1, 0) - } -} diff --git a/libnotify.go b/libnotify.go new file mode 100644 index 0000000..7cd68df --- /dev/null +++ b/libnotify.go @@ -0,0 +1,129 @@ +// Copyright 2014 The gocui Authors. All rights reserved. +// Copyright 2017-2025 WIT.COM Inc. All rights reserved. +// Use of this source code is governed by the GPL 3.0 + +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "fmt" + "time" + + "github.com/awesome-gocui/gocui" + log "go.wit.com/log" + "go.wit.com/toolkits/tree" + "go.wit.com/widget" +) + +// create a new widget in the binary tree +func makeNewInternalWidget(wId int) *guiWidget { + if me.treeRoot == nil { + log.Info("GOGUI Init ERROR. treeRoot == nil") + return nil + } + n := new(tree.Node) + n.WidgetType = widget.Flag + n.WidgetId = wId + n.ParentId = 0 + + // store the internal toolkit information + tk := new(guiWidget) + tk.frame = true + + tk.node = n + tk.node.Parent = me.treeRoot + + // set the name used by gocui to the id + tk.cuiName = fmt.Sprintf("%d DR", wId) + + tk.setColorInput() + + // add this new widget on the binary tree + tk.parent = me.treeRoot.TK.(*guiWidget) + if tk.parent == nil { + panic("makeNewFlagWidget() didn't get treeRoot guiWidget") + } else { + tk.parent.children = append(tk.parent.children, tk) + } + + n.TK = tk + return tk +} + +func makeClock(wId int) { + if me.treeRoot == nil { + log.Info("gogui makeClock() error. treeRoot == nil") + return + } + me.notify.clock.tk = makeNewInternalWidget(wId) + me.notify.clock.tk.dumpWidget("init() clock") + w, h := me.baseGui.MousePosition() + me.notify.clock.tk.MoveToOffset(w, h) + me.notify.clock.tk.labelN = time.Now().Format("15:04:05") + me.notify.clock.tk.frame = false + me.notify.clock.tk.setColorLabel() + me.notify.clock.tk.Show() + me.notify.clock.active = true + me.notify.clock.tk.dumpWidget("showClock()") +} + +// in the very end of redrawing things, this will place the help and stdout on the top or botton +// depending on the state the user has chosen +func setThingsOnTop() { + if me.showHelp { // terrible variable name. FIXME + // log.Info("help does not exist") + } else { + me.baseGui.SetViewOnTop("help") + } + if me.notify.clock.tk != nil { + me.baseGui.SetViewOnTop(me.notify.clock.tk.v.Name()) + } + + if me.stdout.tk == nil { + makeOutputWidget(me.baseGui, "from setThingsOnTop()") + } + if me.stdout.tk == nil { + return + } + if me.stdout.tk.v == nil { + return + } + if me.dark { + me.stdout.tk.v.FgColor = gocui.ColorWhite + me.stdout.tk.v.BgColor = gocui.ColorBlack + } else { + me.stdout.tk.v.FgColor = gocui.ColorBlack + me.stdout.tk.v.BgColor = gocui.AttrNone + } + + if me.stdout.outputOnTop { + me.baseGui.SetViewOnTop("msg") + } else { + me.baseGui.SetViewOnBottom("msg") + } + if me.stdout.startOnscreen { + // log.Info("THIS TRIGGERS STDOUT") // todo: make a proper init() & move this there + me.stdout.tk.relocateStdout(me.stdout.lastW, me.stdout.lastH) + me.stdout.startOnscreen = false + } + setBottomBG() +} + +func setBottomBG() { + // this attempts to find the "BG" widget and set it to the background on the very very bottom + rootTK := me.treeRoot.TK.(*guiWidget) + if tk := rootTK.findBG(); tk != nil { + // log.Info("found BG. setting to bottom", tk.cuiName) + if me.dark { + tk.v.BgColor = gocui.ColorBlack + } else { + tk.v.BgColor = gocui.ColorWhite + } + tk.v.Clear() + me.baseGui.SetViewOnBottom(tk.cuiName) + w, h := me.baseGui.Size() + me.baseGui.SetView(tk.cuiName, -1, -1, w+1, h+1, 0) + } +}