diff --git a/plugin.go b/plugin.go index 8899bd2..36c8099 100644 --- a/plugin.go +++ b/plugin.go @@ -4,9 +4,6 @@ package main import ( - // if you include more than just this import - // then your plugin might be doing something un-ideal (just a guess from 2023/02/27) - "github.com/awesome-gocui/gocui" "go.wit.com/log" "go.wit.com/toolkits/tree" diff --git a/structs.go b/structs.go index 45f7c0e..53449b9 100644 --- a/structs.go +++ b/structs.go @@ -21,6 +21,7 @@ import ( "go.wit.com/lib/protobuf/guipb" log "go.wit.com/log" "go.wit.com/toolkits/tree" + "go.wit.com/widget" ) var initOnce sync.Once // run initPlugin() only once @@ -182,39 +183,40 @@ type colorT struct { } type guiWidget struct { - v *gocui.View // this is nil if the widget is not displayed - cuiName string // what gocui uses to reference the widget (usually "TK " - parent *guiWidget // mirrors the binary node tree - children []*guiWidget // mirrors the binary node tree - node *tree.Node // the pointer back to the tree - pb *guipb.Widget // the guipb Widget - windowFrame *guiWidget // this is the frame for a window widget - internal bool // indicates the widget is internal to gocui and should be treated differently - hasTabs bool // does the window have tabs? - currentTab bool // the visible tab - window window // holds information specific only to Window widgets - value string // ? - checked bool // ? - labelN string // the actual text to display in the console - vals []string // dropdown menu items - enable bool // ? - gocuiSize rectType // should mirror the real display size. todo: verify these are accurate. they are not yet - full rectType // full size of children (used by widget.Window, etc) - force rectType // force widget within these boundries (using this to debug window dragging) - startW int // ? - startH int // ? - lastW int // used during mouse dragging - lastH int // used during mouse dragging - isFake bool // widget types like 'box' are 'false' - widths map[int]int // how tall each row in the grid is - heights map[int]int // how wide each column in the grid is - tainted bool // ? - frame bool // ? - selectedTab *tree.Node // for a window, this is currently selected tab - color *colorT // what color to use - colorLast colorT // the last color the widget had - defaultColor *colorT // the default colors // TODO: make a function for this instead - isBG bool // means this is the background widget. There is only one of these + v *gocui.View // this is nil if the widget is not displayed + cuiName string // what gocui uses to reference the widget (usually "TK " + parent *guiWidget // mirrors the binary node tree + children []*guiWidget // mirrors the binary node tree + node *tree.Node // the pointer back to the tree + pb *guipb.Widget // the guipb Widget + wtype widget.WidgetType // used for Tables for now. todo: fix this correctly + windowFrame *guiWidget // this is the frame for a window widget + internal bool // indicates the widget is internal to gocui and should be treated differently + hasTabs bool // does the window have tabs? + currentTab bool // the visible tab + window window // holds information specific only to Window widgets + value string // ? + checked bool // ? + labelN string // the actual text to display in the console + vals []string // dropdown menu items + enable bool // ? + gocuiSize rectType // should mirror the real display size. todo: verify these are accurate. they are not yet + full rectType // full size of children (used by widget.Window, etc) + force rectType // force widget within these boundries (using this to debug window dragging) + startW int // ? + startH int // ? + lastW int // used during mouse dragging + lastH int // used during mouse dragging + isFake bool // widget types like 'box' are 'false' + widths map[int]int // how tall each row in the grid is + heights map[int]int // how wide each column in the grid is + tainted bool // ? + frame bool // ? + selectedTab *tree.Node // for a window, this is currently selected tab + color *colorT // what color to use + colorLast colorT // the last color the widget had + defaultColor *colorT // the default colors // TODO: make a function for this instead + isBG bool // means this is the background widget. There is only one of these } // THIS IS GO COMPILER MAGIC diff --git a/table.go b/table.go index 8e288c5..97bc81d 100644 --- a/table.go +++ b/table.go @@ -4,6 +4,7 @@ package main import ( + "fmt" "slices" "go.wit.com/lib/protobuf/guipb" @@ -12,12 +13,48 @@ import ( "go.wit.com/widget" ) +func initWindowPB(pb *guipb.Widget) *guiWidget { + var w *guiWidget + w = new(guiWidget) + + w.pb = pb + w.parent = me.treeRoot.TK.(*guiWidget) + w.wtype = widget.Window + w.cuiName = fmt.Sprintf("%d %s", pb.Id, "TK") + w.labelN = pb.Name + return w +} + +func initGridPB(pb *guipb.Widget) *guiWidget { + var w *guiWidget + w = new(guiWidget) + + w.pb = pb + w.wtype = widget.Grid + w.cuiName = fmt.Sprintf("%d %s", pb.Id, "TK") + w.labelN = pb.Name + return w +} + func showTable(t *guipb.Table) { log.Info("gocui: should show table here") if t == nil { return } log.Info("gocui: table.Title", t.Title) + if t.Window == nil { + log.Info("gocui: missing window widget. tree plugin error") + return + } + log.Info("gocui: need to add window here id =", t.Window.Id, t.Window.Name) + if t.Grid == nil { + log.Info("gocui: missing grid widget. tree plugin error") + return + } + log.Info("gocui: need to add grid here id =", t.Grid.Id) + win := initWindowPB(t.Window) + grid := initWindowPB(t.Window) + grid.parent = win } func enableWidget(n *tree.Node) {