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 colorButton colorT = colorT{gocui.ColorGreen, none, gocui.ColorWhite, gocui.ColorGreen, gocui.ColorBlack, "normal button"} 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", } // 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.recreateView() } 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) setDefaultWidgetColor() { w.showView() } 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() for _, child := range w.children { child.redoColor(draw) } }