package main import ( "math/rand" "github.com/awesome-gocui/gocui" "go.wit.com/log" ) //w.v.SelBgColor = gocui.ColorCyan //color.go: w.v.SelFgColor = gocui.ColorBlack //color.go: w.v.BgColor = gocui.ColorGreen type colorT struct { frame gocui.Attribute fg gocui.Attribute bg gocui.Attribute selFg gocui.Attribute selBg gocui.Attribute name string } var none gocui.Attribute = gocui.AttrNone var lightPurple gocui.Attribute = gocui.GetColor("#DDDDDD") // light purple var darkPurple gocui.Attribute = gocui.GetColor("#FFAA55") // Dark Purple var heavyPurple gocui.Attribute = gocui.GetColor("#88AA55") // heavy purple var powdererBlue gocui.Attribute = gocui.GetColor("#B0E0E6") // w3c 'powerder blue' var superLightGrey gocui.Attribute = gocui.GetColor("#55AAFF") // super light grey // Standard defined colors from gocui: // ColorBlack ColorRed ColorGreen ColorYellow ColorBlue ColorMagenta ColorCyan ColorWhite // v.BgColor = gocui.GetColor("#111111") // crazy red // v.BgColor = gocui.GetColor("#FF9911") // heavy red // v.SelBgColor = gocui.GetColor("#FFEE11") // blood red // v.BgColor = gocui.GetColor("#55AAFF") // super light grey // v.BgColor = gocui.GetColor("#FFC0CB") // 'w3c pink' yellow // Normal Text On mouseover // // Widget Frame Text background Text background var colorWindow colorT = colorT{ frame: none, fg: gocui.ColorBlue, bg: none, selFg: none, selBg: powdererBlue, name: "normal window", } var colorActiveW colorT = colorT{none, none, powdererBlue, none, powdererBlue, "active window"} var colorTab colorT = colorT{gocui.ColorBlue, gocui.ColorBlue, none, none, powdererBlue, "normal tab"} var colorActiveT colorT = colorT{gocui.ColorBlue, none, powdererBlue, none, powdererBlue, "active tab"} var colorLabel colorT = colorT{none, none, superLightGrey, none, superLightGrey, "normal label"} var colorGroup colorT = colorT{none, none, superLightGrey, none, superLightGrey, "normal group"} var colorDisabled colorT = colorT{ frame: superLightGrey, fg: superLightGrey, bg: superLightGrey, selFg: gocui.ColorBlack, selBg: gocui.ColorBlack, name: "disabled widget", } var colorButton colorT = colorT{ frame: gocui.ColorGreen, fg: none, bg: gocui.ColorWhite, selFg: gocui.ColorGreen, selBg: gocui.ColorBlack, name: "normal button", } var colorDropdown colorT = colorT{ frame: gocui.ColorYellow, fg: none, bg: gocui.ColorWhite, selFg: gocui.ColorYellow, selBg: gocui.ColorBlack, name: "normal button", } var colorCombobox colorT = colorT{ frame: gocui.ColorBlue, fg: none, bg: gocui.ColorWhite, selFg: gocui.ColorBlue, selBg: gocui.ColorBlack, name: "normal button", } var colorCheckbox colorT = colorT{ frame: gocui.ColorRed, fg: none, bg: gocui.ColorWhite, selFg: gocui.ColorRed, selBg: gocui.ColorBlack, name: "normal checkbox", } // widget debugging colors. these widgets aren't displayed unless you are debugging var colorRoot colorT = colorT{gocui.ColorRed, none, powdererBlue, none, gocui.ColorBlue, "debug root"} var colorFlag colorT = colorT{gocui.ColorRed, none, powdererBlue, none, gocui.ColorGreen, "debug flag"} var colorBox colorT = colorT{gocui.ColorRed, none, lightPurple, none, gocui.ColorCyan, "debug box"} var colorGrid colorT = colorT{gocui.ColorRed, none, lightPurple, none, gocui.ColorRed, "debug grid"} var colorNone colorT = colorT{none, none, none, none, none, "debug none"} // actually sets the colors for the gocui element // the user will see the colors change when this runs // TODO: add black/white only flag for ttyS0 // TODO: or fix kvm/qemu serial console & SIGWINCH. // TODO: and minicom and uboot and 5 million other things. // TODO: maybe enough of us could actually do that if we made it a goal. // TODO: start with riscv boards and fix it universally there // TODO: so just a small little 'todo' item here func (tk *guiWidget) setColor(newColor *colorT) { if tk.color == newColor { // nothing to do since the colors have nto changed return } tk.color = newColor if tk.v == nil { return } if tk.color == nil { log.Log(NOW, "Set the node to color = nil") tk.color = &colorNone } log.Log(NOW, "Set the node to color =", tk.color.name) tk.Show() } func (w *guiWidget) disableColor() { if w.color != &colorDisabled { w.defaultColor = w.color } w.setColor(&colorDisabled) } func (w *guiWidget) enableColor() { w.setColor(w.defaultColor) } func (w *guiWidget) setDefaultHighlight() { if w.v == nil { log.Log(ERROR, "SetColor() failed on view == nil") return } w.v.SelBgColor = gocui.ColorGreen w.v.SelFgColor = gocui.ColorBlack } func randColor() gocui.Attribute { colors := []string{"Green", "#FFAA55", "Yellow", "Blue", "Red", "Black", "White"} i := rand.Intn(len(colors)) log.Log(NOW, "randColor() i =", i) return gocui.GetColor(colors[i]) } func (w *guiWidget) redoColor(draw bool) { if w == nil { return } log.Sleep(.05) w.setDefaultHighlight() // w.setDefaultWidgetColor() w.Show() for _, child := range w.children { child.redoColor(draw) } } // what genius figured this out? // originally from github.com/dimasma0305/GoFetch func get_teminal_color_palette() string { // var runes rune // color1 := "\x1b[0;29m  \x1b[0m" // runes = []rune(color1) // view.WriteRunes(runes) color1 := "\x1b[0;29m  \x1b[0m" color2 := "\x1b[0;31m  \x1b[0m" color3 := "\x1b[0;32m  \x1b[0m" color4 := "\x1b[0;33m  \x1b[0m" color5 := "\x1b[0;34m  \x1b[0m" color6 := "\x1b[0;35m  \x1b[0m" color7 := "\x1b[0;36m  \x1b[0m" color8 := "\x1b[0;37m  \x1b[0m" return color1 + " " + color2 + " " + color3 + " " + color4 + " " + color5 + " " + color6 + " " + color7 + " " + color8 }