make track title in bottom panel link to Now Playing page
This commit is contained in:
@@ -61,6 +61,9 @@ func NewBottomPanel(p *player.Player, contr *controller.Controller) *BottomPanel
|
|||||||
bp.NowPlaying.OnArtistNameTapped(func() {
|
bp.NowPlaying.OnArtistNameTapped(func() {
|
||||||
contr.NavigateTo(controller.ArtistRoute(bp.playbackManager.NowPlaying().ArtistID))
|
contr.NavigateTo(controller.ArtistRoute(bp.playbackManager.NowPlaying().ArtistID))
|
||||||
})
|
})
|
||||||
|
bp.NowPlaying.OnTrackNameTapped(func() {
|
||||||
|
contr.NavigateTo(controller.NowPlayingRoute(bp.playbackManager.NowPlaying().ID))
|
||||||
|
})
|
||||||
bp.Controls = widgets.NewPlayerControls()
|
bp.Controls = widgets.NewPlayerControls()
|
||||||
bp.Controls.OnPlayPause(func() {
|
bp.Controls.OnPlayPause(func() {
|
||||||
p.PlayPause()
|
p.PlayPause()
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ type nowPlayingPageState struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewNowPlayingPage(
|
func NewNowPlayingPage(
|
||||||
|
highlightedTrackID string,
|
||||||
contr *controller.Controller,
|
contr *controller.Controller,
|
||||||
conf *backend.NowPlayingPageConfig,
|
conf *backend.NowPlayingPageConfig,
|
||||||
sm *backend.ServerManager,
|
sm *backend.ServerManager,
|
||||||
@@ -56,7 +57,7 @@ func NewNowPlayingPage(
|
|||||||
a.title.Segments[0].(*widget.TextSegment).Style.SizeName = widget.RichTextStyleHeading.SizeName
|
a.title.Segments[0].(*widget.TextSegment).Style.SizeName = widget.RichTextStyleHeading.SizeName
|
||||||
a.container = container.New(&layouts.MaxPadLayout{PadLeft: 15, PadRight: 15, PadTop: 5, PadBottom: 15},
|
a.container = container.New(&layouts.MaxPadLayout{PadLeft: 15, PadRight: 15, PadTop: 5, PadBottom: 15},
|
||||||
container.NewBorder(a.title, nil, nil, nil, a.tracklist))
|
container.NewBorder(a.title, nil, nil, nil, a.tracklist))
|
||||||
a.load()
|
a.load(highlightedTrackID)
|
||||||
return a
|
return a
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,7 +71,7 @@ func (a *NowPlayingPage) Save() SavedPage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *NowPlayingPage) Route() controller.Route {
|
func (a *NowPlayingPage) Route() controller.Route {
|
||||||
return controller.NowPlayingRoute()
|
return controller.NowPlayingRoute("")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *NowPlayingPage) Tapped(*fyne.PointEvent) {
|
func (a *NowPlayingPage) Tapped(*fyne.PointEvent) {
|
||||||
@@ -92,7 +93,7 @@ func (a *NowPlayingPage) OnSongChange(song *subsonic.Child, lastScrobbledIfAny *
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *NowPlayingPage) Reload() {
|
func (a *NowPlayingPage) Reload() {
|
||||||
a.load()
|
a.load("")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *NowPlayingPage) onPlayTrackAt(tracknum int) {
|
func (a *NowPlayingPage) onPlayTrackAt(tracknum int) {
|
||||||
@@ -106,12 +107,15 @@ func (a *NowPlayingPage) onRemoveSelectedFromQueue() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// does not make calls to server - can safely be run in UI callbacks
|
// does not make calls to server - can safely be run in UI callbacks
|
||||||
func (a *NowPlayingPage) load() {
|
func (a *NowPlayingPage) load(highlightedTrackID string) {
|
||||||
queue := a.pm.GetPlayQueue()
|
queue := a.pm.GetPlayQueue()
|
||||||
a.tracklist.Tracks = queue
|
a.tracklist.Tracks = queue
|
||||||
a.tracklist.SetNowPlaying(a.nowPlayingID)
|
a.tracklist.SetNowPlaying(a.nowPlayingID)
|
||||||
|
if highlightedTrackID != "" {
|
||||||
|
a.tracklist.SelectAndScrollToTrack(highlightedTrackID)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *nowPlayingPageState) Restore() Page {
|
func (s *nowPlayingPageState) Restore() Page {
|
||||||
return NewNowPlayingPage(s.contr, s.conf, s.sm, s.pm)
|
return NewNowPlayingPage("", s.contr, s.conf, s.sm, s.pm)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ func (r Router) CreatePage(rte controller.Route) Page {
|
|||||||
case controller.Genres:
|
case controller.Genres:
|
||||||
return NewArtistsGenresPage(true, r.Controller, r.App.ServerManager)
|
return NewArtistsGenresPage(true, r.Controller, r.App.ServerManager)
|
||||||
case controller.NowPlaying:
|
case controller.NowPlaying:
|
||||||
return NewNowPlayingPage(r.Controller, &r.App.Config.NowPlayingPage, r.App.ServerManager, r.App.PlaybackManager)
|
return NewNowPlayingPage(rte.Arg, r.Controller, &r.App.Config.NowPlayingPage, r.App.ServerManager, r.App.PlaybackManager)
|
||||||
case controller.Playlist:
|
case controller.Playlist:
|
||||||
return NewPlaylistPage(rte.Arg, &r.App.Config.PlaylistPage, r.Controller, r.App.ServerManager, r.App.PlaybackManager, r.App.ImageManager)
|
return NewPlaylistPage(rte.Arg, &r.App.Config.PlaylistPage, r.Controller, r.App.ServerManager, r.App.PlaybackManager, r.App.ImageManager)
|
||||||
case controller.Playlists:
|
case controller.Playlists:
|
||||||
|
|||||||
@@ -61,6 +61,6 @@ func ArtistsRoute() Route {
|
|||||||
return Route{Page: Artists}
|
return Route{Page: Artists}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NowPlayingRoute() Route {
|
func NowPlayingRoute(highlightedTrackID string) Route {
|
||||||
return Route{Page: NowPlaying}
|
return Route{Page: NowPlaying, Arg: highlightedTrackID}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -179,7 +179,7 @@ func (m *MainWindow) ShowNewVersionDialog(appName, versionTag string) {
|
|||||||
|
|
||||||
func (m *MainWindow) addNavigationButtons() {
|
func (m *MainWindow) addNavigationButtons() {
|
||||||
m.BrowsingPane.AddNavigationButton(res.ResHeadphonesInvertPng, func() {
|
m.BrowsingPane.AddNavigationButton(res.ResHeadphonesInvertPng, func() {
|
||||||
m.Router.NavigateTo(controller.NowPlayingRoute())
|
m.Router.NavigateTo(controller.NowPlayingRoute(""))
|
||||||
})
|
})
|
||||||
m.BrowsingPane.AddNavigationButton(res.ResHeartFilledInvertPng, func() {
|
m.BrowsingPane.AddNavigationButton(res.ResHeartFilledInvertPng, func() {
|
||||||
m.Router.NavigateTo(controller.FavoritesRoute())
|
m.Router.NavigateTo(controller.FavoritesRoute())
|
||||||
|
|||||||
@@ -90,6 +90,10 @@ func (c *CustomHyperlink) SetText(text string) {
|
|||||||
c.Refresh()
|
c.Refresh()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *CustomHyperlink) SetTextStyle(style fyne.TextStyle) {
|
||||||
|
c.h.TextStyle = style
|
||||||
|
}
|
||||||
|
|
||||||
func (c *CustomHyperlink) Resize(size fyne.Size) {
|
func (c *CustomHyperlink) Resize(size fyne.Size) {
|
||||||
c.h.MaxWidth = size.Width
|
c.h.MaxWidth = size.Width
|
||||||
c.BaseWidget.Resize(size)
|
c.BaseWidget.Resize(size)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import (
|
|||||||
type NowPlayingCard struct {
|
type NowPlayingCard struct {
|
||||||
widget.BaseWidget
|
widget.BaseWidget
|
||||||
|
|
||||||
trackName *widget.Label
|
trackName *CustomHyperlink
|
||||||
artistName *CustomHyperlink
|
artistName *CustomHyperlink
|
||||||
albumName *CustomHyperlink
|
albumName *CustomHyperlink
|
||||||
cover *TappableImage
|
cover *TappableImage
|
||||||
@@ -27,7 +27,7 @@ type NowPlayingCard struct {
|
|||||||
|
|
||||||
func NewNowPlayingCard() *NowPlayingCard {
|
func NewNowPlayingCard() *NowPlayingCard {
|
||||||
n := &NowPlayingCard{
|
n := &NowPlayingCard{
|
||||||
trackName: widget.NewLabel(""),
|
trackName: NewCustomHyperlink(),
|
||||||
artistName: NewCustomHyperlink(),
|
artistName: NewCustomHyperlink(),
|
||||||
albumName: NewCustomHyperlink(),
|
albumName: NewCustomHyperlink(),
|
||||||
}
|
}
|
||||||
@@ -35,8 +35,7 @@ func NewNowPlayingCard() *NowPlayingCard {
|
|||||||
n.cover = NewTappableImage(n.onShowCoverImage)
|
n.cover = NewTappableImage(n.onShowCoverImage)
|
||||||
n.artistName.Hidden = true
|
n.artistName.Hidden = true
|
||||||
n.albumName.Hidden = true
|
n.albumName.Hidden = true
|
||||||
n.trackName.Wrapping = fyne.TextTruncate
|
n.trackName.SetTextStyle(fyne.TextStyle{Bold: true})
|
||||||
n.trackName.TextStyle = fyne.TextStyle{Bold: true}
|
|
||||||
n.cover.SetMinSize(fyne.NewSize(85, 85))
|
n.cover.SetMinSize(fyne.NewSize(85, 85))
|
||||||
n.cover.FillMode = canvas.ImageFillContain
|
n.cover.FillMode = canvas.ImageFillContain
|
||||||
|
|
||||||
@@ -59,7 +58,7 @@ func (n *NowPlayingCard) CreateRenderer() fyne.WidgetRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (n *NowPlayingCard) Update(track, artist string, artistNavigable bool, album string, cover image.Image) {
|
func (n *NowPlayingCard) Update(track, artist string, artistNavigable bool, album string, cover image.Image) {
|
||||||
n.trackName.Text = track
|
n.trackName.SetText(track)
|
||||||
n.artistName.SetText(artist)
|
n.artistName.SetText(artist)
|
||||||
n.artistName.Hidden = artist == ""
|
n.artistName.Hidden = artist == ""
|
||||||
n.artistName.Disabled = !artistNavigable
|
n.artistName.Disabled = !artistNavigable
|
||||||
@@ -76,3 +75,7 @@ func (n *NowPlayingCard) OnArtistNameTapped(f func()) {
|
|||||||
func (n *NowPlayingCard) OnAlbumNameTapped(f func()) {
|
func (n *NowPlayingCard) OnAlbumNameTapped(f func()) {
|
||||||
n.albumName.OnTapped = f
|
n.albumName.OnTapped = f
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (n *NowPlayingCard) OnTrackNameTapped(f func()) {
|
||||||
|
n.trackName.OnTapped = f
|
||||||
|
}
|
||||||
|
|||||||
@@ -231,6 +231,22 @@ func (t *Tracklist) UnselectAll() {
|
|||||||
t.list.Refresh()
|
t.list.Refresh()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Tracklist) SelectAndScrollToTrack(trackID string) {
|
||||||
|
t.tracksMutex.RLock()
|
||||||
|
idx := -1
|
||||||
|
for i, tr := range t.Tracks {
|
||||||
|
if tr.ID == trackID {
|
||||||
|
idx = i
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t.tracksMutex.RUnlock()
|
||||||
|
if idx >= 0 {
|
||||||
|
t.list.ScrollTo(idx)
|
||||||
|
t.selectionMgr.Select(idx)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (t *Tracklist) CreateRenderer() fyne.WidgetRenderer {
|
func (t *Tracklist) CreateRenderer() fyne.WidgetRenderer {
|
||||||
return widget.NewSimpleRenderer(t.container)
|
return widget.NewSimpleRenderer(t.container)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user