146 lines
3.4 KiB
Go
146 lines
3.4 KiB
Go
// Copyright 2025 WIT.COM Inc Licensed GPL 3.0
|
|
|
|
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
|
|
}
|