miqt/cmd/miqt-uic/ui2go.go

71 lines
1.3 KiB
Go
Raw Normal View History

2024-09-20 06:39:01 +00:00
package main
import (
"go/format"
"strings"
)
func collectClassNames_Widget(u UiWidget) []string {
var ret []string
if u.Name != "" {
ret = append(ret, u.Name+" *qt."+u.Class)
}
for _, w := range u.Widgets {
ret = append(ret, collectClassNames_Widget(w)...)
}
if u.Layout != nil {
for _, li := range u.Layout.Items {
ret = append(ret, collectClassNames_Widget(li.Widget)...)
}
}
for _, a := range u.Actions {
ret = append(ret, a.Name+" *qt.QAction")
}
return ret
}
func collectClassNames(u UiFile) []string {
var ret []string
for _, w := range u.Widget {
ret = append(ret, collectClassNames_Widget(w)...)
}
return ret
}
func generate(packageName string, goGenerateArgs string, u UiFile) ([]byte, error) {
2024-09-20 06:39:01 +00:00
ret := strings.Builder{}
ret.WriteString(`// Generated by miqt-uic. To update this file, edit the .ui file in
// Qt Designer, and then run 'go generate'.
//
//go:` + `generate miqt-uic ` + goGenerateArgs + `
package ` + packageName + `
2024-09-20 06:39:01 +00:00
import (
"github.com/mappu/miqt"
)
type ` + u.Class + `Ui struct {
` + strings.Join(collectClassNames(u), "\n") + `
}
func New` + u.Class + `Ui() *` + u.Class + `Ui {
ui := &` + u.Class + `Ui{}
`)
// ...
ret.WriteString(`
return ui
}
func (u *` + u.Class + `Ui) RetranslateUi() {
panic("TODO")
}
`)
output := ret.String()
return format.Source([]byte(output))
}