reuse grid view across several pages
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user