Skip to content

Instantly share code, notes, and snippets.

@lloy0076
Created July 22, 2023 15:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lloy0076/35d32770b4f63c209d87c2cf955b581c to your computer and use it in GitHub Desktop.
Save lloy0076/35d32770b4f63c209d87c2cf955b581c to your computer and use it in GitHub Desktop.
A New My String Fyne Binding Thing
package main
import (
"fyne.io/fyne/v2/data/binding"
"log"
)
type MySprintfString struct {
binding.String
Original binding.String
inFunc func(string) string
outFunc func(string) string
format string
source binding.DataItem
err error
}
func NewMyString(str string, inF func(string) string, outF func(string) string) *MySprintfString {
it := binding.NewString()
err := it.Set(str)
if err != nil {
log.Fatalf("Error: %w\n", err)
}
ret := &MySprintfString{
Original: it,
String: it,
source: it,
inFunc: inF,
outFunc: outF,
}
ret.source.AddListener(ret)
return ret
}
func NewMyStringOnlyIn(str string, f func(string) string) *MySprintfString {
return NewMyString(str, f, func(s string) string { return s })
}
func NewMyStringOnlyOut(str string, f func(string) string) *MySprintfString {
return NewMyString(str, func(s string) string { return s }, f)
}
func (s *MySprintfString) DataChanged() {
log.Printf("Data changed: (%v) %#v\n", s.Original, s)
val, err := s.Get()
if err != nil {
log.Fatalf("Error: %w\n", err)
}
err = s.Set(s.inFunc(val))
if err != nil {
log.Fatalf("Error: %w\n", err)
}
}
func (s *MySprintfString) Get() (string, error) {
value := s.source
it := value.(binding.String)
val, err := it.Get()
if err != nil {
log.Fatalf("Error: %w", err)
}
return s.outFunc(val), nil
}
func (s *MySprintfString) Set(str string) error {
value := s.source
val := value.(binding.String)
err := val.Set(str)
if err != nil {
return err
}
return nil
}
func StringMyString(str string, f func(string) string) *MySprintfString {
return NewMyStringOnlyIn(str, f)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment