diff --git a/docs/PRE-RELEASE-TASKS.md b/docs/PRE-RELEASE-TASKS.md index c0c6882..8a696e5 100644 --- a/docs/PRE-RELEASE-TASKS.md +++ b/docs/PRE-RELEASE-TASKS.md @@ -102,7 +102,7 @@ These land together because both edit `domain/job.go` and `storage/store.go`. ### Phase 4 — Notifications + Command browse - [x] P4.1 — Failure notifications -- [ ] P4.2 — Command Browse button +- [x] P4.2 — Command Browse button ### Phase 5 — Icons - [ ] P5.1 — Embed small icon + `IconSmall()` diff --git a/src/ui/job_dialog.go b/src/ui/job_dialog.go index e807af3..333bcac 100644 --- a/src/ui/job_dialog.go +++ b/src/ui/job_dialog.go @@ -7,7 +7,9 @@ import ( "gitea.mixdep.ru/mix/gosentry/src/domain" "fyne.io/fyne/v2" + "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/dialog" + "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" ) @@ -27,6 +29,10 @@ func showJobDialog(w fyne.Window, title string, current job, onSave func(job)) { commandEntry := widget.NewEntry() commandEntry.SetPlaceHolder(`C:\Program Files\App\App.exe`) commandEntry.SetText(current.Command) + commandBrowse := widget.NewButtonWithIcon("Browse", theme.FolderOpenIcon(), func() { + chooseFile(w, commandEntry) + }) + commandRow := container.NewBorder(nil, nil, nil, commandBrowse, commandEntry) argumentsEntry := widget.NewMultiLineEntry() argumentsEntry.SetPlaceHolder(`D:\Local\Jobs\Auto.ffs_batch`) argumentsEntry.SetText(current.Arguments) @@ -43,7 +49,7 @@ func showJobDialog(w fyne.Window, title string, current job, onSave func(job)) { widget.NewFormItem("Name", name), widget.NewFormItem("Folder", folderEntry), widget.NewFormItem("Schedule", scheduleEntry), - widget.NewFormItem("Command", commandEntry), + widget.NewFormItem("Command", commandRow), widget.NewFormItem("Arguments", argumentsEntry), widget.NewFormItem("", startOnly), widget.NewFormItem("", enabled), diff --git a/src/ui/settings_view.go b/src/ui/settings_view.go index 98ef0fe..cd1439a 100644 --- a/src/ui/settings_view.go +++ b/src/ui/settings_view.go @@ -172,6 +172,17 @@ func mustParseURL(raw string) *url.URL { return parsed } +func chooseFile(w fyne.Window, target *widget.Entry) { + fileDialog := dialog.NewFileOpen(func(uri fyne.URIReadCloser, err error) { + if err != nil || uri == nil { + return + } + target.SetText(uri.URI().Path()) + }, w) + fileDialog.Resize(fyne.NewSize(900, 640)) + fileDialog.Show() +} + func chooseFolder(w fyne.Window, target *widget.Entry) { folderDialog := dialog.NewFolderOpen(func(uri fyne.ListableURI, err error) { if err != nil || uri == nil {