Fix #602: Allow album info dialog to scroll with long description

This commit is contained in:
Drew Weymouth
2025-04-15 17:21:18 -07:00
parent e19131a1b4
commit fe9f3faa4e
2 changed files with 35 additions and 14 deletions
+3
View File
@@ -556,6 +556,9 @@ func (c *Controller) ShowAlbumInfoDialog(albumID, albumName string, albumCover i
} }
c.ClosePopUpOnEscape(pop) c.ClosePopUpOnEscape(pop)
c.haveModal = true c.haveModal = true
pop.Resize(pop.Content.MinSize()) // needed so that NonScrollingMinHeight can consider the width
h := fyne.Min(dlg.NonScrollingMinHeight(), c.MainWindow.Canvas().Size().Height*0.85)
pop.Resize(fyne.NewSize(dlg.MinSize().Width, h))
pop.Show() pop.Show()
}) })
}() }()
+26 -8
View File
@@ -25,6 +25,8 @@ type AlbumInfoDialog struct {
OnDismiss func() OnDismiss func()
mainContainer *fyne.Container
bottomContainer *fyne.Container
content fyne.CanvasObject content fyne.CanvasObject
} }
@@ -32,8 +34,20 @@ func NewAlbumInfoDialog(albumInfo *mediaprovider.AlbumInfo, albumName string, al
a := &AlbumInfoDialog{} a := &AlbumInfoDialog{}
a.ExtendBaseWidget(a) a.ExtendBaseWidget(a)
a.content = container.NewVBox( a.content = container.NewBorder(nil, /*top*/
a.buildMainContainer(albumInfo, albumName, albumCover), a.buildBottomContainer(),
nil /*left*/, nil, /*right*/
a.buildMainContainer(albumInfo, albumName, albumCover), /*content*/
)
return a
}
func (a *AlbumInfoDialog) MinSize() fyne.Size {
return fyne.NewSize(550, a.BaseWidget.MinSize().Height)
}
func (a *AlbumInfoDialog) buildBottomContainer() *fyne.Container {
a.bottomContainer = container.NewVBox(
widget.NewSeparator(), widget.NewSeparator(),
container.NewHBox( container.NewHBox(
layout.NewSpacer(), layout.NewSpacer(),
@@ -44,11 +58,7 @@ func NewAlbumInfoDialog(albumInfo *mediaprovider.AlbumInfo, albumName string, al
}), }),
), ),
) )
return a return a.bottomContainer
}
func (a *AlbumInfoDialog) MinSize() fyne.Size {
return fyne.NewSize(550, a.BaseWidget.MinSize().Height)
} }
func (a *AlbumInfoDialog) buildMainContainer(albumInfo *mediaprovider.AlbumInfo, albumName string, albumCover image.Image) *fyne.Container { func (a *AlbumInfoDialog) buildMainContainer(albumInfo *mediaprovider.AlbumInfo, albumName string, albumCover image.Image) *fyne.Container {
@@ -70,16 +80,24 @@ func (a *AlbumInfoDialog) buildMainContainer(albumInfo *mediaprovider.AlbumInfo,
urlContainer := a.buildUrlContainer(albumInfo.LastFmUrl, albumInfo.MusicBrainzID) urlContainer := a.buildUrlContainer(albumInfo.LastFmUrl, albumInfo.MusicBrainzID)
return container.New( a.mainContainer = container.New(
&layout.CustomPaddedLayout{LeftPadding: 15, RightPadding: 10, TopPadding: 15, BottomPadding: 10}, &layout.CustomPaddedLayout{LeftPadding: 15, RightPadding: 10, TopPadding: 15, BottomPadding: 10},
container.NewScroll(
container.NewVBox( container.NewVBox(
iconImage, iconImage,
title, title,
infoContent, infoContent,
urlContainer, urlContainer,
), ),
),
) )
return a.mainContainer
}
func (a *AlbumInfoDialog) NonScrollingMinHeight() float32 {
l := a.mainContainer.Layout.(*layout.CustomPaddedLayout)
s := a.mainContainer.Objects[0].(*container.Scroll)
return l.TopPadding + l.BottomPadding + s.Content.MinSize().Height + theme.Padding()*3 + a.bottomContainer.MinSize().Height
} }
func (a *AlbumInfoDialog) CreateRenderer() fyne.WidgetRenderer { func (a *AlbumInfoDialog) CreateRenderer() fyne.WidgetRenderer {