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:
@@ -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,
|
||||
|
Reference in New Issue
Block a user