Fix #602: Allow album info dialog to scroll with long description
This commit is contained in:
@@ -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()
|
||||||
})
|
})
|
||||||
}()
|
}()
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user