Skip to content

Commit

Permalink
Merge branch 'develop' into fix/950
Browse files Browse the repository at this point in the history
  • Loading branch information
andydotxyz committed May 29, 2020
2 parents af867bb + dd38d66 commit 9007448
Show file tree
Hide file tree
Showing 20 changed files with 460 additions and 122 deletions.
9 changes: 6 additions & 3 deletions app/settings_desktop_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ func TestWatchSettings(t *testing.T) {

func TestWatchFile(t *testing.T) {
path := testPath("fyne-temp-watch.txt")
os.Create(path)
f, _ := os.Create(path)
f.Close()
defer os.Remove(path)

called := make(chan interface{}, 1)
Expand All @@ -65,7 +66,8 @@ func TestWatchFile(t *testing.T) {

func TestFileWatcher_FileDeleted(t *testing.T) {
path := testPath("fyne-temp-watch.txt")
os.Create(path)
f, _ := os.Create(path)
f.Close()
defer os.Remove(path)

called := make(chan interface{}, 1)
Expand All @@ -79,13 +81,14 @@ func TestFileWatcher_FileDeleted(t *testing.T) {

defer watcher.Close()
os.Remove(path)
os.Create(path)
f, _ = os.Create(path)

select {
case _ = <-called:
case <-time.After(100 * time.Millisecond):
t.Error("File watcher callback was not called")
}
f.Close()
}

func testPath(child string) string {
Expand Down
3 changes: 0 additions & 3 deletions cmd/fyne_demo/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,6 @@ func main() {
widget.NewTabItemWithIcon("Windows", theme.ViewFullScreenIcon(), screens.DialogScreen(w)),
widget.NewTabItemWithIcon("Advanced", theme.SettingsIcon(), screens.AdvancedScreen(w)))
tabs.SetTabLocation(widget.TabLocationLeading)
tabs.OnChanged = func(tab *widget.TabItem) {
fmt.Printf("%s tab selected\n", tab.Text)
}
tabs.SelectTabIndex(a.Preferences().Int(preferenceCurrentTab))
w.SetContent(tabs)

Expand Down
2 changes: 1 addition & 1 deletion cmd/fyne_demo/screens/graphics.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ func GraphicsScreen() fyne.CanvasObject {
}
}()
content := fyne.NewContainerWithLayout(layout.NewGridWrapLayout(fyne.NewSize(90, 90)),
canvas.NewImageFromResource(theme.FyneLogo()),
&canvas.Rectangle{FillColor: color.NRGBA{0x80, 0, 0, 0xff},
StrokeColor: color.NRGBA{0xff, 0xff, 0xff, 0xff},
StrokeWidth: 1},
canvas.NewImageFromResource(theme.FyneLogo()),
&canvas.Line{StrokeColor: color.NRGBA{0, 0, 0x80, 0xff}, StrokeWidth: 5},
&canvas.Circle{StrokeColor: color.NRGBA{0, 0, 0x80, 0xff},
FillColor: color.NRGBA{0x30, 0x30, 0x30, 0x60},
Expand Down
103 changes: 74 additions & 29 deletions cmd/fyne_demo/screens/widget.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ Mauris erat urna, fermentum et quam rhoncus, fringilla consequat ante. Vivamus c
Suspendisse id maximus felis. Sed mauris odio, mattis eget mi eu, consequat tempus purus.`
)

var (
progress *widget.ProgressBar
infProgress *widget.ProgressBarInfinite
endProgress chan interface{}
)

func makeButtonTab() fyne.Widget {
disabled := widget.NewButton("Disabled", func() {})
disabled.Disable()
Expand All @@ -34,13 +40,10 @@ func makeButtonTab() fyne.Widget {
fyne.NewMenuItem("Twitter", func() { fmt.Println("context menu Share->Twitter") }),
fyne.NewMenuItem("Reddit", func() { fmt.Println("context menu Share->Reddit") }),
)
menuLabel := &contextMenuButton{
widget.NewButton("tap me for pop-up menu with submenus", nil),
fyne.NewMenu("",
fyne.NewMenuItem("Copy", func() { fmt.Println("context menu copy") }),
shareItem,
),
}
menuLabel := newContextMenuButton("tap me for pop-up menu with submenus", fyne.NewMenu("",
fyne.NewMenuItem("Copy", func() { fmt.Println("context menu copy") }),
shareItem,
))

return widget.NewVBox(
widget.NewButton("Button (text only)", func() { fmt.Println("tapped text button") }),
Expand Down Expand Up @@ -199,19 +202,9 @@ func makeInputTab() fyne.Widget {
}

func makeProgressTab() fyne.Widget {
progress := widget.NewProgressBar()
infProgress := widget.NewProgressBarInfinite()

go func() {
num := 0.0
for num < 1.0 {
time.Sleep(100 * time.Millisecond)
progress.SetValue(num)
num += 0.01
}

progress.SetValue(1)
}()
progress = widget.NewProgressBar()
infProgress = widget.NewProgressBarInfinite()
endProgress = make(chan interface{}, 1)

return widget.NewVBox(
widget.NewLabel("Percent"), progress,
Expand Down Expand Up @@ -248,6 +241,41 @@ func makeFormTab() fyne.Widget {
return form
}

func startProgress() {
progress.SetValue(0)
select { // ignore stale end message
case <-endProgress:
default:
}

go func() {
num := 0.0
for num < 1.0 {
time.Sleep(100 * time.Millisecond)
select {
case <-endProgress:
return
default:
}

progress.SetValue(num)
num += 0.01
}

progress.SetValue(1)
}()
infProgress.Start()
}

func stopProgress() {
if !infProgress.Running() {
return
}

infProgress.Stop()
endProgress <- struct{}{}
}

// WidgetScreen shows a panel containing widget demos
func WidgetScreen() fyne.CanvasObject {
toolbar := widget.NewToolbar(widget.NewToolbarAction(theme.MailComposeIcon(), func() { fmt.Println("New") }),
Expand All @@ -258,23 +286,40 @@ func WidgetScreen() fyne.CanvasObject {
widget.NewToolbarAction(theme.ContentPasteIcon(), func() { fmt.Println("Paste") }),
)

progress := makeProgressTab()
tabs := widget.NewTabContainer(
widget.NewTabItem("Buttons", makeButtonTab()),
widget.NewTabItem("Text", makeTextTab()),
widget.NewTabItem("Input", makeInputTab()),
widget.NewTabItem("Progress", progress),
widget.NewTabItem("Form", makeFormTab()),
)
tabs.OnChanged = func(t *widget.TabItem) {
if t.Content == progress {
startProgress()
} else {
stopProgress()
}
}

return fyne.NewContainerWithLayout(layout.NewBorderLayout(toolbar, nil, nil, nil),
toolbar,
widget.NewTabContainer(
widget.NewTabItem("Buttons", makeButtonTab()),
widget.NewTabItem("Text", makeTextTab()),
widget.NewTabItem("Input", makeInputTab()),
widget.NewTabItem("Progress", makeProgressTab()),
widget.NewTabItem("Form", makeFormTab()),
),
toolbar, tabs,
)
}

type contextMenuButton struct {
*widget.Button
widget.Button
menu *fyne.Menu
}

func (b *contextMenuButton) Tapped(e *fyne.PointEvent) {
widget.ShowPopUpMenuAtPosition(b.menu, fyne.CurrentApp().Driver().CanvasForObject(b), e.AbsolutePosition)
}

func newContextMenuButton(label string, menu *fyne.Menu) *contextMenuButton {
b := &contextMenuButton{menu: menu}
b.Text = label

b.ExtendBaseWidget(b)
return b
}
24 changes: 24 additions & 0 deletions cmd/fyne_demo/screens/window.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,18 @@ func loadDialogGroup(win fyne.Window) *widget.Group {
fileOpened(reader)
}, win)
}),
widget.NewButton("File Open With Filter (only show txt or png)", func() {
fd := dialog.NewFileOpen(func(reader fyne.FileReadCloser, err error) {
if err != nil {
dialog.ShowError(err, win)
return
}

fileOpened(reader)
}, win)
fd.SetFilter(dialog.NewExtensionFileFilter([]string{".png", ".txt"}))
fd.Show()
}),
widget.NewButton("File Save", func() {
dialog.ShowFileSave(func(writer fyne.FileWriteCloser, err error) {
if err != nil {
Expand All @@ -155,6 +167,18 @@ func loadDialogGroup(win fyne.Window) *widget.Group {
fileSaved(writer)
}, win)
}),
widget.NewButton("File Save With Filter (only show images)", func() {
fd := dialog.NewFileSave(func(writer fyne.FileWriteCloser, err error) {
if err != nil {
dialog.ShowError(err, win)
return
}

fileSaved(writer)
}, win)
fd.SetFilter(dialog.NewMimeTypeFileFilter([]string{"image/*"}))
fd.Show()
}),
widget.NewButton("Custom Dialog (Login Form)", func() {
username := widget.NewEntry()
password := widget.NewPasswordEntry()
Expand Down

0 comments on commit 9007448

Please sign in to comment.