set len(rows)

This commit is contained in:
Jeff Carr 2025-09-14 11:06:35 -05:00
parent 621ddb1b86
commit bd897e4edb
2 changed files with 33 additions and 20 deletions

View File

@ -4,6 +4,7 @@ package cobol
import ( import (
"fmt" "fmt"
"strings"
) )
// TODO: make this more generic // TODO: make this more generic
@ -15,33 +16,38 @@ import (
// returns the line and the Sprintf fmt string // returns the line and the Sprintf fmt string
func StandardTableRow(sizes []int, args []string) (string, string) { func StandardTableRow(sizes []int, args []string) (string, string) {
var fmtline string var fmts []string
var line string var parts []string
for i, si := range sizes { for i, si := range sizes {
var cell string var cell string
var sfmt string var sfmt string
if si == 0 { if si < 0 {
sfmt = "%-s " sfmt = "%-s"
} else if si == 0 {
sfmt = "%-8.8s"
} else { } else {
sfmt = "%-" + fmt.Sprintf("%d", si) + "." + fmt.Sprintf("%d", si) + "s " sfmt = "%-" + fmt.Sprintf("%d", si) + "." + fmt.Sprintf("%d", si) + "s "
} }
fmtline += sfmt fmts = append(fmts, sfmt)
if len(args) > i { if len(args) > i {
val := args[i] val := args[i]
cell = fmt.Sprintf(sfmt, val) cell = fmt.Sprintf(sfmt, val)
line += cell parts = append(parts, cell)
} else { } else {
break break
} }
} }
// todo: change pad based on total size(?)
line := strings.Join(parts, " ")
var small int var small int
if len(line) > WIDTH { if len(line) > WIDTH {
small = WIDTH small = WIDTH
} else { } else {
small = len(line) - 3 small = len(line) - 3
} }
return line[0:small], fmtline return line[0:small], strings.Join(fmts, " ")
} }
func StandardTableSize5(sizes []int, args []string) string { func StandardTableSize5(sizes []int, args []string) string {

View File

@ -23,23 +23,30 @@ 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 HEIGHT int
if pb.Height == 0 {
HEIGHT = 4
}
log.Info("pb.Height", pb.Height, HEIGHT)
var args []string var args []string
var sizes []int var sizes []int
for _, name := range pb.Order { for _, name := range pb.Order {
arg, attr := getColAttr(pb, name) arg, attr, tmp := getColAttr(pb, name)
HEIGHT = tmp
args = append(args, arg) args = append(args, arg)
if attr.Width == 0 {
sizes = append(sizes, 8)
} else {
sizes = append(sizes, int(attr.Width)) 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) header, _ := StandardTableRow(sizes, args)
log.Info(header) log.Info(header)
for i := range pb.Height { for i := range HEIGHT {
var cells []string var cells []string
for _, name := range pb.Order { for _, name := range pb.Order {
if val, ok := getTableCell(pb, name, int(i)); ok { 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 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" // find the Column that matches the "name"
for _, r := range t.StringCols { for _, r := range t.StringCols {
if name != r.Header.Name { if name != r.Header.Name {
continue continue
} }
return r.Header.Name, r.Attr return r.Header.Name, r.Attr, len(r.Vals)
} }
for _, r := range t.ButtonCols { for _, r := range t.ButtonCols {
if name != r.Header.Name { if name != r.Header.Name {
// log.Info("skip string row:", r.Header.Name, "!=", name) // log.Info("skip string row:", r.Header.Name, "!=", name)
continue continue
} }
return r.Header.Name, r.Attr return r.Header.Name, r.Attr, len(r.Vals)
} }
for _, r := range t.IntCols { for _, r := range t.IntCols {
if name != r.Header.Name { if name != r.Header.Name {
// log.Info("skip string row:", r.Header.Name, "!=", name) // log.Info("skip string row:", r.Header.Name, "!=", name)
continue continue
} }
return r.Header.Name, r.Attr return r.Header.Name, r.Attr, len(r.Vals)
} }
for _, r := range t.TimeCols { for _, r := range t.TimeCols {
if name != r.Header.Name { if name != r.Header.Name {
// log.Info("skip sint row:", r.Header.Name, "!=", name) // log.Info("skip sint row:", r.Header.Name, "!=", name)
continue continue
} }
return r.Header.Name, r.Attr return r.Header.Name, r.Attr, len(r.Vals)
} }
return "", nil return "", nil, 0
} }