package menu import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/widget" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel" "github.com/nicksnyder/go-i18n/v2/i18n" "image/color" ) type ViewSettingContract interface { Main( save func(*SettingForm) error, cancel func(), ) } type SettingForm struct { Language kernel.Lang } type ViewSetting struct { app kernel.AppContract } func NewViewSetting(app kernel.AppContract) *ViewSetting { return &ViewSetting{ app: app, } } func (v ViewSetting) Main(save func(*SettingForm) error, cancel func()) { errorMessage := canvas.NewText("", color.RGBA{R: 255, G: 0, B: 0, A: 255}) errorMessage.TextSize = 16 errorMessage.TextStyle = fyne.TextStyle{Bold: true} viewSettingForm := &SettingForm{ Language: v.app.GetLocalizerService().GetCurrentLanguage().Lang, } languageItems := []string{} langByTitle := map[string]kernel.Lang{} for _, language := range v.app.GetLocalizerService().GetLanguages() { languageItems = append(languageItems, language.Title) langByTitle[language.Title] = language } selectLanguages := widget.NewSelect(languageItems, func(s string) { if lang, ok := langByTitle[s]; ok { viewSettingForm.Language = lang } }) selectLanguages.Selected = v.app.GetLocalizerService().GetCurrentLanguage().Lang.Title form := &widget.Form{ Items: []*widget.FormItem{ { Text: v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ MessageID: "menuSettingsLanguage", }), Widget: selectLanguages, }, { Widget: errorMessage, }, }, SubmitText: v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ MessageID: "save", }), OnSubmit: func() { err := save(viewSettingForm) if err != nil { errorMessage.Text = err.Error() } }, } if cancel != nil { form.OnCancel = cancel form.CancelText = v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ MessageID: "cancel", }) } messageHead := v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ MessageID: "settings", }) v.app.GetWindow().SetContent(widget.NewCard(messageHead, "", form)) }