From ea8a30b216fff7e3b212ed8d5c8e73dbf35d43c7 Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Thu, 29 Oct 2020 00:01:22 +0000 Subject: [PATCH 1/3] Make sure that visible table cells refresh when asked as well --- widget/table.go | 14 ++++++++------ widget/table_test.go | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/widget/table.go b/widget/table.go index eeeec9df16..1a2806f668 100644 --- a/widget/table.go +++ b/widget/table.go @@ -437,6 +437,11 @@ func (r *tableCellsRenderer) Refresh() { minRow := offY / (r.cells.cellSize.Height + tableDividerThickness) maxRow := fyne.Min(minRow+rows, dataRows) + updateCell := r.cells.t.UpdateCell + if updateCell == nil { + fyne.LogError("Missing UpdateCell callback required for Table", nil) + } + wasVisible := r.visible r.visible = make(map[TableCellID]fyne.CanvasObject) var cells []fyne.CanvasObject @@ -456,14 +461,11 @@ func (r *tableCellsRenderer) Refresh() { c.Move(fyne.NewPos(theme.Padding()+x*r.cells.cellSize.Width+(x-1)*tableDividerThickness, theme.Padding()+y*r.cells.cellSize.Height+(y-1)*tableDividerThickness)) - - if f := r.cells.t.UpdateCell; f != nil { - f(TableCellID{y, x}, c) - } else { - fyne.LogError("Missing UpdateCell callback required for Table", nil) - } } + if updateCell != nil { + updateCell(TableCellID{y, x}, c) + } r.visible[id] = c cells = append(cells, c) } diff --git a/widget/table_test.go b/widget/table_test.go index 5bcdb8142c..6891742692 100644 --- a/widget/table_test.go +++ b/widget/table_test.go @@ -142,6 +142,27 @@ func TestTable_Hovered(t *testing.T) { test.AssertImageMatches(t, "table/hovered.png", w.Canvas().Capture()) } +func TestTable_Refresh(t *testing.T) { + displayText := "placeholder" + table := NewTable( + func() (int, int) { return 5, 5 }, + func() fyne.CanvasObject { + return NewLabel(displayText) + }, + func(_ TableCellID, obj fyne.CanvasObject) { + obj.(*Label).SetText(displayText) + }) + table.Resize(fyne.NewSize(120, 120)) + + renderer := test.WidgetRenderer(table).(*tableRenderer) + cellRenderer := test.WidgetRenderer(renderer.scroll.Content.(*tableCells)) + assert.Equal(t, "placeholder", cellRenderer.(*tableCellsRenderer).Objects()[7].(*Label).Text) + + displayText = "replaced" + table.Refresh() + assert.Equal(t, "replaced", cellRenderer.(*tableCellsRenderer).Objects()[7].(*Label).Text) +} + func TestTable_Selection(t *testing.T) { app := test.NewApp() defer test.NewApp() From 6e96002ea9ef5edc4371e3485f819a8e8bd9d966 Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Thu, 29 Oct 2020 00:19:46 +0000 Subject: [PATCH 2/3] Correct row/col indexing (move from confusing x/y) --- widget/table.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/widget/table.go b/widget/table.go index 1a2806f668..984872a983 100644 --- a/widget/table.go +++ b/widget/table.go @@ -445,9 +445,9 @@ func (r *tableCellsRenderer) Refresh() { wasVisible := r.visible r.visible = make(map[TableCellID]fyne.CanvasObject) var cells []fyne.CanvasObject - for y := minRow; y < maxRow; y++ { - for x := minCol; x < maxCol; x++ { - id := TableCellID{x, y} + for row := minRow; row < maxRow; row++ { + for col := minCol; col < maxCol; col++ { + id := TableCellID{row, col} c, ok := wasVisible[id] if !ok { c = r.pool.Obtain() @@ -459,12 +459,12 @@ func (r *tableCellsRenderer) Refresh() { continue } - c.Move(fyne.NewPos(theme.Padding()+x*r.cells.cellSize.Width+(x-1)*tableDividerThickness, - theme.Padding()+y*r.cells.cellSize.Height+(y-1)*tableDividerThickness)) + c.Move(fyne.NewPos(theme.Padding()+col*r.cells.cellSize.Width+(col-1)*tableDividerThickness, + theme.Padding()+row*r.cells.cellSize.Height+(row-1)*tableDividerThickness)) } if updateCell != nil { - updateCell(TableCellID{y, x}, c) + updateCell(TableCellID{row, col}, c) } r.visible[id] = c cells = append(cells, c) From 5df118c632e22603b577d291ef093546c995d270 Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Thu, 29 Oct 2020 00:42:57 +0000 Subject: [PATCH 3/3] Fix template so tests fail when not fixed --- widget/table_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widget/table_test.go b/widget/table_test.go index 6891742692..9e54d51324 100644 --- a/widget/table_test.go +++ b/widget/table_test.go @@ -147,7 +147,7 @@ func TestTable_Refresh(t *testing.T) { table := NewTable( func() (int, int) { return 5, 5 }, func() fyne.CanvasObject { - return NewLabel(displayText) + return NewLabel("template") }, func(_ TableCellID, obj fyne.CanvasObject) { obj.(*Label).SetText(displayText)