summaryrefslogtreecommitdiff
path: root/table.go
diff options
context:
space:
mode:
Diffstat (limited to 'table.go')
-rw-r--r--table.go165
1 files changed, 164 insertions, 1 deletions
diff --git a/table.go b/table.go
index aa8da77..6210680 100644
--- a/table.go
+++ b/table.go
@@ -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"