Replaced the `i18n` and `toml` dependencies with Fyne's built-in language system for localization management. Updated the `Localizer` implementation to handle translations using JSON files and embed functionality. Simplified language selection and persisted settings via Fyne's preferences API.
144 lines
4.2 KiB
Go
144 lines
4.2 KiB
Go
package handler
|
|
|
|
import (
|
|
"fyne.io/fyne/v2"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/localizer"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/menu"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/theme"
|
|
)
|
|
|
|
type MenuHandlerContract interface {
|
|
GetMainMenu() *fyne.MainMenu
|
|
LanguageSelection()
|
|
}
|
|
|
|
type MenuHandler struct {
|
|
app kernel.AppContract
|
|
convertorHandler ConvertorHandlerContract
|
|
menuView menu.ViewContract
|
|
menuViewSetting menu.ViewSettingContract
|
|
localizerView localizer.ViewContract
|
|
themeService theme.ThemeContract
|
|
}
|
|
|
|
func NewMenuHandler(
|
|
app kernel.AppContract,
|
|
convertorHandler ConvertorHandlerContract,
|
|
menuView menu.ViewContract,
|
|
menuViewSetting menu.ViewSettingContract,
|
|
localizerView localizer.ViewContract,
|
|
themeService theme.ThemeContract,
|
|
) *MenuHandler {
|
|
return &MenuHandler{
|
|
app: app,
|
|
convertorHandler: convertorHandler,
|
|
menuView: menuView,
|
|
menuViewSetting: menuViewSetting,
|
|
localizerView: localizerView,
|
|
themeService: themeService,
|
|
}
|
|
}
|
|
|
|
func (h MenuHandler) GetMainMenu() *fyne.MainMenu {
|
|
settings := h.getMenuSettings()
|
|
help := h.getMenuHelp()
|
|
|
|
return fyne.NewMainMenu(settings, help)
|
|
}
|
|
|
|
func (h MenuHandler) getMenuSettings() *fyne.Menu {
|
|
quit := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage("exit"), nil)
|
|
quit.IsQuit = true
|
|
h.app.GetLocalizerService().AddChangeCallback("exit", func(text string) {
|
|
quit.Label = text
|
|
})
|
|
|
|
settingsSelection := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage("settings"), h.settingsSelection)
|
|
h.app.GetLocalizerService().AddChangeCallback("settings", func(text string) {
|
|
settingsSelection.Label = text
|
|
})
|
|
|
|
ffPathSelection := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage("changeFFPath"), h.convertorHandler.FfPathSelection)
|
|
h.app.GetLocalizerService().AddChangeCallback("changeFFPath", func(text string) {
|
|
ffPathSelection.Label = text
|
|
})
|
|
|
|
settings := fyne.NewMenu(h.app.GetLocalizerService().GetMessage("settings"), settingsSelection, ffPathSelection, quit)
|
|
h.app.GetLocalizerService().AddChangeCallback("settings", func(text string) {
|
|
settings.Label = text
|
|
settings.Refresh()
|
|
})
|
|
|
|
return settings
|
|
}
|
|
|
|
func (h MenuHandler) getMenuHelp() *fyne.Menu {
|
|
about := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage("about"), h.openAbout)
|
|
h.app.GetLocalizerService().AddChangeCallback("about", func(text string) {
|
|
about.Label = text
|
|
})
|
|
|
|
gratitude := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage("gratitude"), h.menuView.Gratitude)
|
|
h.app.GetLocalizerService().AddChangeCallback("gratitude", func(text string) {
|
|
gratitude.Label = text
|
|
})
|
|
|
|
helpFFplay := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage("helpFFplay"), h.menuView.HelpFFplay)
|
|
h.app.GetLocalizerService().AddChangeCallback("helpFFplay", func(text string) {
|
|
helpFFplay.Label = text
|
|
})
|
|
|
|
help := fyne.NewMenu(h.app.GetLocalizerService().GetMessage("help"), helpFFplay, about, gratitude)
|
|
h.app.GetLocalizerService().AddChangeCallback("help", func(text string) {
|
|
help.Label = text
|
|
help.Refresh()
|
|
})
|
|
|
|
return help
|
|
}
|
|
|
|
func (h MenuHandler) openAbout() {
|
|
ffmpeg, err := h.convertorHandler.GetFfmpegVersion()
|
|
if err != nil {
|
|
ffmpeg = h.app.GetLocalizerService().GetMessage("errorFFmpegVersion")
|
|
}
|
|
ffprobe, err := h.convertorHandler.GetFfprobeVersion()
|
|
if err != nil {
|
|
ffprobe = h.app.GetLocalizerService().GetMessage("errorFFprobeVersion")
|
|
}
|
|
ffplay, err := h.convertorHandler.GetFfplayVersion()
|
|
if err != nil {
|
|
ffplay = h.app.GetLocalizerService().GetMessage("errorFFplayVersion")
|
|
}
|
|
|
|
h.menuView.About(ffmpeg, ffprobe, ffplay)
|
|
}
|
|
|
|
func (h MenuHandler) LanguageSelection() {
|
|
h.localizerView.LanguageSelection(func(lang kernel.Lang) {
|
|
h.convertorHandler.MainConvertor()
|
|
})
|
|
}
|
|
|
|
func (h MenuHandler) settingsSelection() {
|
|
save := func(setting *menu.SettingForm) error {
|
|
err := h.app.GetLocalizerService().SetCurrentLanguage(setting.Language, true)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = h.themeService.SetCurrentTheme(setting.ThemeInfo)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
h.convertorHandler.MainConvertor()
|
|
return nil
|
|
}
|
|
cancel := func() {
|
|
h.convertorHandler.MainConvertor()
|
|
}
|
|
h.menuViewSetting.Main(save, cancel)
|
|
}
|