add history and navigation controls
This commit is contained in:
+36
-2
@@ -8,6 +8,7 @@ import (
|
|||||||
|
|
||||||
"fyne.io/fyne/v2"
|
"fyne.io/fyne/v2"
|
||||||
"fyne.io/fyne/v2/container"
|
"fyne.io/fyne/v2/container"
|
||||||
|
"fyne.io/fyne/v2/theme"
|
||||||
"fyne.io/fyne/v2/widget"
|
"fyne.io/fyne/v2/widget"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -28,11 +29,17 @@ type BrowsingPane struct {
|
|||||||
|
|
||||||
app *backend.App
|
app *backend.App
|
||||||
|
|
||||||
|
curPage Page
|
||||||
|
|
||||||
|
forward *widget.Button
|
||||||
|
back *widget.Button
|
||||||
|
history []Page
|
||||||
|
historyIdx int
|
||||||
|
|
||||||
searchBar *widgets.SearchEntry
|
searchBar *widgets.SearchEntry
|
||||||
pendingSearchLock sync.Mutex
|
pendingSearchLock sync.Mutex
|
||||||
pendingSearch bool
|
pendingSearch bool
|
||||||
searchGoroutine bool
|
searchGoroutine bool
|
||||||
curPage Page
|
|
||||||
|
|
||||||
container *fyne.Container
|
container *fyne.Container
|
||||||
}
|
}
|
||||||
@@ -46,14 +53,21 @@ func NewBrowsingPane(app *backend.App) *BrowsingPane {
|
|||||||
b.ExtendBaseWidget(b)
|
b.ExtendBaseWidget(b)
|
||||||
b.searchBar = widgets.NewSearchEntry()
|
b.searchBar = widgets.NewSearchEntry()
|
||||||
b.searchBar.OnTextChanged = b.onSearchTextChanged
|
b.searchBar.OnTextChanged = b.onSearchTextChanged
|
||||||
|
b.back = widget.NewButtonWithIcon("", theme.NavigateBackIcon(), b.GoBack)
|
||||||
|
b.forward = widget.NewButtonWithIcon("", theme.NavigateNextIcon(), b.GoForward)
|
||||||
b.curPage = &blankPage{}
|
b.curPage = &blankPage{}
|
||||||
b.container = container.NewBorder(
|
b.container = container.NewBorder(
|
||||||
container.NewHBox(widgets.NewHSpace(15), b.searchBar),
|
container.NewHBox(b.back, b.forward, b.searchBar),
|
||||||
nil, nil, nil, b.curPage)
|
nil, nil, nil, b.curPage)
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *BrowsingPane) SetPage(p Page) {
|
func (b *BrowsingPane) SetPage(p Page) {
|
||||||
|
b.addPageToHistory(p)
|
||||||
|
b.doSetPage(p)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BrowsingPane) doSetPage(p Page) {
|
||||||
b.curPage = p
|
b.curPage = p
|
||||||
if pa, ok := p.(CanPlayAlbum); ok {
|
if pa, ok := p.(CanPlayAlbum); ok {
|
||||||
pa.SetPlayAlbumCallback(func(albumID string) {
|
pa.SetPlayAlbumCallback(func(albumID string) {
|
||||||
@@ -66,6 +80,26 @@ func (b *BrowsingPane) SetPage(p Page) {
|
|||||||
b.Refresh()
|
b.Refresh()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (b *BrowsingPane) addPageToHistory(p Page) {
|
||||||
|
b.history = b.history[:b.historyIdx]
|
||||||
|
b.history = append(b.history, p)
|
||||||
|
b.historyIdx++
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BrowsingPane) GoBack() {
|
||||||
|
if b.historyIdx > 1 {
|
||||||
|
b.historyIdx -= 1
|
||||||
|
b.doSetPage(b.history[b.historyIdx-1])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BrowsingPane) GoForward() {
|
||||||
|
if b.historyIdx < len(b.history) {
|
||||||
|
b.historyIdx++
|
||||||
|
b.doSetPage(b.history[b.historyIdx-1])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (b *BrowsingPane) onSearchTextChanged(text string) {
|
func (b *BrowsingPane) onSearchTextChanged(text string) {
|
||||||
if text == "" {
|
if text == "" {
|
||||||
b.sendSearch("")
|
b.sendSearch("")
|
||||||
|
|||||||
+1
-1
@@ -40,7 +40,7 @@ func NewMainWindow(fyneApp fyne.App, appName string, app *backend.App) MainWindo
|
|||||||
m.Window.SetTitle(song.Title)
|
m.Window.SetTitle(song.Title)
|
||||||
})
|
})
|
||||||
app.ServerManager.OnServerConnected(func() {
|
app.ServerManager.OnServerConnected(func() {
|
||||||
m.Router.OpenRoute(AlbumsRoute(backend.AlbumSortFrequentlyPlayed))
|
m.Router.OpenRoute(AlbumsRoute(backend.AlbumSortRecentlyAdded))
|
||||||
})
|
})
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user