reuse grid view across several pages

This commit is contained in:
Drew Weymouth
2023-07-09 14:14:23 -07:00
parent be41bdc72c
commit 203070328c
11 changed files with 116 additions and 30 deletions
+5 -4
View File
@@ -82,7 +82,7 @@ type GridViewState struct {
items []GridViewItemModel
iter GridViewIterator
imageFetcher ImageFetcher
placeholder fyne.Resource
Placeholder fyne.Resource
highestShown int
done bool
@@ -104,7 +104,7 @@ func NewFixedGridView(items []GridViewItemModel, fetch ImageFetcher, placeholder
items: items,
done: true,
imageFetcher: fetch,
placeholder: placeholder,
Placeholder: placeholder,
},
}
g.ExtendBaseWidget(g)
@@ -117,7 +117,7 @@ func NewGridView(iter GridViewIterator, fetch ImageFetcher, placeholder fyne.Res
GridViewState: GridViewState{
iter: iter,
imageFetcher: fetch,
placeholder: placeholder,
Placeholder: placeholder,
},
}
g.ExtendBaseWidget(g)
@@ -213,7 +213,7 @@ func (g *GridView) createGridWrap() {
},
// create func
func() fyne.CanvasObject {
card := NewGridViewItem(g.placeholder)
card := NewGridViewItem(g.Placeholder)
card.OnPlay = func(shuffle bool) {
if g.OnPlay != nil {
g.OnPlay(card.ItemID(), shuffle)
@@ -266,6 +266,7 @@ func (g *GridView) doUpdateItemCard(itemIdx int, card *GridViewItem) {
item = g.items[itemIdx]
}
g.stateMutex.RUnlock()
card.Cover.Im.CenterIcon = g.Placeholder
if card.PrevID == item.ID {
// nothing to do
return
+4
View File
@@ -191,6 +191,10 @@ func (g *GridViewItem) Update(model GridViewItemModel) {
g.Cover.playbtn.Hidden = true
}
func (g *GridViewItem) Refresh() {
g.BaseWidget.Refresh()
}
func (g *GridViewItem) ItemID() string {
return g.itemID
}
+4 -2
View File
@@ -15,7 +15,8 @@ import (
// a placeholder with a rectangular border frame
// and an icon positioned in the center of the frame.
type ImagePlaceholder struct {
ScaleMode canvas.ImageScale
ScaleMode canvas.ImageScale
CenterIcon fyne.Resource
widget.BaseWidget
content *fyne.Container
@@ -30,7 +31,7 @@ type ImagePlaceholder struct {
}
func NewImagePlaceholder(centerIcon fyne.Resource, minSize float32) *ImagePlaceholder {
i := &ImagePlaceholder{minSize: minSize}
i := &ImagePlaceholder{minSize: minSize, CenterIcon: centerIcon}
i.ExtendBaseWidget(i)
i.iconImage = canvas.NewImageFromResource(centerIcon)
i.iconImage.FillMode = canvas.ImageFillContain
@@ -86,6 +87,7 @@ func (i *ImagePlaceholder) MinSize() fyne.Size {
func (i *ImagePlaceholder) Refresh() {
i.border.Hidden = i.HaveImage()
i.iconImage.Resource = i.CenterIcon
i.iconImage.Hidden = i.HaveImage()
i.imageDisp.Hidden = !i.HaveImage()
i.imageDisp.ScaleMode = i.ScaleMode