Remove language selection to a new settings section.

This commit is contained in:
Leonid Nikitin 2025-05-22 21:42:45 +05:00
parent 883bf376b0
commit 712ec2f182
Signed by: kor-elf
GPG Key ID: DAB5355A11C22541
6 changed files with 127 additions and 7 deletions

View File

@ -17,6 +17,7 @@ type MenuHandler struct {
app kernel.AppContract
convertorHandler ConvertorHandlerContract
menuView menu.ViewContract
menuViewSetting menu.ViewSettingContract
localizerView localizer.ViewContract
localizerRepository localizer.RepositoryContract
}
@ -25,6 +26,7 @@ func NewMenuHandler(
app kernel.AppContract,
convertorHandler ConvertorHandlerContract,
menuView menu.ViewContract,
menuViewSetting menu.ViewSettingContract,
localizerView localizer.ViewContract,
localizerRepository localizer.RepositoryContract,
) *MenuHandler {
@ -32,6 +34,7 @@ func NewMenuHandler(
app: app,
convertorHandler: convertorHandler,
menuView: menuView,
menuViewSetting: menuViewSetting,
localizerView: localizerView,
localizerRepository: localizerRepository,
}
@ -53,11 +56,11 @@ func (h MenuHandler) getMenuSettings() *fyne.Menu {
quit.Label = text
})
languageSelection := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
MessageID: "changeLanguage",
}), h.LanguageSelection)
h.app.GetLocalizerService().AddChangeCallback("changeLanguage", func(text string) {
languageSelection.Label = text
settingsSelection := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
MessageID: "settings",
}), h.settingsSelection)
h.app.GetLocalizerService().AddChangeCallback("settings", func(text string) {
settingsSelection.Label = text
})
ffPathSelection := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
@ -69,7 +72,7 @@ func (h MenuHandler) getMenuSettings() *fyne.Menu {
settings := fyne.NewMenu(h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
MessageID: "settings",
}), languageSelection, ffPathSelection, quit)
}), settingsSelection, ffPathSelection, quit)
h.app.GetLocalizerService().AddChangeCallback("settings", func(text string) {
settings.Label = text
settings.Refresh()
@ -140,3 +143,22 @@ func (h MenuHandler) LanguageSelection() {
h.convertorHandler.MainConvertor()
})
}
func (h MenuHandler) settingsSelection() {
save := func(setting *menu.SettingForm) error {
err := h.app.GetLocalizerService().SetCurrentLanguage(setting.Language)
if err != nil {
return err
}
_, err = h.localizerRepository.Save(setting.Language.Code)
if err != nil {
return err
}
h.convertorHandler.MainConvertor()
return nil
}
cancel := func() {
h.convertorHandler.MainConvertor()
}
h.menuViewSetting.Main(save, cancel)
}

View File

@ -422,6 +422,10 @@ other = "License information"
hash = "sha1-359fff328717c05104e51a2d29f05bf1875d26b7"
other = "Licenses from other products used in the program"
[menuSettingsLanguage]
hash = "sha1-ed3f0e507a5b4ed0649d7c768fe0d47413d839ba"
other = "Language"
[or]
hash = "sha1-30bb0333ca1583110e4ced513b5d2455b86f529b"
other = "or"

View File

@ -422,6 +422,10 @@ other = "Лицензия туралы ақпарат"
hash = "sha1-359fff328717c05104e51a2d29f05bf1875d26b7"
other = "Бағдарламада пайдаланылатын басқа өнімдердің лицензиялары"
[menuSettingsLanguage]
hash = "sha1-ed3f0e507a5b4ed0649d7c768fe0d47413d839ba"
other = "Тіл"
[or]
hash = "sha1-30bb0333ca1583110e4ced513b5d2455b86f529b"
other = "немесе"

View File

@ -104,6 +104,7 @@ languageSelectionFormHead = "Переключить язык"
languageSelectionHead = "Выберите язык"
licenseLink = "Сведения о лицензии"
licenseLinkOther = "Лицензии от других продуктов, которые используются в программе"
menuSettingsLanguage = "Язык"
or = "или"
parameterCheckbox = "Включить параметр"
pathToFfmpeg = "Путь к FFmpeg:"

View File

@ -111,7 +111,8 @@ func main() {
localizerRepository := localizer.NewRepository(settingRepository)
menuView := menu.NewView(application)
mainMenu := handler.NewMenuHandler(application, convertorHandler, menuView, localizerView, localizerRepository)
menuSettingView := menu.NewViewSetting(application)
mainMenu := handler.NewMenuHandler(application, convertorHandler, menuView, menuSettingView, localizerView, localizerRepository)
mainHandler := handler.NewMainHandler(application, convertorHandler, mainMenu, localizerRepository)
mainHandler.Start()

88
menu/view_setting.go Normal file
View File

@ -0,0 +1,88 @@
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))
}