move grid view context menu to GridView instead of GridViewItem for reuse
This commit is contained in:
+37
-19
@@ -76,6 +76,8 @@ type GridView struct {
|
|||||||
GridViewState
|
GridViewState
|
||||||
|
|
||||||
grid *xwidget.GridWrap
|
grid *xwidget.GridWrap
|
||||||
|
menu *widget.PopUpMenu
|
||||||
|
menuGridViewItemId string
|
||||||
}
|
}
|
||||||
|
|
||||||
type GridViewState struct {
|
type GridViewState struct {
|
||||||
@@ -214,16 +216,7 @@ func (g *GridView) createGridWrap() {
|
|||||||
// create func
|
// create func
|
||||||
func() fyne.CanvasObject {
|
func() fyne.CanvasObject {
|
||||||
card := NewGridViewItem(g.Placeholder)
|
card := NewGridViewItem(g.Placeholder)
|
||||||
card.OnPlay = func(shuffle bool) {
|
card.OnPlay = func() { g.onPlay(card.ItemID(), false) }
|
||||||
if g.OnPlay != nil {
|
|
||||||
g.OnPlay(card.ItemID(), shuffle)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
card.OnAddToQueue = func() {
|
|
||||||
if g.OnAddToQueue != nil {
|
|
||||||
g.OnAddToQueue(card.ItemID())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
card.OnShowSecondaryPage = func() {
|
card.OnShowSecondaryPage = func() {
|
||||||
if g.OnShowSecondaryPage != nil {
|
if g.OnShowSecondaryPage != nil {
|
||||||
g.OnShowSecondaryPage(card.SecondaryID())
|
g.OnShowSecondaryPage(card.SecondaryID())
|
||||||
@@ -234,15 +227,8 @@ func (g *GridView) createGridWrap() {
|
|||||||
g.OnShowItemPage(card.ItemID())
|
g.OnShowItemPage(card.ItemID())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
card.OnAddToPlaylist = func() {
|
card.OnShowContextMenu = func(p fyne.Position) {
|
||||||
if g.OnAddToPlaylist != nil {
|
g.showContextMenu(card, p)
|
||||||
g.OnAddToPlaylist(card.ItemID())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
card.OnDownload = func() {
|
|
||||||
if g.OnDownload != nil {
|
|
||||||
g.OnDownload(card.ItemID())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return card
|
return card
|
||||||
},
|
},
|
||||||
@@ -353,6 +339,38 @@ func (g *GridView) fetchMoreItems(count int) {
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *GridView) showContextMenu(card *GridViewItem, pos fyne.Position) {
|
||||||
|
g.menuGridViewItemId = card.ItemID()
|
||||||
|
if g.menu == nil {
|
||||||
|
g.menu = widget.NewPopUpMenu(fyne.NewMenu("",
|
||||||
|
fyne.NewMenuItem("Play", func() { g.onPlay(g.menuGridViewItemId, false) }),
|
||||||
|
fyne.NewMenuItem("Shuffle", func() { g.onPlay(g.menuGridViewItemId, true) }),
|
||||||
|
fyne.NewMenuItem("Add to queue", func() {
|
||||||
|
if g.OnAddToQueue != nil {
|
||||||
|
g.OnAddToQueue(g.menuGridViewItemId)
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
fyne.NewMenuItem("Add to playlist...", func() {
|
||||||
|
if g.OnAddToPlaylist != nil {
|
||||||
|
g.OnAddToPlaylist(g.menuGridViewItemId)
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
fyne.NewMenuItem("Download...", func() {
|
||||||
|
if g.OnDownload != nil {
|
||||||
|
g.OnDownload(g.menuGridViewItemId)
|
||||||
|
}
|
||||||
|
})),
|
||||||
|
fyne.CurrentApp().Driver().CanvasForObject(g))
|
||||||
|
}
|
||||||
|
g.menu.ShowAtPosition(pos)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GridView) onPlay(itemID string, shuffle bool) {
|
||||||
|
if g.OnPlay != nil {
|
||||||
|
g.OnPlay(itemID, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (g *GridView) CreateRenderer() fyne.WidgetRenderer {
|
func (g *GridView) CreateRenderer() fyne.WidgetRenderer {
|
||||||
return widget.NewSimpleRenderer(g.grid)
|
return widget.NewSimpleRenderer(g.grid)
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-44
@@ -136,7 +136,6 @@ type GridViewItem struct {
|
|||||||
secondaryID string
|
secondaryID string
|
||||||
primaryText *CustomHyperlink
|
primaryText *CustomHyperlink
|
||||||
secondaryText *CustomHyperlink
|
secondaryText *CustomHyperlink
|
||||||
menu *widget.PopUpMenu
|
|
||||||
container *fyne.Container
|
container *fyne.Container
|
||||||
|
|
||||||
// updated by GridView
|
// updated by GridView
|
||||||
@@ -146,10 +145,8 @@ type GridViewItem struct {
|
|||||||
PrevID string
|
PrevID string
|
||||||
ImgLoadCancel context.CancelFunc
|
ImgLoadCancel context.CancelFunc
|
||||||
|
|
||||||
OnPlay func(shuffle bool)
|
OnPlay func()
|
||||||
OnAddToQueue func()
|
OnShowContextMenu func(fyne.Position)
|
||||||
OnAddToPlaylist func()
|
|
||||||
OnDownload func()
|
|
||||||
OnShowItemPage func()
|
OnShowItemPage func()
|
||||||
OnShowSecondaryPage func()
|
OnShowSecondaryPage func()
|
||||||
}
|
}
|
||||||
@@ -162,8 +159,16 @@ func NewGridViewItem(placeholderResource fyne.Resource) *GridViewItem {
|
|||||||
}
|
}
|
||||||
g.primaryText.SetTextStyle(fyne.TextStyle{Bold: true})
|
g.primaryText.SetTextStyle(fyne.TextStyle{Bold: true})
|
||||||
g.ExtendBaseWidget(g)
|
g.ExtendBaseWidget(g)
|
||||||
g.Cover.OnPlay = func() { g.onPlay(false) }
|
g.Cover.OnPlay = func() {
|
||||||
g.Cover.OnShowContextMenu = g.showContextMenu
|
if g.OnPlay != nil {
|
||||||
|
g.OnPlay()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
g.Cover.OnShowContextMenu = func(pos fyne.Position) {
|
||||||
|
if g.OnShowContextMenu != nil {
|
||||||
|
g.OnShowContextMenu(pos)
|
||||||
|
}
|
||||||
|
}
|
||||||
showItemFn := func() {
|
showItemFn := func() {
|
||||||
if g.OnShowItemPage != nil {
|
if g.OnShowItemPage != nil {
|
||||||
g.OnShowItemPage()
|
g.OnShowItemPage()
|
||||||
@@ -188,19 +193,6 @@ func (g *GridViewItem) createContainer() {
|
|||||||
g.container = container.New(pad, c)
|
g.container = container.New(pad, c)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GridViewItem) showContextMenu(pos fyne.Position) {
|
|
||||||
if g.menu == nil {
|
|
||||||
g.menu = widget.NewPopUpMenu(fyne.NewMenu("",
|
|
||||||
fyne.NewMenuItem("Play", func() { g.onPlay(false) }),
|
|
||||||
fyne.NewMenuItem("Shuffle", func() { g.onPlay(true) }),
|
|
||||||
fyne.NewMenuItem("Add to queue", g.onAddToQueue),
|
|
||||||
fyne.NewMenuItem("Add to playlist...", g.onAddToPlaylist),
|
|
||||||
fyne.NewMenuItem("Download...", g.onDownload)),
|
|
||||||
fyne.CurrentApp().Driver().CanvasForObject(g))
|
|
||||||
}
|
|
||||||
g.menu.ShowAtPosition(pos)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *GridViewItem) Update(model GridViewItemModel) {
|
func (g *GridViewItem) Update(model GridViewItemModel) {
|
||||||
g.itemID = model.ID
|
g.itemID = model.ID
|
||||||
g.secondaryID = model.SecondaryID
|
g.secondaryID = model.SecondaryID
|
||||||
@@ -226,27 +218,3 @@ func (g *GridViewItem) SecondaryID() string {
|
|||||||
func (g *GridViewItem) CreateRenderer() fyne.WidgetRenderer {
|
func (g *GridViewItem) CreateRenderer() fyne.WidgetRenderer {
|
||||||
return widget.NewSimpleRenderer(g.container)
|
return widget.NewSimpleRenderer(g.container)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GridViewItem) onPlay(shuffle bool) {
|
|
||||||
if g.OnPlay != nil {
|
|
||||||
g.OnPlay(shuffle)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *GridViewItem) onAddToQueue() {
|
|
||||||
if g.OnAddToQueue != nil {
|
|
||||||
g.OnAddToQueue()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *GridViewItem) onAddToPlaylist() {
|
|
||||||
if g.OnAddToPlaylist != nil {
|
|
||||||
g.OnAddToPlaylist()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *GridViewItem) onDownload() {
|
|
||||||
if g.OnDownload != nil {
|
|
||||||
g.OnDownload()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user