ui/history_view: size Log column to content so file names aren't truncated
The Log column was fixed at 240px with TextTruncate, clipping log file names like 20260601-100000_<JobName>.log. Measure the widest value and size the column to fit (bounded 240–520px), recomputing on refresh so newly recorded events widen the column instead of being cut off. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+43
-3
@@ -9,6 +9,7 @@ import (
|
||||
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/container"
|
||||
"fyne.io/fyne/v2/theme"
|
||||
"fyne.io/fyne/v2/widget"
|
||||
)
|
||||
|
||||
@@ -41,7 +42,38 @@ func collectActivity(jobs []job, runtimes map[int]*domain.JobRuntime) []event {
|
||||
return events
|
||||
}
|
||||
|
||||
func newHistoryView(events *[]event) *fyne.Container {
|
||||
// logColumnMinWidth/logColumnMaxWidth bound the dynamically sized Log column.
|
||||
// The minimum keeps the column readable when names are short or absent; the
|
||||
// maximum stops a single very long file name from dominating the table (the
|
||||
// table still scrolls horizontally past it).
|
||||
const (
|
||||
logColumnMinWidth = 240
|
||||
logColumnMaxWidth = 520
|
||||
logColumnPadding = 24
|
||||
)
|
||||
|
||||
// logColumnWidth measures the widest Log cell value so the column can be sized
|
||||
// to fit its content. Fyne tables do not auto-size columns, so without this the
|
||||
// fixed width clips file names like "20260601-100000_SomeJobName.log".
|
||||
func logColumnWidth(events []event) float32 {
|
||||
width := float32(logColumnMinWidth)
|
||||
for _, current := range events {
|
||||
text := logFileName(current.LogFile)
|
||||
if text == "" {
|
||||
continue
|
||||
}
|
||||
w := fyne.MeasureText(text, theme.TextSize(), fyne.TextStyle{}).Width + logColumnPadding
|
||||
if w > width {
|
||||
width = w
|
||||
}
|
||||
}
|
||||
if width > logColumnMaxWidth {
|
||||
width = logColumnMaxWidth
|
||||
}
|
||||
return width
|
||||
}
|
||||
|
||||
func newHistoryView(events *[]event) (*fyne.Container, func()) {
|
||||
descending := false
|
||||
headerText := func(id widget.TableCellID) string {
|
||||
headers := []string{"Time", "Trigger", "Job", "State", "Detail", "Log"}
|
||||
@@ -107,8 +139,16 @@ func newHistoryView(events *[]event) *fyne.Container {
|
||||
table.SetColumnWidth(2, 170)
|
||||
table.SetColumnWidth(3, 90)
|
||||
table.SetColumnWidth(4, 260)
|
||||
table.SetColumnWidth(5, 240)
|
||||
return container.NewPadded(table)
|
||||
table.SetColumnWidth(5, logColumnWidth(*events))
|
||||
|
||||
// refresh recomputes the content-fit Log column width before redrawing, so
|
||||
// newly recorded events with longer file names widen the column instead of
|
||||
// being truncated.
|
||||
refresh := func() {
|
||||
table.SetColumnWidth(5, logColumnWidth(*events))
|
||||
table.Refresh()
|
||||
}
|
||||
return container.NewPadded(table), refresh
|
||||
}
|
||||
|
||||
func historyCellText(id widget.TableCellID, events []event) string {
|
||||
|
||||
Reference in New Issue
Block a user