Fix #774: Make headers for Album, Artist, Playlist page collapsible / compact
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package widgets
|
||||
|
||||
import (
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/driver/desktop"
|
||||
"fyne.io/fyne/v2/theme"
|
||||
"fyne.io/fyne/v2/widget"
|
||||
)
|
||||
|
||||
type HeaderCollapseButton struct {
|
||||
widget.Button
|
||||
|
||||
Collapsed bool
|
||||
|
||||
shouldHide bool
|
||||
}
|
||||
|
||||
func NewHeaderCollapseButton(onTapped func()) *HeaderCollapseButton {
|
||||
b := &HeaderCollapseButton{
|
||||
Button: widget.Button{
|
||||
Icon: theme.ContentRemoveIcon(),
|
||||
Importance: widget.LowImportance,
|
||||
},
|
||||
}
|
||||
b.OnTapped = func() {
|
||||
b.Collapsed = !b.Collapsed
|
||||
onTapped()
|
||||
}
|
||||
b.ExtendBaseWidget(b)
|
||||
return b
|
||||
}
|
||||
|
||||
// HideIfNotMousedIn hides the button after a short delay
|
||||
// if the mouse is not hovering over it.
|
||||
func (b *HeaderCollapseButton) HideIfNotMousedIn() {
|
||||
b.shouldHide = true
|
||||
fyne.Do(func() {
|
||||
if b.shouldHide {
|
||||
b.Hide()
|
||||
b.shouldHide = false
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func (b *HeaderCollapseButton) MouseIn(e *desktop.MouseEvent) {
|
||||
b.shouldHide = false
|
||||
b.Button.MouseIn(e)
|
||||
}
|
||||
|
||||
func (b *HeaderCollapseButton) MinSize() fyne.Size {
|
||||
return fyne.NewSize(24, 24)
|
||||
}
|
||||
|
||||
func (b *HeaderCollapseButton) Refresh() {
|
||||
if b.Collapsed {
|
||||
b.Icon = theme.ContentAddIcon()
|
||||
} else {
|
||||
b.Icon = theme.ContentRemoveIcon()
|
||||
}
|
||||
b.Button.Refresh()
|
||||
}
|
||||
Reference in New Issue
Block a user