mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2025-12-11 20:58:13 +08:00
186 lines
4.7 KiB
Go
186 lines
4.7 KiB
Go
package tutorials
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"image/color"
|
|
"io/ioutil"
|
|
"log"
|
|
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/canvas"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/data/validation"
|
|
"fyne.io/fyne/v2/dialog"
|
|
"fyne.io/fyne/v2/storage"
|
|
"fyne.io/fyne/v2/theme"
|
|
"fyne.io/fyne/v2/widget"
|
|
)
|
|
|
|
func confirmCallback(response bool) {
|
|
fmt.Println("Responded with", response)
|
|
}
|
|
|
|
func colorPicked(c color.Color, w fyne.Window) {
|
|
log.Println("Color picked:", c)
|
|
rectangle := canvas.NewRectangle(c)
|
|
size := 2 * theme.IconInlineSize()
|
|
rectangle.SetMinSize(fyne.NewSize(size, size))
|
|
dialog.ShowCustom("Color Picked", "Ok", rectangle, w)
|
|
}
|
|
|
|
// dialogScreen loads demos of the dialogs we support
|
|
func dialogScreen(win fyne.Window) fyne.CanvasObject {
|
|
return container.NewVScroll(container.NewVBox(
|
|
widget.NewButton("Info", func() {
|
|
dialog.ShowInformation("Information", "You should know this thing...", win)
|
|
}),
|
|
widget.NewButton("Error", func() {
|
|
err := errors.New("a dummy error message")
|
|
dialog.ShowError(err, win)
|
|
}),
|
|
widget.NewButton("Confirm", func() {
|
|
cnf := dialog.NewConfirm("Confirmation", "Are you enjoying this demo?", confirmCallback, win)
|
|
cnf.SetDismissText("Nah")
|
|
cnf.SetConfirmText("Oh Yes!")
|
|
cnf.Show()
|
|
}),
|
|
widget.NewButton("File Open With Filter (.jpg or .png)", func() {
|
|
fd := dialog.NewFileOpen(func(reader fyne.URIReadCloser, err error) {
|
|
if err != nil {
|
|
dialog.ShowError(err, win)
|
|
return
|
|
}
|
|
if reader == nil {
|
|
log.Println("Cancelled")
|
|
return
|
|
}
|
|
|
|
imageOpened(reader)
|
|
}, win)
|
|
fd.SetFilter(storage.NewExtensionFileFilter([]string{".png", ".jpg", ".jpeg"}))
|
|
fd.Show()
|
|
}),
|
|
widget.NewButton("File Save", func() {
|
|
dialog.ShowFileSave(func(writer fyne.URIWriteCloser, err error) {
|
|
if err != nil {
|
|
dialog.ShowError(err, win)
|
|
return
|
|
}
|
|
if writer == nil {
|
|
log.Println("Cancelled")
|
|
return
|
|
}
|
|
|
|
fileSaved(writer, win)
|
|
}, win)
|
|
}),
|
|
widget.NewButton("Folder Open", func() {
|
|
dialog.ShowFolderOpen(func(list fyne.ListableURI, err error) {
|
|
if err != nil {
|
|
dialog.ShowError(err, win)
|
|
return
|
|
}
|
|
if list == nil {
|
|
log.Println("Cancelled")
|
|
return
|
|
}
|
|
|
|
children, err := list.List()
|
|
if err != nil {
|
|
dialog.ShowError(err, win)
|
|
return
|
|
}
|
|
out := fmt.Sprintf("Folder %s (%d children):\n%s", list.Name(), len(children), list.String())
|
|
dialog.ShowInformation("Folder Open", out, win)
|
|
}, win)
|
|
}),
|
|
widget.NewButton("Color Picker", func() {
|
|
picker := dialog.NewColorPicker("Pick a Color", "What is your favorite color?", func(c color.Color) {
|
|
colorPicked(c, win)
|
|
}, win)
|
|
picker.Show()
|
|
}),
|
|
widget.NewButton("Advanced Color Picker", func() {
|
|
picker := dialog.NewColorPicker("Pick a Color", "What is your favorite color?", func(c color.Color) {
|
|
colorPicked(c, win)
|
|
}, win)
|
|
picker.Advanced = true
|
|
picker.Show()
|
|
}),
|
|
widget.NewButton("Form Dialog (Login Form)", func() {
|
|
username := widget.NewEntry()
|
|
username.Validator = validation.NewRegexp(`^[A-Za-z0-9_-]+$`, "username can only contain letters, numbers, '_', and '-'")
|
|
password := widget.NewPasswordEntry()
|
|
password.Validator = validation.NewRegexp(`^[A-Za-z0-9_-]+$`, "password can only contain letters, numbers, '_', and '-'")
|
|
remember := false
|
|
items := []*widget.FormItem{
|
|
widget.NewFormItem("Username", username),
|
|
widget.NewFormItem("Password", password),
|
|
widget.NewFormItem("Remember me", widget.NewCheck("", func(checked bool) {
|
|
remember = checked
|
|
})),
|
|
}
|
|
|
|
dialog.ShowForm("Login...", "Log In", "Cancel", items, func(b bool) {
|
|
if !b {
|
|
return
|
|
}
|
|
var rememberText string
|
|
if remember {
|
|
rememberText = "and remember this login"
|
|
}
|
|
|
|
log.Println("Please Authenticate", username.Text, password.Text, rememberText)
|
|
}, win)
|
|
}),
|
|
))
|
|
}
|
|
|
|
func imageOpened(f fyne.URIReadCloser) {
|
|
if f == nil {
|
|
log.Println("Cancelled")
|
|
return
|
|
}
|
|
defer f.Close()
|
|
|
|
showImage(f)
|
|
}
|
|
|
|
func fileSaved(f fyne.URIWriteCloser, w fyne.Window) {
|
|
defer f.Close()
|
|
_, err := f.Write([]byte("Written by Fyne demo\n"))
|
|
if err != nil {
|
|
dialog.ShowError(err, w)
|
|
}
|
|
err = f.Close()
|
|
if err != nil {
|
|
dialog.ShowError(err, w)
|
|
}
|
|
log.Println("Saved to...", f.URI())
|
|
}
|
|
|
|
func loadImage(f fyne.URIReadCloser) *canvas.Image {
|
|
data, err := ioutil.ReadAll(f)
|
|
if err != nil {
|
|
fyne.LogError("Failed to load image data", err)
|
|
return nil
|
|
}
|
|
res := fyne.NewStaticResource(f.URI().Name(), data)
|
|
|
|
return canvas.NewImageFromResource(res)
|
|
}
|
|
|
|
func showImage(f fyne.URIReadCloser) {
|
|
img := loadImage(f)
|
|
if img == nil {
|
|
return
|
|
}
|
|
img.FillMode = canvas.ImageFillOriginal
|
|
|
|
w := fyne.CurrentApp().NewWindow(f.URI().Name())
|
|
w.SetContent(container.NewScroll(img))
|
|
w.Resize(fyne.NewSize(320, 240))
|
|
w.Show()
|
|
}
|