Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rework bindings to avoid generator script entirely #5483

Draft
wants to merge 3 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
232 changes: 6 additions & 226 deletions data/binding/convert.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
// auto-generated
// **** THIS FILE IS AUTO-GENERATED, PLEASE DO NOT EDIT IT **** //

package binding

import (
Expand All @@ -9,31 +6,13 @@ import (
"fyne.io/fyne/v2"
)

func internalFloatToInt(val float64) (int, error) {
return int(val), nil
}

func internalIntToFloat(val int) (float64, error) {
return float64(val), nil
}

type stringFromBool struct {
base

format string

from Bool
}

// BoolToString creates a binding that connects a Bool data item to a String.
// Changes to the Bool will be pushed to the String and setting the string will parse and set the
// Bool if the parse was successful.
//
// Since: 2.0
func BoolToString(v Bool) String {
str := &stringFromBool{from: v}
v.AddListener(str)
return str
return toStringComparable[bool](v, formatBool, parseBool)
}

// BoolToStringWithFormat creates a binding that connects a Bool data item to a String and is
Expand All @@ -42,72 +21,7 @@ func BoolToString(v Bool) String {
//
// Since: 2.0
func BoolToStringWithFormat(v Bool, format string) String {
if format == "%t" { // Same as not using custom formatting.
return BoolToString(v)
}

str := &stringFromBool{from: v, format: format}
v.AddListener(str)
return str
}

func (s *stringFromBool) Get() (string, error) {
val, err := s.from.Get()
if err != nil {
return "", err
}

if s.format != "" {
return fmt.Sprintf(s.format, val), nil
}

return formatBool(val), nil
}

func (s *stringFromBool) Set(str string) error {
var val bool
if s.format != "" {
safe := stripFormatPrecision(s.format)
n, err := fmt.Sscanf(str, safe+" ", &val) // " " denotes match to end of string
if err != nil {
return err
}
if n != 1 {
return errParseFailed
}
} else {
new, err := parseBool(str)
if err != nil {
return err
}
val = new
}

old, err := s.from.Get()
if err != nil {
return err
}
if val == old {
return nil
}
if err = s.from.Set(val); err != nil {
return err
}

queueItem(s.DataChanged)
return nil
}

func (s *stringFromBool) DataChanged() {
s.trigger()
}

type stringFromFloat struct {
base

format string

from Float
return toStringWithFormatComparable[bool](v, format, "%t", formatBool, parseBool)
}

// FloatToString creates a binding that connects a Float data item to a String.
Expand All @@ -116,9 +30,7 @@ type stringFromFloat struct {
//
// Since: 2.0
func FloatToString(v Float) String {
str := &stringFromFloat{from: v}
v.AddListener(str)
return str
return toStringComparable[float64](v, formatFloat, parseFloat)
}

// FloatToStringWithFormat creates a binding that connects a Float data item to a String and is
Expand All @@ -127,159 +39,27 @@ func FloatToString(v Float) String {
//
// Since: 2.0
func FloatToStringWithFormat(v Float, format string) String {
if format == "%f" { // Same as not using custom formatting.
return FloatToString(v)
}

str := &stringFromFloat{from: v, format: format}
v.AddListener(str)
return str
}

func (s *stringFromFloat) Get() (string, error) {
val, err := s.from.Get()
if err != nil {
return "", err
}

if s.format != "" {
return fmt.Sprintf(s.format, val), nil
}

return formatFloat(val), nil
}

func (s *stringFromFloat) Set(str string) error {
var val float64
if s.format != "" {
safe := stripFormatPrecision(s.format)
n, err := fmt.Sscanf(str, safe+" ", &val) // " " denotes match to end of string
if err != nil {
return err
}
if n != 1 {
return errParseFailed
}
} else {
new, err := parseFloat(str)
if err != nil {
return err
}
val = new
}

old, err := s.from.Get()
if err != nil {
return err
}
if val == old {
return nil
}
if err = s.from.Set(val); err != nil {
return err
}

queueItem(s.DataChanged)
return nil
}

func (s *stringFromFloat) DataChanged() {
s.trigger()
}

type intToFloat struct {
base
from Int
return toStringWithFormatComparable[float64](v, format, "%f", formatFloat, parseFloat)
}

// IntToFloat creates a binding that connects an Int data item to a Float.
//
// Since: 2.5
func IntToFloat(val Int) Float {
v := &intToFloat{from: val}
v := &fromIntTo[float64]{from: val, parser: internalFloatToInt, formatter: internalIntToFloat}
val.AddListener(v)
return v
}

func (s *intToFloat) Get() (float64, error) {
val, err := s.from.Get()
if err != nil {
return 0.0, err
}
return internalIntToFloat(val)
}

func (s *intToFloat) Set(val float64) error {
i, err := internalFloatToInt(val)
if err != nil {
return err
}
old, err := s.from.Get()
if i == old {
return nil
}
if err != nil {
return err
}
if err = s.from.Set(i); err != nil {
return err
}

queueItem(s.DataChanged)
return nil
}

func (s *intToFloat) DataChanged() {
s.trigger()
}

type intFromFloat struct {
base
from Float
}

// FloatToInt creates a binding that connects a Float data item to an Int.
//
// Since: 2.5
func FloatToInt(v Float) Int {
i := &intFromFloat{from: v}
i := &toInt[float64]{from: v, parser: internalFloatToInt, formatter: internalIntToFloat}
v.AddListener(i)
return i
}

func (s *intFromFloat) Get() (int, error) {
val, err := s.from.Get()
if err != nil {
return 0, err
}
return internalFloatToInt(val)
}

func (s *intFromFloat) Set(v int) error {
val, err := internalIntToFloat(v)
if err != nil {
return err
}

old, err := s.from.Get()
if err != nil {
return err
}
if val == old {
return nil
}
if err = s.from.Set(val); err != nil {
return err
}

queueItem(s.DataChanged)
return nil
}

func (s *intFromFloat) DataChanged() {
s.trigger()
}

type stringFromInt struct {
base

Expand Down
8 changes: 8 additions & 0 deletions data/binding/convert_helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,3 +101,11 @@ func formatFloat(in float64) string {
func formatInt(in int) string {
return strconv.FormatInt(int64(in), 10)
}

func internalFloatToInt(val float64) (int, error) {
return int(val), nil
}

func internalIntToFloat(val int) (float64, error) {
return float64(val), nil
}
Loading
Loading