You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
wireguird/gui/get/generator/generator.go

80 lines
1.1 KiB

package main
import (
"flag"
"path/filepath"
"strings"
"github.com/ungerik/go-dry"
)
func main() {
list := []string{
"ApplicationWindow",
"ScrolledWindow",
"AboutDialog",
"ColorButton",
"MenuButton",
"HeaderBar",
"MenuItem",
"Notebook",
"TextView",
"Viewport",
"ListBox",
"Spinner",
"Button",
"Switch",
"Window",
"Entry",
"Label",
"Stack",
"Box",
}
target := ""
flag.StringVar(&target, "target", "", "-target=./gui")
flag.Parse()
if err := Generate(list, target); err != nil {
panic(err)
}
}
func Generate(list []string, target string) error {
txt := `package get
import (
"errors"
"github.com/gotk3/gotk3/gtk"
)
var Builder *gtk.Builder
`
for _, el := range list {
vel := strings.ToLower(el)
txt += `
func ` + el + `(name string) (*gtk.` + el + `, error) {
obj, err := Builder.GetObject(name)
if err != nil {
return nil, err
}
` + vel + `1, ok := obj.(*gtk.` + el + `)
if !ok {
return nil, errors.New("cant get *gtk.` + el + `: " + name)
}
return ` + vel + `1, nil
}
`
}
if err := dry.FileSetString(filepath.Join(target, "./gtk.go"), txt); err != nil {
return err
}
return nil
}