add UI for system tray settings
This commit is contained in:
@@ -12,7 +12,9 @@ import (
|
||||
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/container"
|
||||
"fyne.io/fyne/v2/data/binding"
|
||||
"fyne.io/fyne/v2/layout"
|
||||
"fyne.io/fyne/v2/theme"
|
||||
"fyne.io/fyne/v2/widget"
|
||||
)
|
||||
|
||||
@@ -28,6 +30,7 @@ type SettingsDialog struct {
|
||||
|
||||
config *backend.Config
|
||||
audioDevices []player.AudioDevice
|
||||
promptText *widget.RichText
|
||||
|
||||
content fyne.CanvasObject
|
||||
}
|
||||
@@ -41,8 +44,9 @@ func NewSettingsDialog(config *backend.Config, audioDeviceList []player.AudioDev
|
||||
s.createGeneralTab(),
|
||||
s.createPlaybackTab(),
|
||||
)
|
||||
s.promptText = widget.NewRichTextWithText("")
|
||||
s.content = container.NewVBox(tabs, widget.NewSeparator(),
|
||||
container.NewHBox(layout.NewSpacer(), widget.NewButton("Close", func() {
|
||||
container.NewHBox(s.promptText, layout.NewSpacer(), widget.NewButton("Close", func() {
|
||||
if s.OnDismiss != nil {
|
||||
s.OnDismiss()
|
||||
}
|
||||
@@ -52,6 +56,28 @@ func NewSettingsDialog(config *backend.Config, audioDeviceList []player.AudioDev
|
||||
}
|
||||
|
||||
func (s *SettingsDialog) createGeneralTab() *container.TabItem {
|
||||
closeToTray := widget.NewCheckWithData("Close to system tray",
|
||||
binding.BindBool(&s.config.Application.CloseToSystemTray))
|
||||
if !s.config.Application.EnableSystemTray {
|
||||
closeToTray.Disable()
|
||||
}
|
||||
systemTrayEnable := widget.NewCheck("Enable system tray", func(val bool) {
|
||||
s.config.Application.EnableSystemTray = val
|
||||
// TODO: see https://github.com/fyne-io/fyne/issues/3788
|
||||
// Once Fyne supports removing/hiding an existing system tray menu,
|
||||
// the restart required prompt can be removed and this dialog
|
||||
// can expose a callback for the Controller to show/hide the system tray menu.
|
||||
s.setRestartRequired()
|
||||
if val {
|
||||
closeToTray.Enable()
|
||||
} else {
|
||||
closeToTray.Disable()
|
||||
}
|
||||
})
|
||||
systemTrayEnable.Checked = s.config.Application.EnableSystemTray
|
||||
|
||||
// Scrobble settings
|
||||
|
||||
twoDigitValidator := func(text string, r rune) bool {
|
||||
return unicode.IsDigit(r) && len(text) < 2
|
||||
}
|
||||
@@ -122,6 +148,10 @@ func (s *SettingsDialog) createGeneralTab() *container.TabItem {
|
||||
scrobbleEnabled.Checked = s.config.Scrobbling.Enabled
|
||||
|
||||
return container.NewTabItem("General", container.NewVBox(
|
||||
systemTrayEnable,
|
||||
closeToTray,
|
||||
s.newSectionSeparator(),
|
||||
|
||||
widget.NewRichText(&widget.TextSegment{Text: "Scrobbling", Style: boldStyle}),
|
||||
scrobbleEnabled,
|
||||
container.NewHBox(
|
||||
@@ -217,7 +247,8 @@ func (s *SettingsDialog) createPlaybackTab() *container.TabItem {
|
||||
widget.NewLabel("Audio device"), container.NewBorder(nil, nil, nil, util.NewHSpace(70), deviceSelect),
|
||||
layout.NewSpacer(), container.NewHBox(audioExclusive, layout.NewSpacer()),
|
||||
)),
|
||||
container.New(&layouts.MaxPadLayout{PadLeft: 15, PadRight: 15}, widget.NewSeparator()),
|
||||
s.newSectionSeparator(),
|
||||
|
||||
widget.NewRichText(&widget.TextSegment{Text: "ReplayGain", Style: boldStyle}),
|
||||
container.New(layout.NewFormLayout(),
|
||||
widget.NewLabel("ReplayGain mode"), container.NewGridWithColumns(2, replayGainSelect),
|
||||
@@ -227,6 +258,20 @@ func (s *SettingsDialog) createPlaybackTab() *container.TabItem {
|
||||
))
|
||||
}
|
||||
|
||||
func (s *SettingsDialog) setRestartRequired() {
|
||||
ts := s.promptText.Segments[0].(*widget.TextSegment)
|
||||
if ts.Text != "" {
|
||||
return
|
||||
}
|
||||
ts.Text = "Restart required"
|
||||
ts.Style.ColorName = theme.ColorNameError
|
||||
s.promptText.Refresh()
|
||||
}
|
||||
|
||||
func (s *SettingsDialog) newSectionSeparator() fyne.CanvasObject {
|
||||
return container.New(&layouts.MaxPadLayout{PadLeft: 15, PadRight: 15}, widget.NewSeparator())
|
||||
}
|
||||
|
||||
func (s *SettingsDialog) onReplayGainSettingsChanged() {
|
||||
if s.OnReplayGainSettingsChanged != nil {
|
||||
s.OnReplayGainSettingsChanged()
|
||||
|
||||
Reference in New Issue
Block a user