adam-gui/vendor/fyne.io/fyne/v2/data/binding/bool.go

119 lines
2.3 KiB
Go
Raw Permalink Normal View History

2024-04-29 19:13:50 +02:00
package binding
type not struct {
Bool
}
var _ Bool = (*not)(nil)
// Not returns a Bool binding that invert the value of the given data binding.
// This is providing the logical Not boolean operation as a data binding.
//
// Since 2.4
func Not(data Bool) Bool {
return &not{Bool: data}
}
func (n *not) Get() (bool, error) {
v, err := n.Bool.Get()
return !v, err
}
func (n *not) Set(value bool) error {
return n.Bool.Set(!value)
}
type and struct {
booleans
}
var _ Bool = (*and)(nil)
// And returns a Bool binding that return true when all the passed Bool binding are
// true and false otherwise. It does apply a logical and boolean operation on all passed
// Bool bindings. This binding is two way. In case of a Set, it will propagate the value
// identically to all the Bool bindings used for its construction.
//
// Since 2.4
func And(data ...Bool) Bool {
return &and{booleans: booleans{data: data}}
}
func (a *and) Get() (bool, error) {
for _, d := range a.data {
v, err := d.Get()
if err != nil {
return false, err
}
if !v {
return false, nil
}
}
return true, nil
}
func (a *and) Set(value bool) error {
for _, d := range a.data {
err := d.Set(value)
if err != nil {
return err
}
}
return nil
}
type or struct {
booleans
}
var _ Bool = (*or)(nil)
// Or returns a Bool binding that return true when at least one of the passed Bool binding
// is true and false otherwise. It does apply a logical or boolean operation on all passed
// Bool bindings. This binding is two way. In case of a Set, it will propagate the value
// identically to all the Bool bindings used for its construction.
//
// Since 2.4
func Or(data ...Bool) Bool {
return &or{booleans: booleans{data: data}}
}
func (o *or) Get() (bool, error) {
for _, d := range o.data {
v, err := d.Get()
if err != nil {
return false, err
}
if v {
return true, nil
}
}
return false, nil
}
func (o *or) Set(value bool) error {
for _, d := range o.data {
err := d.Set(value)
if err != nil {
return err
}
}
return nil
}
type booleans struct {
data []Bool
}
func (g *booleans) AddListener(listener DataListener) {
for _, d := range g.data {
d.AddListener(listener)
}
}
func (g *booleans) RemoveListener(listener DataListener) {
for _, d := range g.data {
d.RemoveListener(listener)
}
}