Skip to content

Commit

Permalink
Reflect changes in form label after first render
Browse files Browse the repository at this point in the history
Fixes #1231
  • Loading branch information
andydotxyz committed Aug 4, 2020
1 parent e2338b7 commit 6274ca6
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 3 deletions.
18 changes: 15 additions & 3 deletions widget/form.go
Expand Up @@ -73,12 +73,13 @@ func (f *Form) MinSize() fyne.Size {
// Refresh updates the widget state when requested.
func (f *Form) Refresh() {
cache.Renderer(f.super()) // we are about to make changes to renderer created content... not great!
f.setButtons()
f.updateButtons()
f.updateLabels()
f.BaseWidget.Refresh()
canvas.Refresh(f.super()) // refresh ourselves for BG color - the above updates the content
}

func (f *Form) setButtons() {
func (f *Form) updateButtons() {
if f.CancelText == "" {
f.CancelText = "Cancel"
}
Expand Down Expand Up @@ -108,6 +109,17 @@ func (f *Form) setButtons() {
}
}

func (f *Form) updateLabels() {
for i, item := range f.Items {
l := f.itemGrid.Objects[i*2].(*Label)
if l.Text == item.Text {
continue
}

l.SetText(item.Text)
}
}

// CreateRenderer is a private method to Fyne which links this widget to its renderer
func (f *Form) CreateRenderer() fyne.WidgetRenderer {
f.ExtendBaseWidget(f)
Expand All @@ -124,7 +136,7 @@ func (f *Form) CreateRenderer() fyne.WidgetRenderer {
f.buttonBox = NewHBox(layout.NewSpacer(), f.cancelButton, f.submitButton)

renderer := cache.Renderer(NewVBox(f.itemGrid, f.buttonBox))
f.setButtons() // will set correct visibility on the submit/cancel btns
f.updateButtons() // will set correct visibility on the submit/cancel btns
return renderer
}

Expand Down
13 changes: 13 additions & 0 deletions widget/form_test.go
Expand Up @@ -97,6 +97,19 @@ func TestForm_Renderer(t *testing.T) {
test.AssertImageMatches(t, "form_initial.png", w.Canvas().Capture())
}

func TestForm_ChangeText(t *testing.T) {
item := &FormItem{Text: "Test", Widget: NewEntry()}
form := &Form{Items: []*FormItem{item}}

renderer := test.WidgetRenderer(form)
c := renderer.Objects()[0].(*fyne.Container)
assert.Equal(t, "Test", c.Objects[0].(*Label).Text)

item.Text = "Changed"
form.Refresh()
assert.Equal(t, "Changed", c.Objects[0].(*Label).Text)
}

func TestForm_ChangeTheme(t *testing.T) {
app := test.NewApp()
defer test.NewApp()
Expand Down

0 comments on commit 6274ca6

Please sign in to comment.