Add theme management functionality to the application

Implemented a theme management system allowing users to select and persist themes (default, light, dark) in the settings menu.
This commit is contained in:
2025-05-23 20:18:05 +05:00
parent 712ec2f182
commit 82167f042f
8 changed files with 270 additions and 10 deletions

View File

@@ -5,6 +5,7 @@ import (
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/widget"
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel"
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/theme"
"github.com/nicksnyder/go-i18n/v2/i18n"
"image/color"
)
@@ -17,16 +18,19 @@ type ViewSettingContract interface {
}
type SettingForm struct {
Language kernel.Lang
Language kernel.Lang
ThemeInfo theme.ThemeInfoContract
}
type ViewSetting struct {
app kernel.AppContract
app kernel.AppContract
themeService theme.ThemeContract
}
func NewViewSetting(app kernel.AppContract) *ViewSetting {
func NewViewSetting(app kernel.AppContract, themeService theme.ThemeContract) *ViewSetting {
return &ViewSetting{
app: app,
app: app,
themeService: themeService,
}
}
@@ -36,7 +40,8 @@ func (v ViewSetting) Main(save func(*SettingForm) error, cancel func()) {
errorMessage.TextStyle = fyne.TextStyle{Bold: true}
viewSettingForm := &SettingForm{
Language: v.app.GetLocalizerService().GetCurrentLanguage().Lang,
Language: v.app.GetLocalizerService().GetCurrentLanguage().Lang,
ThemeInfo: v.themeService.GetCurrentThemeInfo(),
}
languageItems := []string{}
@@ -45,12 +50,25 @@ func (v ViewSetting) Main(save func(*SettingForm) error, cancel func()) {
languageItems = append(languageItems, language.Title)
langByTitle[language.Title] = language
}
selectLanguages := widget.NewSelect(languageItems, func(s string) {
selectLanguage := widget.NewSelect(languageItems, func(s string) {
if lang, ok := langByTitle[s]; ok {
viewSettingForm.Language = lang
}
})
selectLanguages.Selected = v.app.GetLocalizerService().GetCurrentLanguage().Lang.Title
selectLanguage.Selected = v.app.GetLocalizerService().GetCurrentLanguage().Lang.Title
themeItems := []string{}
themeByTitle := map[string]theme.ThemeInfoContract{}
for _, themeInfo := range v.themeService.List() {
themeItems = append(themeItems, themeInfo.GetTitle())
themeByTitle[themeInfo.GetTitle()] = themeInfo
}
selectTheme := widget.NewSelect(themeItems, func(s string) {
if themeInfo, ok := themeByTitle[s]; ok {
viewSettingForm.ThemeInfo = themeInfo
}
})
selectTheme.Selected = v.themeService.GetCurrentThemeInfo().GetTitle()
form := &widget.Form{
Items: []*widget.FormItem{
@@ -58,7 +76,13 @@ func (v ViewSetting) Main(save func(*SettingForm) error, cancel func()) {
Text: v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
MessageID: "menuSettingsLanguage",
}),
Widget: selectLanguages,
Widget: selectLanguage,
},
{
Text: v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
MessageID: "menuSettingsTheme",
}),
Widget: selectTheme,
},
{
Widget: errorMessage,