made a standard TableRow() function
This commit is contained in:
parent
907fea4392
commit
621ddb1b86
|
@ -13,6 +13,37 @@ import (
|
||||||
// sizes := []int{40, 12, 6, 12, 16, 16, 16, 12, 12, 8}
|
// sizes := []int{40, 12, 6, 12, 16, 16, 16, 12, 12, 8}
|
||||||
// log.Info(standardTableSize10(sizes, args))
|
// log.Info(standardTableSize10(sizes, args))
|
||||||
|
|
||||||
|
// returns the line and the Sprintf fmt string
|
||||||
|
func StandardTableRow(sizes []int, args []string) (string, string) {
|
||||||
|
var fmtline string
|
||||||
|
var line string
|
||||||
|
for i, si := range sizes {
|
||||||
|
var cell string
|
||||||
|
var sfmt string
|
||||||
|
if si == 0 {
|
||||||
|
sfmt = "%-s "
|
||||||
|
} else {
|
||||||
|
sfmt = "%-" + fmt.Sprintf("%d", si) + "." + fmt.Sprintf("%d", si) + "s "
|
||||||
|
}
|
||||||
|
fmtline += sfmt
|
||||||
|
if len(args) > i {
|
||||||
|
val := args[i]
|
||||||
|
cell = fmt.Sprintf(sfmt, val)
|
||||||
|
line += cell
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var small int
|
||||||
|
if len(line) > WIDTH {
|
||||||
|
small = WIDTH
|
||||||
|
} else {
|
||||||
|
small = len(line) - 3
|
||||||
|
}
|
||||||
|
return line[0:small], fmtline
|
||||||
|
}
|
||||||
|
|
||||||
func StandardTableSize5(sizes []int, args []string) string {
|
func StandardTableSize5(sizes []int, args []string) string {
|
||||||
WIDTH, _ := getTerminalWidth()
|
WIDTH, _ := getTerminalWidth()
|
||||||
var s string
|
var s string
|
||||||
|
|
194
tablePB.go
194
tablePB.go
|
@ -4,14 +4,13 @@ package cobol
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"go.wit.com/lib/gui/shell"
|
"go.wit.com/lib/gui/shell"
|
||||||
"go.wit.com/lib/protobuf/guipb"
|
"go.wit.com/lib/protobuf/guipb"
|
||||||
"go.wit.com/log"
|
"go.wit.com/log"
|
||||||
"google.golang.org/protobuf/proto"
|
|
||||||
"google.golang.org/protobuf/types/known/anypb"
|
"google.golang.org/protobuf/types/known/anypb"
|
||||||
"google.golang.org/protobuf/types/known/timestamppb"
|
|
||||||
"google.golang.org/protobuf/types/known/wrapperspb"
|
"google.golang.org/protobuf/types/known/wrapperspb"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -24,112 +23,40 @@ func PrintTable(pb *guipb.Table) {
|
||||||
log.Info("grid.Id =", pb.Grid.Id)
|
log.Info("grid.Id =", pb.Grid.Id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if pb.Height < 4 {
|
||||||
|
pb.Height = 4
|
||||||
|
}
|
||||||
var h int = 0
|
var h int = 0
|
||||||
var w int = 0
|
var w int = 0
|
||||||
|
var args []string
|
||||||
|
var sizes []int
|
||||||
for _, name := range pb.Order {
|
for _, name := range pb.Order {
|
||||||
if addTableRow(pb, name, w) {
|
arg, attr := getColAttr(pb, name)
|
||||||
log.Info("tree:row() COLUMN GOOD", pb.Title, name, w, h)
|
args = append(args, arg)
|
||||||
|
sizes = append(sizes, int(attr.Width))
|
||||||
|
}
|
||||||
|
sizes = []int{24, 5, 8, 32, 13, 4, 4, 4, 4}
|
||||||
|
header, _ := StandardTableRow(sizes, args)
|
||||||
|
log.Info(header)
|
||||||
|
|
||||||
|
for i := range pb.Height {
|
||||||
|
var cells []string
|
||||||
|
for _, name := range pb.Order {
|
||||||
|
if val, ok := getTableCell(pb, name, int(i)); ok {
|
||||||
|
// log.Info("tree: CELL GOOD", pb.Title, name, w, h, val)
|
||||||
h += 1
|
h += 1
|
||||||
|
cells = append(cells, val)
|
||||||
} else {
|
} else {
|
||||||
log.Info("tree:row() COLOMN FAIL", pb.Title, name, w, h)
|
log.Info("tree: CELL FAIL", pb.Title, name, w, h, val)
|
||||||
}
|
cells = append(cells, "err")
|
||||||
|
|
||||||
w += 1
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
line, fmtline := StandardTableRow(sizes, cells)
|
||||||
func addTableRow(t *guipb.Table, name string, w int) bool {
|
if os.Getenv("TABLEPB_VERBOSE") == "true" {
|
||||||
var h int = 0
|
line += "FMT: " + fmtline
|
||||||
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)
|
log.Info(line)
|
||||||
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) {
|
func makeGridLabel(pb *guipb.Widget, w int, h int) {
|
||||||
|
@ -143,3 +70,72 @@ func extractInt64(anyVal *anypb.Any) (int64, error) {
|
||||||
}
|
}
|
||||||
return val.Value, nil
|
return val.Value, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getTableCell(t *guipb.Table, name string, row int) (string, bool) {
|
||||||
|
// find the Column that matches the "name"
|
||||||
|
for _, r := range t.StringCols {
|
||||||
|
if name != r.Header.Name {
|
||||||
|
// log.Info("skip string row:", r.Header.Name, "!=", name)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// log.Info("Cell value:", r.Vals[row])
|
||||||
|
return r.Vals[row], true
|
||||||
|
}
|
||||||
|
for _, r := range t.ButtonCols {
|
||||||
|
if name != r.Header.Name {
|
||||||
|
// log.Info("skip string row:", r.Header.Name, "!=", name)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// log.Info("Cell value:", r.Vals[row])
|
||||||
|
return r.Vals[row], true
|
||||||
|
}
|
||||||
|
for _, r := range t.IntCols {
|
||||||
|
if name != r.Header.Name {
|
||||||
|
// log.Info("skip string row:", r.Header.Name, "!=", name)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%d", r.Vals[row]), true
|
||||||
|
}
|
||||||
|
for _, r := range t.TimeCols {
|
||||||
|
if name != r.Header.Name {
|
||||||
|
// log.Info("skip sint row:", r.Header.Name, "!=", name)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
cellTime := r.Vals[row]
|
||||||
|
s := shell.FormatDuration(time.Since(cellTime.AsTime()))
|
||||||
|
return s, true
|
||||||
|
}
|
||||||
|
return "", false
|
||||||
|
}
|
||||||
|
|
||||||
|
func getColAttr(t *guipb.Table, name string) (string, *guipb.ColAttr) {
|
||||||
|
// find the Column that matches the "name"
|
||||||
|
for _, r := range t.StringCols {
|
||||||
|
if name != r.Header.Name {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return r.Header.Name, r.Attr
|
||||||
|
}
|
||||||
|
for _, r := range t.ButtonCols {
|
||||||
|
if name != r.Header.Name {
|
||||||
|
// log.Info("skip string row:", r.Header.Name, "!=", name)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return r.Header.Name, r.Attr
|
||||||
|
}
|
||||||
|
for _, r := range t.IntCols {
|
||||||
|
if name != r.Header.Name {
|
||||||
|
// log.Info("skip string row:", r.Header.Name, "!=", name)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return r.Header.Name, r.Attr
|
||||||
|
}
|
||||||
|
for _, r := range t.TimeCols {
|
||||||
|
if name != r.Header.Name {
|
||||||
|
// log.Info("skip sint row:", r.Header.Name, "!=", name)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
return r.Header.Name, r.Attr
|
||||||
|
}
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue