diff options
Diffstat (limited to 'table.go')
| -rw-r--r-- | table.go | 165 |
1 files changed, 164 insertions, 1 deletions
@@ -40,11 +40,72 @@ func (parent *Node) ShowTableCallback(pb *guipb.Table, f func(id int)) { } */ +func (n *Node) findInTablePB(pb *guipb.Table) *guipb.Widget { + if n.tablepb == nil { + log.Info("SOMETHING WAS WRONG. gui.findInTablePB() n.tablepb == nil for widget id", n.id) + return nil + } + for _, r := range pb.StringRows { + if r.Header.Id == int64(n.id) { + log.Info("gui.findInTablePB() found widget", r.Header) + return r.Header + } + for _, w := range r.Widgets { + if w.Id == int64(n.id) { + log.Info("gui.findInTablePB() found widget", w) + return w + } + } + } + + for _, r := range pb.ButtonRows { + if r.Header.Id == int64(n.id) { + log.Info("gui.findInTablePB() found widget", r.Header) + return r.Header + } + for _, w := range r.Widgets { + if w.Id == int64(n.id) { + log.Info("gui.findInTablePB() found widget", w) + return w + } + } + } + + for _, r := range pb.IntRows { + if r.Header.Id == int64(n.id) { + log.Info("gui.findInTablePB() found widget", r.Header) + return r.Header + } + for _, w := range r.Widgets { + if w.Id == int64(n.id) { + log.Info("gui.findInTablePB() found widget", w) + return w + } + } + } + + for _, r := range pb.TimeRows { + if r.Header.Id == int64(n.id) { + log.Info("gui.findInTablePB() found widget", r.Header) + return r.Header + } + for _, w := range r.Widgets { + if w.Id == int64(n.id) { + log.Info("gui.findInTablePB() found widget", w) + return w + } + } + } + log.Info("SOMETHING WAS WRONG. gui.findInTablePB() didn't find widget id", n.id) + return nil +} + func (n *Node) isWidgetInTable() (bool, *guipb.Table) { if n.id == 0 { return false, nil } if n.progname == "gridtablePB" { + n.findInTablePB(n.tablepb) return true, n.tablepb } if n.parent == nil { @@ -58,11 +119,13 @@ func (parent *Node) ShowTable(pb *guipb.Table) { // this should be parent and not rootNode? a := getNewAction(me.rootNode, widget.Show) + // store the mapping for the grid widget to the parent widget pb.Parent = new(guipb.Widget) pb.Parent.Id = int64(parent.id) pb.Parent.Name = pb.Title - grid := parent.makeTableGrid(pb) + grid := parent.makeTableGrid(pb) // generates the protobuf table + parent.numberTableGrid(pb) // sets the X,Y locations in the table protobuf grid grid.tablepb = pb nt := guipb.NewTables() @@ -104,6 +167,106 @@ func (parent *Node) DeleteTable(pb *guipb.Table) { sendActionToPlugin(a) } +func (parent *Node) numberTableGrid(pb *guipb.Table) { + var h int = 0 + var w int = 0 + for _, name := range pb.Order { + // log.Info("got order:", t.Title, name) + if parent.numberTableRow(pb, name, w) { + // log.Info("tree:row() COLUMN GOOD", t.Title, name, w, h) + } else { + log.Info("tree:row() COLOMN FAIL", pb.Title, name, w, h) + } + + w += 1 + } +} + +func (parent *Node) numberTableRow(pb *guipb.Table, name string, w int) bool { + var h int = 0 + for _, r := range pb.StringRows { + if name != r.Header.Name { + // log.Info("skip string row:", r.Header.Name, "!=", name) + continue + } + // log.Info("tree: Add()ing to grid here", r.Header.Id, r.Header.Name, w, h) + r.Header.Location = new(guipb.Location) + r.Header.Location.X = int64(w) + r.Header.Location.Y = int64(h) + h += 1 + for _, v := range r.Widgets { + // log.Info("tree: Add()ing to grid here", v.Id, v.Name, w, h) + v.Location = new(guipb.Location) + v.Location.X = int64(w) + v.Location.Y = int64(h) + h += 1 + } + return true + } + + for _, r := range pb.ButtonRows { + if name != r.Header.Name { + // log.Info("skip string row:", r.Header.Name, "!=", name) + continue + } + // log.Info("tree: Add()ing to grid here", r.Header.Id, r.Header.Name, w, h) + r.Header.Location = new(guipb.Location) + r.Header.Location.X = int64(w) + r.Header.Location.Y = int64(h) + h += 1 + for _, v := range r.Widgets { + // log.Info("tree: Add()ing to grid here", v.Id, v.Name, w, h) + v.Location = new(guipb.Location) + v.Location.X = int64(w) + v.Location.Y = int64(h) + h += 1 + } + return true + } + + for _, r := range pb.IntRows { + if name != r.Header.Name { + // log.Info("skip string row:", r.Header.Name, "!=", name) + continue + } + // log.Info("tree: Add()ing to grid here", r.Header.Id, r.Header.Name, w, h) + r.Header.Location = new(guipb.Location) + r.Header.Location.X = int64(w) + r.Header.Location.Y = int64(h) + h += 1 + for _, v := range r.Widgets { + // log.Info("tree: Add()ing to grid here", v.Id, v.Name, w, h) + v.Location = new(guipb.Location) + v.Location.X = int64(w) + v.Location.Y = int64(h) + h += 1 + } + return true + } + + for _, r := range pb.TimeRows { + if name != r.Header.Name { + // log.Info("skip string row:", r.Header.Name, "!=", name) + continue + } + // log.Info("tree: Add()ing to grid here", r.Header.Id, r.Header.Name, w, h) + r.Header.Location = new(guipb.Location) + r.Header.Location.X = int64(w) + r.Header.Location.Y = int64(h) + h += 1 + for _, v := range r.Widgets { + // log.Info("tree: Add()ing to grid here", v.Id, v.Name, w, h) + v.Location = new(guipb.Location) + v.Location.X = int64(w) + v.Location.Y = int64(h) + h += 1 + } + return true + } + + return false +} + func (parent *Node) makeTableGrid(pb *guipb.Table) *Node { grid := addNode() grid.progname = "gridtablePB" |
