62 lines
1.1 KiB
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()
|
|
}
|