Highlight the icon of the current page and reset the original color of the rest
This commit is contained in:
+25
-10
@@ -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 = ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-7
@@ -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())
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user