From 907fea439261c5b51cfc086a0e2c2689b826b103 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sun, 14 Sep 2025 05:50:55 -0500 Subject: [PATCH] /s/Row/Col/ --- tablePB.go | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/tablePB.go b/tablePB.go index 8cdaa38..be757d5 100644 --- a/tablePB.go +++ b/tablePB.go @@ -3,10 +3,143 @@ package cobol import ( + "fmt" + "time" + + "go.wit.com/lib/gui/shell" "go.wit.com/lib/protobuf/guipb" "go.wit.com/log" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/anypb" + "google.golang.org/protobuf/types/known/timestamppb" + "google.golang.org/protobuf/types/known/wrapperspb" ) func PrintTable(pb *guipb.Table) { log.Info("print PB here") + + if pb.Grid == nil { + log.Info("grid = nil") + } else { + log.Info("grid.Id =", pb.Grid.Id) + } + + var h int = 0 + var w int = 0 + for _, name := range pb.Order { + if addTableRow(pb, name, w) { + log.Info("tree:row() COLUMN GOOD", pb.Title, name, w, h) + h += 1 + } else { + log.Info("tree:row() COLOMN FAIL", pb.Title, name, w, h) + } + + w += 1 + } +} + +func addTableRow(t *guipb.Table, name string, w int) bool { + var h int = 0 + for _, r := range t.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) + for i, v := range r.Vals { + log.Info("String Row", i, w, v) + } + makeGridLabel(r.Header, w, h) + h += 1 + for _, v := range r.Widgets { + log.Info("tree: Add()ing to grid here", v.Id, v.Name, w, h) + makeGridLabel(v, w, h) + h += 1 + } + return true + } + + for _, r := range t.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) + for i, v := range r.Vals { + log.Info("Button Row", i, v) + } + makeGridLabel(r.Header, w, h) + h += 1 + for _, v := range r.Widgets { + log.Info("tree: Add()ing to grid here", v.Id, v.Name, w, h) + makeGridLabel(v, w, h) + h += 1 + } + return true + } + + for _, r := range t.IntRows { + if name != r.Header.Name { + // log.Info("skip sint row:", r.Header.Name, "!=", name) + continue + } + log.Info("tree: Add()ing to grid here", r.Header.Id, r.Header.Name, w, h) + makeGridLabel(r.Header, w, h) + h += 1 + for _, v := range r.Widgets { + vi, err := extractInt64(v.Val) + if err != nil { + log.Warn("int error", err) + } + v.Name = fmt.Sprintf("%d", vi) + // log.Info("tree: Add()ing to grid here", v.Id, v.Name, w, h) + makeGridLabel(v, w, h) + h += 1 + } + return true + } + + for _, r := range t.TimeRows { + if name != r.Header.Name { + // log.Info("skip sint row:", r.Header.Name, "!=", name) + continue + } + // log.Info("tree: Add()ing to grid here", r.Header.Id, r.Header.Name, w, h) + makeGridLabel(r.Header, w, h) + h += 1 + for _, widg := range r.Widgets { + msg, err := anypb.UnmarshalNew(widg.Val, proto.UnmarshalOptions{}) + if err != nil { + log.Fatalf("failed to unmarshal: %v", err) + } + + switch v := msg.(type) { + case *timestamppb.Timestamp: + // fmt.Println("Unpacked Timestamp:", shell.FormatDuration(time.Since(v.AsTime()))) + widg.Name = shell.FormatDuration(time.Since(v.AsTime())) + default: + fmt.Println("Unknown type:", v) + widg.Name = fmt.Sprintf("%v", v) + } + + // log.Info("tree: Add()ing to grid here", widg.Id, widg.Name, w, h) + makeGridLabel(widg, w, h) + h += 1 + } + return true + } + + return false +} + +func makeGridLabel(pb *guipb.Widget, w int, h int) { + log.Info("MAKE GRID LABEL", w, h, pb.Name) +} + +func extractInt64(anyVal *anypb.Any) (int64, error) { + val := &wrapperspb.Int64Value{} + if err := anyVal.UnmarshalTo(val); err != nil { + return 0, err + } + return val.Value, nil }