package view import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/lang" "fyne.io/fyne/v2/storage" "fyne.io/fyne/v2/widget" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/gui/window" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/utils" "image/color" "net/url" "path/filepath" ) func ConfiguringFFmpegUtilities( window window.WindowContract, currentPathFFmpeg string, currentPathFFprobe string, currentPathFFplay string, save func(ffmpegPath string, ffprobePath string, ffplayPath string) error, cancel func(), donwloadFFmpeg fyne.CanvasObject, ) fyne.CanvasObject { errorMessage := canvas.NewText("", color.RGBA{R: 255, G: 0, B: 0, A: 255}) errorMessage.TextSize = 16 errorMessage.TextStyle = fyne.TextStyle{Bold: true} link := widget.NewHyperlink("https://ffmpeg.org/download.html", &url.URL{ Scheme: "https", Host: "ffmpeg.org", Path: "download.html", }) ffmpegPath, buttonFFmpeg, buttonFFmpegMessage := configuringFFmpegUtilitiesButtonSelectFile(window, currentPathFFmpeg) ffprobePath, buttonFFprobe, buttonFFprobeMessage := configuringFFmpegUtilitiesButtonSelectFile(window, currentPathFFprobe) ffplayPath, buttonFFplay, buttonFFplayMessage := configuringFFmpegUtilitiesButtonSelectFile(window, currentPathFFplay) form := &widget.Form{ Items: []*widget.FormItem{ { Text: lang.L("titleDownloadLink"), Widget: link, }, { Text: lang.L("pathToFfmpeg"), Widget: buttonFFmpeg, }, { Widget: container.NewHScroll(buttonFFmpegMessage), }, { Text: lang.L("pathToFfprobe"), Widget: buttonFFprobe, }, { Widget: container.NewHScroll(buttonFFprobeMessage), }, { Text: lang.L("pathToFfplay"), Widget: buttonFFplay, }, { Widget: container.NewHScroll(buttonFFplayMessage), }, { Widget: container.NewHScroll(errorMessage), }, }, SubmitText: lang.L("save"), OnSubmit: func() { err := save(*ffmpegPath, *ffprobePath, *ffplayPath) if err != nil { errorMessage.Text = err.Error() } }, } if cancel != nil { form.OnCancel = cancel form.CancelText = lang.L("cancel") } selectFFPathTitle := lang.L("selectFFPathTitle") return widget.NewCard(selectFFPathTitle, "", container.NewVBox( form, donwloadFFmpeg, )) } func configuringFFmpegUtilitiesButtonSelectFile(window window.WindowContract, path string) (filePath *string, button *widget.Button, buttonMessage *canvas.Text) { filePath = &path buttonMessage = canvas.NewText(path, color.RGBA{R: 49, G: 127, B: 114, A: 255}) buttonMessage.TextSize = 16 buttonMessage.TextStyle = fyne.TextStyle{Bold: true} buttonTitle := lang.L("choose") var locationURI fyne.ListableURI if len(path) > 0 { listableURI := storage.NewFileURI(filepath.Dir(path)) locationURI, _ = storage.ListerForURI(listableURI) } button = widget.NewButton(buttonTitle, func() { window.NewFileOpen(func(r fyne.URIReadCloser, err error) { if err != nil { buttonMessage.Text = err.Error() utils.SetStringErrorStyle(buttonMessage) return } if r == nil { return } path = r.URI().Path() buttonMessage.Text = r.URI().Path() utils.SetStringSuccessStyle(buttonMessage) listableURI := storage.NewFileURI(filepath.Dir(r.URI().Path())) locationURI, _ = storage.ListerForURI(listableURI) }, locationURI) }) return filePath, button, buttonMessage }