// Although most code from WIT.COM Inc is under the GPL // This code is more generic because it must be able // to be used in any GUI plugin package tree import ( "go.wit.com/lib/protobuf/guipb" "go.wit.com/log" "go.wit.com/widget" ) // repeated string order = 1; // // repeated StringRow StringRows = 2; // repeated IntRow IntRows = 3; // repeated TimeRow TimeRows = 4; // repeated BoolRow BoolRows = 5; func (me *TreeInfo) doTable(a widget.Action) { if a.TablePB == nil { log.Log(TREE, "tree: action didn't have a Table PB") return } pb := guipb.NewTables() if err := pb.Unmarshal(a.TablePB); err != nil { log.Info("unmarshal error", err, "data len =", len(a.TablePB)) return } log.Info("dumpTables:") all := pb.All() for all.Scan() { t := all.Next() for i, o := range t.Order { log.Info("got order:", t.Title, i, o) } dumpTable(t) me.ShowTable(t) me.makeTable(t) } } func makeTableWindow(pb *guipb.Widget) *Node { a := new(widget.Action) a.WidgetType = widget.Window a.WidgetId = int(pb.Id) a.ParentId = 0 a.State.Enable = true return AddNode(a) } func (win *Node) makeWindowGrid(pb *guipb.Widget) *Node { a := new(widget.Action) a.WidgetType = widget.Grid a.WidgetId = int(pb.Id) a.ParentId = win.WidgetId a.State.Enable = true return AddNode(a) } func (me *TreeInfo) makeTable(t *guipb.Table) { win := makeTableWindow(t.Window) grid := win.makeWindowGrid(t.Grid) me.Add(win) me.Add(grid) log.Info("tree: makeTable() finished add win & grid") for i, r := range t.StringRows { log.Info("got string row:", t.Title, i, r.Header, r.Vals) for _, v := range r.Widgets { log.Info("tree: add to grid here", v.Id, v.Name) } } } func dumpTable(t *guipb.Table) { for i, o := range t.Order { log.Info("got order:", t.Title, i, o) } for i, r := range t.StringRows { log.Info("got string row:", t.Title, i, r.Header, r.Vals) for _, v := range r.Widgets { log.Info("tree: got string widget:", v.Id, v.Name) } } for i, r := range t.IntRows { log.Info("got int row:", t.Title, i, r.Header, r.Vals) for _, v := range r.Widgets { log.Info("tree: got int widget:", v.Id, v.Size) } } } type TreeTable struct { PB *guipb.Table /* hostnames []string columns []*gui.NodeColumn order []*gui.NodeColumn */ }