summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-09-14 11:06:35 -0500
committerJeff Carr <[email protected]>2025-09-14 11:06:35 -0500
commitbd897e4edb60fbaf282ca0d71b99b89d30b6d3dc (patch)
tree19a65b3d93caf2920f0ba72e9a2e8348971ab6d9
parent621ddb1b86ed39aca9cff0450461e390b2dd4281 (diff)
set len(rows)
-rw-r--r--humanTable.go20
-rw-r--r--tablePB.go33
2 files changed, 33 insertions, 20 deletions
diff --git a/humanTable.go b/humanTable.go
index 09c9ff2..6c94a60 100644
--- a/humanTable.go
+++ b/humanTable.go
@@ -4,6 +4,7 @@ package cobol
import (
"fmt"
+ "strings"
)
// TODO: make this more generic
@@ -15,33 +16,38 @@ import (
// returns the line and the Sprintf fmt string
func StandardTableRow(sizes []int, args []string) (string, string) {
- var fmtline string
- var line string
+ var fmts []string
+ var parts []string
for i, si := range sizes {
var cell string
var sfmt string
- if si == 0 {
- sfmt = "%-s "
+ if si < 0 {
+ sfmt = "%-s"
+ } else if si == 0 {
+ sfmt = "%-8.8s"
} else {
sfmt = "%-" + fmt.Sprintf("%d", si) + "." + fmt.Sprintf("%d", si) + "s "
}
- fmtline += sfmt
+ fmts = append(fmts, sfmt)
if len(args) > i {
val := args[i]
cell = fmt.Sprintf(sfmt, val)
- line += cell
+ parts = append(parts, cell)
} else {
break
}
}
+ // todo: change pad based on total size(?)
+ line := strings.Join(parts, " ")
+
var small int
if len(line) > WIDTH {
small = WIDTH
} else {
small = len(line) - 3
}
- return line[0:small], fmtline
+ return line[0:small], strings.Join(fmts, " ")
}
func StandardTableSize5(sizes []int, args []string) string {
diff --git a/tablePB.go b/tablePB.go
index 2705a45..98aa6db 100644
--- a/tablePB.go
+++ b/tablePB.go
@@ -23,23 +23,30 @@ func PrintTable(pb *guipb.Table) {
log.Info("grid.Id =", pb.Grid.Id)
}
- if pb.Height < 4 {
- pb.Height = 4
- }
var h int = 0
var w int = 0
+ var HEIGHT int
+ if pb.Height == 0 {
+ HEIGHT = 4
+ }
+ log.Info("pb.Height", pb.Height, HEIGHT)
var args []string
var sizes []int
for _, name := range pb.Order {
- arg, attr := getColAttr(pb, name)
+ arg, attr, tmp := getColAttr(pb, name)
+ HEIGHT = tmp
args = append(args, arg)
- sizes = append(sizes, int(attr.Width))
+ if attr.Width == 0 {
+ sizes = append(sizes, 8)
+ } else {
+ sizes = append(sizes, int(attr.Width))
+ }
}
- sizes = []int{24, 5, 8, 32, 13, 4, 4, 4, 4}
+ // sizes = []int{24, 5, 8, 32, 13, 4, 4, 4, 4}
header, _ := StandardTableRow(sizes, args)
log.Info(header)
- for i := range pb.Height {
+ for i := range HEIGHT {
var cells []string
for _, name := range pb.Order {
if val, ok := getTableCell(pb, name, int(i)); ok {
@@ -108,34 +115,34 @@ func getTableCell(t *guipb.Table, name string, row int) (string, bool) {
return "", false
}
-func getColAttr(t *guipb.Table, name string) (string, *guipb.ColAttr) {
+func getColAttr(t *guipb.Table, name string) (string, *guipb.ColAttr, int) {
// find the Column that matches the "name"
for _, r := range t.StringCols {
if name != r.Header.Name {
continue
}
- return r.Header.Name, r.Attr
+ return r.Header.Name, r.Attr, len(r.Vals)
}
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
+ return r.Header.Name, r.Attr, len(r.Vals)
}
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
+ return r.Header.Name, r.Attr, len(r.Vals)
}
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 r.Header.Name, r.Attr, len(r.Vals)
}
- return "", nil
+ return "", nil, 0
}