Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wrap dialog labels #1001

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
14 changes: 12 additions & 2 deletions dialog/base.go
Expand Up @@ -56,7 +56,12 @@ func (d *dialog) SetOnClosed(closed func()) {

func (d *dialog) setButtons(buttons fyne.CanvasObject) {
d.bg = canvas.NewRectangle(theme.BackgroundColor())
d.label = widget.NewLabelWithStyle(d.title, fyne.TextAlignLeading, fyne.TextStyle{Bold: true})
d.label = &widget.Label{
Text: d.title,
Alignment: fyne.TextAlignLeading,
Wrapping: fyne.TextWrapWord,
TextStyle: fyne.TextStyle{Bold: true},
}

var content fyne.CanvasObject
if d.icon == nil {
Expand Down Expand Up @@ -128,7 +133,12 @@ func newDialog(title, message string, icon fyne.Resource, callback func(bool), p
}

func newLabel(message string) fyne.CanvasObject {
return widget.NewLabelWithStyle(message, fyne.TextAlignCenter, fyne.TextStyle{})
return &widget.Label{
Text: message,
Alignment: fyne.TextAlignCenter,
Wrapping: fyne.TextWrapWord,
TextStyle: fyne.TextStyle{},
}
}

func newButtonList(buttons ...*widget.Button) fyne.CanvasObject {
Expand Down
58 changes: 58 additions & 0 deletions dialog/base_test.go
@@ -0,0 +1,58 @@
package dialog_test

import (
"image/color"
"strings"
"testing"

"fyne.io/fyne"
"fyne.io/fyne/canvas"
"fyne.io/fyne/dialog"
"fyne.io/fyne/test"
"fyne.io/fyne/theme"
"fyne.io/fyne/widget"
)

func TestCustomDialog_Layout(t *testing.T) {
test.NewApp()
defer test.NewApp()
test.ApplyTheme(t, theme.LightTheme())

for name, tt := range map[string]struct {
title string
dismiss string
content fyne.CanvasObject
}{
"label": {
title: "Title",
dismiss: "Dismiss",
content: widget.NewLabel("FooBar"),
},
"label_long_title": {
title: strings.Repeat("Title", 100),
dismiss: "Dismiss",
content: widget.NewLabel("FooBar"),
},
"label_long_dismiss": {
title: "Title",
dismiss: strings.Repeat("Dismiss", 100),
content: widget.NewLabel("FooBar"),
},
"label_long_content": {
title: "Title",
dismiss: "Dismiss",
content: widget.NewLabel(strings.Repeat("FooBar", 100)),
},
} {
t.Run(name, func(t *testing.T) {
window := fyne.CurrentApp().NewWindow(name)
window.SetContent(canvas.NewRectangle(color.Black))
dialog.ShowCustom(tt.title, tt.dismiss, tt.content, window)
window.Resize(fyne.NewSize(400, 300))

test.AssertImageMatches(t, "custom/layout_"+name+".png", window.Canvas().Capture())

window.Close()
})
}
}
59 changes: 59 additions & 0 deletions dialog/confirm_internal_test.go
@@ -0,0 +1,59 @@
package dialog

import (
"testing"

"fyne.io/fyne/test"

"github.com/stretchr/testify/assert"
)

func TestDialog_ConfirmDoubleCallback(t *testing.T) {
ch := make(chan int)
cnf := NewConfirm("Test", "Test", func(_ bool) {
ch <- 42
}, test.NewWindow(nil))
cnf.SetDismissText("No")
cnf.SetConfirmText("Yes")
cnf.SetOnClosed(func() {
ch <- 43
})
cnf.Show()

assert.False(t, cnf.win.Hidden)
go test.Tap(cnf.dismiss)
assert.EqualValues(t, <-ch, 43)
assert.EqualValues(t, <-ch, 42)
assert.True(t, cnf.win.Hidden)
}

func TestDialog_ConfirmCallbackOnlyOnClosed(t *testing.T) {
ch := make(chan int)
cnf := NewConfirm("Test", "Test", nil, test.NewWindow(nil))
cnf.SetDismissText("No")
cnf.SetConfirmText("Yes")
cnf.SetOnClosed(func() {
ch <- 43
})
cnf.Show()

assert.False(t, cnf.win.Hidden)
go test.Tap(cnf.dismiss)
assert.EqualValues(t, <-ch, 43)
assert.True(t, cnf.win.Hidden)
}

func TestDialog_ConfirmCallbackOnlyOnConfirm(t *testing.T) {
ch := make(chan int)
cnf := NewConfirm("Test", "Test", func(_ bool) {
ch <- 42
}, test.NewWindow(nil))
cnf.SetDismissText("No")
cnf.SetConfirmText("Yes")
cnf.Show()

assert.False(t, cnf.win.Hidden)
go test.Tap(cnf.dismiss)
assert.EqualValues(t, <-ch, 42)
assert.True(t, cnf.win.Hidden)
}
90 changes: 39 additions & 51 deletions dialog/confirm_test.go
@@ -1,59 +1,47 @@
package dialog
package dialog_test

import (
"image/color"
"strings"
"testing"

"fyne.io/fyne"
"fyne.io/fyne/canvas"
"fyne.io/fyne/dialog"
"fyne.io/fyne/test"

"github.com/stretchr/testify/assert"
"fyne.io/fyne/theme"
)

func TestDialog_ConfirmDoubleCallback(t *testing.T) {
ch := make(chan int)
cnf := NewConfirm("Test", "Test", func(_ bool) {
ch <- 42
}, test.NewWindow(nil))
cnf.SetDismissText("No")
cnf.SetConfirmText("Yes")
cnf.SetOnClosed(func() {
ch <- 43
})
cnf.Show()

assert.False(t, cnf.win.Hidden)
go test.Tap(cnf.dismiss)
assert.EqualValues(t, <-ch, 43)
assert.EqualValues(t, <-ch, 42)
assert.True(t, cnf.win.Hidden)
}

func TestDialog_ConfirmCallbackOnlyOnClosed(t *testing.T) {
ch := make(chan int)
cnf := NewConfirm("Test", "Test", nil, test.NewWindow(nil))
cnf.SetDismissText("No")
cnf.SetConfirmText("Yes")
cnf.SetOnClosed(func() {
ch <- 43
})
cnf.Show()

assert.False(t, cnf.win.Hidden)
go test.Tap(cnf.dismiss)
assert.EqualValues(t, <-ch, 43)
assert.True(t, cnf.win.Hidden)
}

func TestDialog_ConfirmCallbackOnlyOnConfirm(t *testing.T) {
ch := make(chan int)
cnf := NewConfirm("Test", "Test", func(_ bool) {
ch <- 42
}, test.NewWindow(nil))
cnf.SetDismissText("No")
cnf.SetConfirmText("Yes")
cnf.Show()

assert.False(t, cnf.win.Hidden)
go test.Tap(cnf.dismiss)
assert.EqualValues(t, <-ch, 42)
assert.True(t, cnf.win.Hidden)
func TestConfirmDialog_Layout(t *testing.T) {
test.NewApp()
defer test.NewApp()
test.ApplyTheme(t, theme.LightTheme())

for name, tt := range map[string]struct {
title, message string
}{
"label": {
title: "Title",
message: "FooBar",
},
"label_long_title": {
title: strings.Repeat("Title", 100),
message: "FooBar",
},
"label_long_message": {
title: "Title",
message: strings.Repeat("FooBar", 100),
},
} {
t.Run(name, func(t *testing.T) {
window := fyne.CurrentApp().NewWindow(name)
window.SetContent(canvas.NewRectangle(color.Black))
dialog.ShowConfirm(tt.title, tt.message, func(bool) {}, window)
window.Resize(fyne.NewSize(400, 300))

test.AssertImageMatches(t, "confirm/layout_"+name+".png", window.Canvas().Capture())

window.Close()
})
}
}
48 changes: 48 additions & 0 deletions dialog/information_internal_test.go
@@ -0,0 +1,48 @@
package dialog

import (
"errors"
"testing"

"fyne.io/fyne/test"
"github.com/stretchr/testify/assert"
)

func TestDialog_MinSize(t *testing.T) {
window := test.NewWindow(nil)
defer window.Close()
d := NewInformation("Looooooooooooooong title", "message...", window)
information := d.(*dialog)

dialogContent := information.win.Content.MinSize()
label := information.label.MinSize()

assert.Less(t, label.Width, dialogContent.Width)
}

func TestDialog_InformationCallback(t *testing.T) {
d := NewInformation("Information", "Hello World", test.NewWindow(nil))
tapped := false
d.SetOnClosed(func() { tapped = true })
d.Show()

information := d.(*dialog)
assert.False(t, information.win.Hidden)
test.Tap(information.dismiss)
assert.True(t, tapped)
assert.True(t, information.win.Hidden)
}

func TestDialog_ErrorCallback(t *testing.T) {
err := errors.New("Error message")
d := NewError(err, test.NewWindow(nil))
tapped := false
d.SetOnClosed(func() { tapped = true })
d.Show()

information := d.(*dialog)
assert.False(t, information.win.Hidden)
test.Tap(information.dismiss)
assert.True(t, tapped)
assert.True(t, information.win.Hidden)
}