Files
supersonic/ui/widgets/headercollapsebutton.go

62 lines
1.1 KiB
Go

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()
}