From 159c127be8524cce73d6fec362258fc2e5e51e99 Mon Sep 17 00:00:00 2001 From: natilou Date: Sun, 24 Dec 2023 17:01:38 -0300 Subject: [PATCH] Highlight the icon of the current page and reset the original color of the rest --- ui/browsing/browsingpane.go | 35 +++++++++++++++++++++++++---------- ui/mainwindow.go | 14 +++++++------- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/ui/browsing/browsingpane.go b/ui/browsing/browsingpane.go index 21559fa..6aab949 100644 --- a/ui/browsing/browsingpane.go +++ b/ui/browsing/browsingpane.go @@ -1,17 +1,16 @@ package browsing import ( - "github.com/dweymouth/supersonic/backend" - "github.com/dweymouth/supersonic/backend/mediaprovider" - "github.com/dweymouth/supersonic/ui/controller" - "github.com/dweymouth/supersonic/ui/layouts" - myTheme "github.com/dweymouth/supersonic/ui/theme" - "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" + "github.com/dweymouth/supersonic/backend" + "github.com/dweymouth/supersonic/backend/mediaprovider" + "github.com/dweymouth/supersonic/ui/controller" + "github.com/dweymouth/supersonic/ui/layouts" + myTheme "github.com/dweymouth/supersonic/ui/theme" ) type Page interface { @@ -62,9 +61,10 @@ type BrowsingPane struct { navBtnsContainer *fyne.Container pageContainer *fyne.Container container *fyne.Container + navBtnsPageMap map[controller.PageName]fyne.Resource } -func NewBrowsingPane(app *backend.App, controller *controller.Controller) *BrowsingPane { +func NewBrowsingPane(app *backend.App, contr *controller.Controller) *BrowsingPane { b := &BrowsingPane{app: app} b.ExtendBaseWidget(b) b.home = widget.NewButtonWithIcon("", theme.HomeIcon(), b.GoHome) @@ -81,9 +81,10 @@ func NewBrowsingPane(app *backend.App, controller *controller.Controller) *Brows p.ShowAtPosition(fyne.NewPos(b.Size().Width-p.MinSize().Width+4, b.navBtnsContainer.MinSize().Height+theme.Padding())) }) - quickSearchBtn := widget.NewButtonWithIcon("", theme.SearchIcon(), controller.ShowQuickSearch) + quickSearchBtn := widget.NewButtonWithIcon("", theme.SearchIcon(), contr.ShowQuickSearch) b.settingsMenu = fyne.NewMenu("") b.navBtnsContainer = container.NewHBox() + b.navBtnsPageMap = map[controller.PageName]fyne.Resource{} b.container = container.NewBorder(container.New( &layouts.MaxPadLayout{PadLeft: -5, PadRight: -5}, container.New(layouts.NewLeftMiddleRightLayout(0), @@ -126,8 +127,11 @@ func (b *BrowsingPane) AddSettingsMenuSeparator() { fyne.NewMenuItemSeparator()) } -func (b *BrowsingPane) AddNavigationButton(icon fyne.Resource, action func()) { - b.navBtnsContainer.Add(widget.NewButtonWithIcon("", icon, action)) +func (b *BrowsingPane) AddNavigationButton(icon fyne.Resource, pageName controller.PageName, action func()) { + // make a copy of the icon, because it can change the color + browsingPaneIcon := theme.NewThemedResource(icon) + b.navBtnsContainer.Add(widget.NewButtonWithIcon("", browsingPaneIcon, action)) + b.navBtnsPageMap[pageName] = browsingPaneIcon } func (b *BrowsingPane) DisableNavigationButtons() { @@ -175,6 +179,7 @@ func (b *BrowsingPane) doSetPage(p Page) bool { } b.pageContainer.Remove(b.curPage) b.pageContainer.Objects[1] = p + b.updateNavBtnsColor(p) b.Refresh() return true } @@ -274,3 +279,13 @@ func (b *BrowsingPane) CurrentPage() controller.Route { func (b *BrowsingPane) CreateRenderer() fyne.WidgetRenderer { return widget.NewSimpleRenderer(b.container) } + +func (b *BrowsingPane) updateNavBtnsColor(p Page) { + for pageName, icon := range b.navBtnsPageMap { + if pageName == p.Route().Page { + icon.(*theme.ThemedResource).ColorName = theme.ColorNamePrimary + } else { + icon.(*theme.ThemedResource).ColorName = "" + } + } +} diff --git a/ui/mainwindow.go b/ui/mainwindow.go index 32af290..9af07d8 100644 --- a/ui/mainwindow.go +++ b/ui/mainwindow.go @@ -216,25 +216,25 @@ func (m *MainWindow) ShowWhatsNewDialog() { } func (m *MainWindow) addNavigationButtons() { - m.BrowsingPane.AddNavigationButton(theme.NowPlayingIcon, func() { + m.BrowsingPane.AddNavigationButton(theme.NowPlayingIcon, controller.NowPlaying, func() { m.Router.NavigateTo(controller.NowPlayingRoute("")) }) - m.BrowsingPane.AddNavigationButton(theme.FavoriteIcon, func() { + m.BrowsingPane.AddNavigationButton(theme.FavoriteIcon, controller.Favorites, func() { m.Router.NavigateTo(controller.FavoritesRoute()) }) - m.BrowsingPane.AddNavigationButton(theme.AlbumIcon, func() { + m.BrowsingPane.AddNavigationButton(theme.AlbumIcon, controller.Albums, func() { m.Router.NavigateTo(controller.AlbumsRoute()) }) - m.BrowsingPane.AddNavigationButton(theme.ArtistIcon, func() { + m.BrowsingPane.AddNavigationButton(theme.ArtistIcon, controller.Artists, func() { m.Router.NavigateTo(controller.ArtistsRoute()) }) - m.BrowsingPane.AddNavigationButton(theme.GenreIcon, func() { + m.BrowsingPane.AddNavigationButton(theme.GenreIcon, controller.Genres, func() { m.Router.NavigateTo(controller.GenresRoute()) }) - m.BrowsingPane.AddNavigationButton(theme.PlaylistIcon, func() { + m.BrowsingPane.AddNavigationButton(theme.PlaylistIcon, controller.Playlists, func() { m.Router.NavigateTo(controller.PlaylistsRoute()) }) - m.BrowsingPane.AddNavigationButton(theme.TracksIcon, func() { + m.BrowsingPane.AddNavigationButton(theme.TracksIcon, controller.Tracks, func() { m.Router.NavigateTo(controller.TracksRoute()) }) }