mirror of
https://github.com/bluszcz/cutego.git
synced 2024-09-28 21:25:16 +03:00
add comply and dynamic flags + syntactic sugar for moc structs
This commit is contained in:
parent
c38504e5a8
commit
b95c8155e7
62 changed files with 875 additions and 486 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -13,4 +13,5 @@
|
|||
/internal/examples/**/rcc*
|
||||
/internal/examples/**/moc*
|
||||
/internal/binding/dump/*
|
||||
/internal/cmd/moc/test/**/moc*
|
||||
/internal/cmd/moc/test/**/moc*
|
||||
*.so
|
|
@ -59,6 +59,9 @@ func main() {
|
|||
var device string
|
||||
flag.StringVar(&device, "device", "", "a device UUID to be used by the iOS simulator")
|
||||
|
||||
var comply bool
|
||||
flag.BoolVar(&comply, "comply", false, "dump object code to make it easier to comply with LGPL obligations for proprietary developments")
|
||||
|
||||
if cmd.ParseFlags() {
|
||||
flag.Usage()
|
||||
}
|
||||
|
@ -114,5 +117,5 @@ func main() {
|
|||
case "android", "android-emulator", "ios", "ios-simulator", "sailfish", "sailfish-emulator":
|
||||
fast = false
|
||||
}
|
||||
deploy.Deploy(mode, target, path, docker, ldFlags, tags, fast && !docker, device, vagrant, vagrantsystem)
|
||||
deploy.Deploy(mode, target, path, docker, ldFlags, tags, fast && !docker, device, vagrant, vagrantsystem, comply)
|
||||
}
|
||||
|
|
|
@ -51,6 +51,11 @@ func main() {
|
|||
var vagrant bool
|
||||
flag.BoolVar(&vagrant, "vagrant", false, "run command inside vagrant vm")
|
||||
|
||||
var dynamic bool
|
||||
if runtime.GOOS == "darwin" {
|
||||
flag.BoolVar(&dynamic, "dynamic", false, "create and use semi-dynamic libraries during the generation and installation process (experimental; no real replacement for dynamic linking)")
|
||||
}
|
||||
|
||||
if cmd.ParseFlags() {
|
||||
flag.Usage()
|
||||
}
|
||||
|
@ -79,6 +84,10 @@ func main() {
|
|||
target = runtime.GOOS
|
||||
}
|
||||
|
||||
if dynamic && target == runtime.GOOS {
|
||||
os.Setenv("QT_DYNAMIC_SETUP", "true")
|
||||
}
|
||||
|
||||
utils.CheckBuildTarget(target)
|
||||
|
||||
switch mode {
|
||||
|
|
|
@ -44,6 +44,9 @@ type Function struct {
|
|||
IsMocFunction bool
|
||||
IsMocProperty bool
|
||||
PureGoOutput string
|
||||
Connect int
|
||||
Target string
|
||||
Inbound bool
|
||||
}
|
||||
|
||||
type Parameter struct {
|
||||
|
|
|
@ -20,6 +20,12 @@ type Variable struct {
|
|||
|
||||
IsMocSynthetic bool
|
||||
PureGoType string
|
||||
Connect int
|
||||
ConnectGet bool
|
||||
ConnectSet bool
|
||||
ConnectChanged bool
|
||||
Target string
|
||||
Inbound bool
|
||||
}
|
||||
|
||||
func (v *Variable) Class() (*Class, bool) {
|
||||
|
|
|
@ -527,3 +527,37 @@ func cgoFileNames(module, path, target string, mode int) []string {
|
|||
}
|
||||
return o
|
||||
}
|
||||
|
||||
func ParseCgo(module, target string) (string, string) {
|
||||
utils.Log.WithField("module", module).WithField("target", target).Debug("parse cgo for shared lib")
|
||||
|
||||
tmp := utils.LoadOptional(utils.GoQtPkgPath(module, cgoFileNames(module, "", target, NONE)[0]))
|
||||
if tmp != "" {
|
||||
|
||||
tmp = strings.Split(tmp, "/*")[1]
|
||||
tmp = strings.Split(tmp, "*/")[0]
|
||||
|
||||
tmp = strings.Replace(tmp, "#cgo CFLAGS: ", "", -1)
|
||||
tmp = strings.Replace(tmp, "#cgo CXXFLAGS: ", "", -1)
|
||||
tmp = strings.Replace(tmp, "#cgo LDFLAGS: ", "", -1)
|
||||
tmp = strings.Replace(tmp, "\n", " ", -1)
|
||||
|
||||
switch target {
|
||||
case "darwin":
|
||||
return "clang++", fmt.Sprintf("%v -Wl,-S -Wl,-x -install_name @rpath/%[2]v/lib%[2]v.so -undefined dynamic_lookup -shared -o lib%[2]v.so %[2]v.cpp", tmp, module)
|
||||
}
|
||||
}
|
||||
|
||||
return "", tmp
|
||||
}
|
||||
|
||||
func ReplaceCgo(module, target string) {
|
||||
utils.Log.WithField("module", module).WithField("target", target).Debug("replace cgo for shared lib")
|
||||
|
||||
tmp := utils.LoadOptional(utils.GoQtPkgPath(module, cgoFileNames(module, "", target, NONE)[0]))
|
||||
if tmp != "" {
|
||||
pre := strings.Split(tmp, "/*")[0]
|
||||
past := strings.Split(tmp, "*/")[1]
|
||||
utils.Save(utils.GoQtPkgPath(module, cgoFileNames(module, "", target, NONE)[0]), fmt.Sprintf("%v/*\n#cgo CFLAGS: -I.\n#cgo LDFLAGS: -L. -l%v -Wl,-rpath,%v\n*/%v", pre, module, utils.GoQtPkgPath(), past))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -457,7 +457,7 @@ func preambleCpp(module string, input []byte, mode int, tags string) []byte {
|
|||
#define private public
|
||||
|
||||
#include "%v.h"
|
||||
#include "_cgo_export.h"
|
||||
%v
|
||||
|
||||
`,
|
||||
buildTags(module, false, mode, tags),
|
||||
|
@ -488,6 +488,18 @@ func preambleCpp(module string, input []byte, mode int, tags string) []byte {
|
|||
}
|
||||
}
|
||||
}(),
|
||||
|
||||
func() string {
|
||||
switch module {
|
||||
case "QtAndroidExtras", "QtSailfish":
|
||||
return "#include \"_cgo_export.h\""
|
||||
default:
|
||||
if utils.QT_DYNAMIC_SETUP() {
|
||||
return "#include \"_obj/_cgo_export.h\""
|
||||
}
|
||||
return "#include \"_cgo_export.h\""
|
||||
}
|
||||
}(),
|
||||
)
|
||||
|
||||
var classes = make([]string, 0)
|
||||
|
|
|
@ -209,23 +209,225 @@ func (ptr *%[1]v) Destroy%[1]v() {
|
|||
func callback%[1]v_Constructor(ptr unsafe.Pointer) {
|
||||
`, class.Name)
|
||||
|
||||
fmt.Fprintf(bb, "gPtr := New%vFromPointer(ptr)\nqt.Register(ptr, gPtr)\n", strings.Title(class.Name))
|
||||
fmt.Fprintf(bb, "this := New%vFromPointer(ptr)\nqt.Register(ptr, this)\n", strings.Title(class.Name))
|
||||
|
||||
var lastModule string
|
||||
for _, bcn := range class.GetAllBases() {
|
||||
if bc := parser.State.ClassMap[bcn]; bc.Module != class.Module {
|
||||
if len(bc.Constructors) > 0 && lastModule != bc.Module {
|
||||
if strings.ToLower(bc.Constructors[0])[0] != bc.Constructors[0][0] {
|
||||
fmt.Fprintf(bb, "gPtr.%v.%v()\n", strings.Title(bc.Name), bc.Constructors[0])
|
||||
fmt.Fprintf(bb, "this.%v.%v()\n", strings.Title(bc.Name), bc.Constructors[0])
|
||||
}
|
||||
}
|
||||
lastModule = bc.Module
|
||||
}
|
||||
}
|
||||
if len(class.Constructors) > 0 {
|
||||
fmt.Fprintf(bb, "gPtr.%v()\n", class.Constructors[0])
|
||||
|
||||
for _, bcn := range append(class.GetAllBases(), class.Name) {
|
||||
if bc, ok := parser.State.ClassMap[bcn]; ok {
|
||||
for _, f := range bc.Functions {
|
||||
if f.Connect == 0 || !f.IsMocFunction {
|
||||
continue
|
||||
}
|
||||
|
||||
if class.Name != bcn {
|
||||
fmt.Fprintf(bb, "qt.DisconnectSignal(ptr, \"%v\")\n", f.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
connect := func(class *parser.Class, local bool) {
|
||||
for _, bcn := range append(class.GetAllBases(), class.Name) {
|
||||
if bc, ok := parser.State.ClassMap[bcn]; ok {
|
||||
for _, f := range bc.Functions {
|
||||
if f.Connect == 0 || !f.IsMocFunction {
|
||||
continue
|
||||
}
|
||||
if (local && f.Target != "") || (!local && f.Target == "") {
|
||||
continue
|
||||
}
|
||||
|
||||
name := f.Name
|
||||
if f.Inbound {
|
||||
name = strings.Title(name)
|
||||
}
|
||||
|
||||
if f.Connect == 1 {
|
||||
if f.Target == "" {
|
||||
fmt.Fprintf(bb, "this.Connect%v(this.%v)\n", strings.Title(name), name)
|
||||
} else {
|
||||
t := f.Target
|
||||
if strings.Count(t, ".") != 2 {
|
||||
if !(len(strings.Split(f.Target, ".")) == 2 && strings.Split(f.Target, ".")[0] != "this" && strings.Split(f.Target, ".")[1][:1] == strings.ToLower(strings.Split(f.Target, ".")[1][:1])) {
|
||||
t = f.Target + "." + name
|
||||
}
|
||||
}
|
||||
tUpper := strings.Split(f.Target, ".")
|
||||
tUpper[len(tUpper)-1] = strings.Title(tUpper[len(tUpper)-1])
|
||||
|
||||
if strings.Count(f.Target, ".") >= 2 || (len(strings.Split(f.Target, ".")) == 2 && strings.Split(f.Target, ".")[0] != "this" && strings.Split(f.Target, ".")[1][:1] == strings.ToLower(strings.Split(f.Target, ".")[1][:1])) {
|
||||
fmt.Fprintf(bb, "this.Connect%v(%v)\n", strings.Title(name), strings.Join(tUpper, "."))
|
||||
} else {
|
||||
fmt.Fprintf(bb, "this.Connect%v(%v.%v)\n", strings.Title(name), f.Target, strings.Title(name))
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if f.Target != "" {
|
||||
t := f.Target
|
||||
if strings.Count(t, ".") != 2 {
|
||||
if !(len(strings.Split(f.Target, ".")) == 2 && strings.Split(f.Target, ".")[0] != "this" && strings.Split(f.Target, ".")[1][:1] == strings.ToLower(strings.Split(f.Target, ".")[1][:1])) {
|
||||
t = f.Target + "." + name
|
||||
}
|
||||
}
|
||||
tCon := strings.Split(f.Target, ".")
|
||||
tCon[len(tCon)-1] = "Connect" + strings.Title(tCon[len(tCon)-1])
|
||||
|
||||
if strings.Count(f.Target, ".") >= 2 || (len(strings.Split(f.Target, ".")) == 2 && strings.Split(f.Target, ".")[0] != "this" && strings.Split(f.Target, ".")[1][:1] == strings.ToLower(strings.Split(f.Target, ".")[1][:1])) {
|
||||
fmt.Fprintf(bb, "%v(this.%v)\n", strings.Join(tCon, "."), name)
|
||||
} else {
|
||||
fmt.Fprintf(bb, "%v.Connect%v(this.%v)\n", f.Target, strings.Title(name), name)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for _, bcn := range append(class.GetAllBases(), class.Name) {
|
||||
if bc, ok := parser.State.ClassMap[bcn]; ok {
|
||||
for _, p := range bc.Properties {
|
||||
if p.Connect == 0 {
|
||||
continue
|
||||
}
|
||||
if (local && p.Target != "") || (!local && p.Target == "") {
|
||||
continue
|
||||
}
|
||||
|
||||
name := p.Name
|
||||
if p.Inbound {
|
||||
name = strings.Title(name)
|
||||
}
|
||||
|
||||
if p.Connect == 1 {
|
||||
if p.Target == "" {
|
||||
if p.ConnectGet || !(p.ConnectSet || p.ConnectChanged) {
|
||||
fmt.Fprintf(bb, "this.Connect%v(this.%v)\n",
|
||||
func() string {
|
||||
if p.Output == "bool" && !strings.HasPrefix(name, "is") {
|
||||
return "Is" + strings.Title(name)
|
||||
}
|
||||
return strings.Title(name)
|
||||
}(),
|
||||
func() string {
|
||||
if p.Output == "bool" && !strings.HasPrefix(name, "is") {
|
||||
return "is" + strings.Title(name)
|
||||
}
|
||||
return name
|
||||
}())
|
||||
}
|
||||
if p.ConnectSet || !(p.ConnectGet || p.ConnectChanged) {
|
||||
fmt.Fprintf(bb, "this.ConnectSet%v(this.set%v)\n", strings.Title(name), strings.Title(name))
|
||||
}
|
||||
if p.ConnectChanged || !(p.ConnectGet || p.ConnectSet) {
|
||||
fmt.Fprintf(bb, "this.Connect%vChanged(this.%vChanged)\n", strings.Title(name), name)
|
||||
}
|
||||
} else {
|
||||
t := p.Target
|
||||
if strings.Count(t, ".") < 2 {
|
||||
if !(len(strings.Split(p.Target, ".")) == 2 && strings.Split(p.Target, ".")[0] != "this" && strings.Split(p.Target, ".")[1][:1] == strings.ToLower(strings.Split(p.Target, ".")[1][:1])) {
|
||||
t = p.Target + "." + name
|
||||
}
|
||||
}
|
||||
|
||||
tSet := strings.Split(t, ".")
|
||||
tSet[len(tSet)-1] = "ConnectSet" + strings.Title(tSet[len(tSet)-1])
|
||||
|
||||
tChanged := strings.Split(t, ".")
|
||||
tChanged[len(tChanged)-1] = strings.Title(tChanged[len(tChanged)-1]) + "Changed"
|
||||
|
||||
tUpper := strings.Split(t, ".")
|
||||
tUpper[len(tUpper)-1] = strings.Title(tUpper[len(tUpper)-1])
|
||||
|
||||
tIs := strings.Split(t, ".")
|
||||
if p.Output == "bool" && !strings.HasPrefix(tIs[len(tIs)-1], "is") {
|
||||
tIs[len(tIs)-1] = "ConnectIs" + strings.Title(tIs[len(tIs)-1])
|
||||
} else {
|
||||
tIs[len(tIs)-1] = "Connect" + strings.Title(tIs[len(tIs)-1])
|
||||
}
|
||||
|
||||
if p.ConnectGet || !(p.ConnectSet || p.ConnectChanged) {
|
||||
fmt.Fprintf(bb, "%v(this.%v)\n",
|
||||
strings.Join(tIs, "."),
|
||||
func() string {
|
||||
if p.Output == "bool" && !strings.HasPrefix(name, "is") {
|
||||
return "Is" + strings.Title(name)
|
||||
}
|
||||
return strings.Title(name)
|
||||
}())
|
||||
}
|
||||
if p.ConnectSet || !(p.ConnectGet || p.ConnectChanged) {
|
||||
fmt.Fprintf(bb, "%v(this.Set%v)\n", strings.Join(tSet, "."), strings.Title(name))
|
||||
}
|
||||
if p.ConnectChanged || !(p.ConnectGet || p.ConnectSet) {
|
||||
fmt.Fprintf(bb, "this.Connect%vChanged(%v)\n", strings.Title(name), strings.Join(tChanged, "."))
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if p.Target != "" {
|
||||
t := p.Target
|
||||
if strings.Count(t, ".") < 2 {
|
||||
if !(len(strings.Split(p.Target, ".")) == 2 && strings.Split(p.Target, ".")[0] != "this" && strings.Split(p.Target, ".")[1][:1] == strings.ToLower(strings.Split(p.Target, ".")[1][:1])) {
|
||||
t = p.Target + "." + name
|
||||
}
|
||||
}
|
||||
|
||||
tSet := strings.Split(t, ".")
|
||||
tSet[len(tSet)-1] = "Set" + strings.Title(tSet[len(tSet)-1])
|
||||
|
||||
tChanged := strings.Split(t, ".")
|
||||
tChanged[len(tChanged)-1] = "Connect" + strings.Title(tChanged[len(tChanged)-1]) + "Changed"
|
||||
|
||||
tUpper := strings.Split(t, ".")
|
||||
tUpper[len(tUpper)-1] = strings.Title(tUpper[len(tUpper)-1])
|
||||
|
||||
tIs := strings.Split(t, ".")
|
||||
if p.Output == "bool" && !strings.HasPrefix(tIs[len(tIs)-1], "is") {
|
||||
tIs[len(tIs)-1] = "Is" + strings.Title(tIs[len(tIs)-1])
|
||||
} else {
|
||||
tIs[len(tIs)-1] = strings.Title(tIs[len(tIs)-1])
|
||||
}
|
||||
|
||||
if p.ConnectGet || !(p.ConnectSet || p.ConnectChanged) {
|
||||
fmt.Fprintf(bb, "this.Connect%v(%v)\n",
|
||||
func() string {
|
||||
if p.Output == "bool" && !strings.HasPrefix(name, "is") {
|
||||
return "Is" + strings.Title(name)
|
||||
}
|
||||
return strings.Title(name)
|
||||
}(), strings.Join(tIs, "."))
|
||||
}
|
||||
if p.ConnectSet || !(p.ConnectGet || p.ConnectChanged) {
|
||||
fmt.Fprintf(bb, "this.ConnectSet%v(%v)\n", strings.Title(name), strings.Join(tSet, "."))
|
||||
}
|
||||
if p.ConnectChanged || !(p.ConnectGet || p.ConnectSet) {
|
||||
fmt.Fprintf(bb, "%v(this.%vChanged)\n", strings.Join(tChanged, "."), strings.Title(name))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
connect(class, true)
|
||||
|
||||
if len(class.Constructors) > 0 {
|
||||
fmt.Fprintf(bb, "this.%v()\n", class.Constructors[0])
|
||||
}
|
||||
|
||||
connect(class, false)
|
||||
|
||||
fmt.Fprint(bb, "}\n\n")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -739,3 +739,58 @@ func ubports_manifest(name string) string {
|
|||
return "amd64"
|
||||
}())
|
||||
}
|
||||
|
||||
func relink(env map[string]string, target string) string {
|
||||
return fmt.Sprintf(`#!/bin/bash
|
||||
set -ev
|
||||
|
||||
#GO_VERSION: %v
|
||||
#GO_HOST_OS: %v
|
||||
#GO_HOST_ARCH: %v
|
||||
#QT_VERSION: %v
|
||||
|
||||
export GOOS=%v
|
||||
export GOARCH=%v
|
||||
export GOARM=%v
|
||||
export CC=%v
|
||||
export CXX=%v
|
||||
|
||||
go tool link -f -o $PWD/relinked -importcfg $PWD/b001/importcfg.link -buildmode=%v -w -extld=%v $PWD/b001/_pkg_.a`,
|
||||
|
||||
runtime.Version(),
|
||||
runtime.GOOS,
|
||||
runtime.GOARCH,
|
||||
utils.QT_VERSION(),
|
||||
|
||||
env["GOOS"],
|
||||
env["GOARCH"],
|
||||
func() string {
|
||||
if env["GOARCH"] == "arm" {
|
||||
return env["GOARM"]
|
||||
}
|
||||
return ""
|
||||
|
||||
}(),
|
||||
env["CC"],
|
||||
env["CXX"],
|
||||
|
||||
func() string {
|
||||
switch target {
|
||||
case "ios", "ios-simulator":
|
||||
return "c-archive"
|
||||
case "android", "android-emulator":
|
||||
return "c-shared"
|
||||
default:
|
||||
return "exe"
|
||||
}
|
||||
}(),
|
||||
|
||||
func() string {
|
||||
switch target {
|
||||
case "ios", "ios-simulator", "darwin":
|
||||
return "clang++"
|
||||
default:
|
||||
return "g++"
|
||||
}
|
||||
}())
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package deploy
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
|
@ -15,7 +16,7 @@ import (
|
|||
"github.com/therecipe/qt/internal/utils"
|
||||
)
|
||||
|
||||
func build(mode, target, path, ldFlagsCustom, tagsCustom, name, depPath string, fast bool) {
|
||||
func build(mode, target, path, ldFlagsCustom, tagsCustom, name, depPath string, fast, comply bool) {
|
||||
env, tags, ldFlags, out := cmd.BuildEnv(target, name, depPath)
|
||||
if (!fast || utils.QT_STUB()) && !utils.QT_FAT() {
|
||||
tags = append(tags, "minimal")
|
||||
|
@ -40,21 +41,26 @@ func build(mode, target, path, ldFlagsCustom, tagsCustom, name, depPath string,
|
|||
if !utils.QT_SAILFISH() {
|
||||
build_sailfish(mode, target, path, ldFlagsCustom, name, depPath)
|
||||
|
||||
walkFn := func(path string, info os.FileInfo, err error) error {
|
||||
switch info.Name() {
|
||||
case "rcc.qrc", "rcc.cpp",
|
||||
"moc.h", "moc.cpp", "moc_moc.h",
|
||||
"cgo_main_wrapper.go":
|
||||
utils.RemoveAll(path)
|
||||
default:
|
||||
if strings.HasPrefix(info.Name(), "moc_cgo_") ||
|
||||
strings.HasPrefix(info.Name(), "rcc_cgo_") {
|
||||
utils.RemoveAll(path)
|
||||
if !fast {
|
||||
walkFn := func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
switch info.Name() {
|
||||
case "rcc.qrc", "rcc.cpp",
|
||||
"moc.h", "moc.cpp", "moc_moc.h",
|
||||
"cgo_main_wrapper.go":
|
||||
utils.RemoveAll(path)
|
||||
default:
|
||||
if strings.HasPrefix(info.Name(), "moc_cgo_") ||
|
||||
strings.HasPrefix(info.Name(), "rcc_cgo_") {
|
||||
utils.RemoveAll(path)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return nil
|
||||
filepath.Walk(path, walkFn)
|
||||
}
|
||||
filepath.Walk(path, walkFn)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
@ -71,6 +77,12 @@ func build(mode, target, path, ldFlagsCustom, tagsCustom, name, depPath string,
|
|||
cmd.Args = append(cmd.Args, "-i")
|
||||
}
|
||||
|
||||
if comply {
|
||||
utils.MkdirAll(depPath + "_obj")
|
||||
cmd.Env = append(cmd.Env, fmt.Sprintf("GOTMPDIR=%v", depPath+"_obj"))
|
||||
cmd.Args = append(cmd.Args, "-a", "-x", "-work")
|
||||
}
|
||||
|
||||
cmd.Args = append(cmd.Args, fmt.Sprintf("-tags=\"%v\"", strings.Join(tags, "\" \"")))
|
||||
|
||||
if target != runtime.GOOS {
|
||||
|
@ -96,21 +108,65 @@ func build(mode, target, path, ldFlagsCustom, tagsCustom, name, depPath string,
|
|||
utils.RunCmd(strip, fmt.Sprintf("strip binary for %v on %v", target, runtime.GOOS))
|
||||
}
|
||||
|
||||
walkFn := func(path string, info os.FileInfo, err error) error {
|
||||
switch info.Name() {
|
||||
case "rcc.qrc", "rcc.cpp",
|
||||
"moc.h", "moc.cpp", "moc_moc.h",
|
||||
"cgo_main_wrapper.go":
|
||||
utils.RemoveAll(path)
|
||||
default:
|
||||
if strings.HasPrefix(info.Name(), "moc_cgo_") ||
|
||||
strings.HasPrefix(info.Name(), "rcc_cgo_") {
|
||||
if !fast {
|
||||
walkFn := func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
switch info.Name() {
|
||||
case "rcc.qrc", "rcc.cpp",
|
||||
"moc.h", "moc.cpp", "moc_moc.h",
|
||||
"cgo_main_wrapper.go":
|
||||
utils.RemoveAll(path)
|
||||
default:
|
||||
if strings.HasPrefix(info.Name(), "moc_cgo_") ||
|
||||
strings.HasPrefix(info.Name(), "rcc_cgo_") {
|
||||
utils.RemoveAll(path)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
filepath.Walk(path, walkFn)
|
||||
}
|
||||
|
||||
if comply {
|
||||
dirs, err := ioutil.ReadDir(depPath + "_obj")
|
||||
if err != nil {
|
||||
utils.Log.WithError(err).Error("failed to read object dir")
|
||||
}
|
||||
|
||||
var randname string
|
||||
for _, dir := range dirs {
|
||||
if strings.HasPrefix(dir.Name(), "go-build") {
|
||||
randname = dir.Name()
|
||||
os.Rename(filepath.Join(depPath+"_obj", dir.Name()), depPath+"_objreal")
|
||||
utils.RemoveAll(depPath + "_obj")
|
||||
os.Rename(depPath+"_objreal", depPath+"_obj")
|
||||
break
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
||||
walkFn := func(fpath string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
switch info.Name() {
|
||||
case "_pkg_.a":
|
||||
case "importcfg.link":
|
||||
pre := utils.Load(fpath)
|
||||
pre = strings.Replace(pre, filepath.Join(depPath+"_obj", randname), ".", -1)
|
||||
utils.Save(fpath, pre)
|
||||
default:
|
||||
if !info.IsDir() || info.Name() == "exe" {
|
||||
utils.RemoveAll(fpath)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
filepath.Walk(depPath+"_obj", walkFn)
|
||||
|
||||
utils.SaveExec(filepath.Join(depPath+"_obj", "relink.sh"), relink(env, target))
|
||||
}
|
||||
filepath.Walk(path, walkFn)
|
||||
}
|
||||
|
||||
func build_sailfish(mode, target, path, ldFlagsCustom, name, depPath string) {
|
||||
|
|
|
@ -12,8 +12,8 @@ import (
|
|||
"github.com/therecipe/qt/internal/utils"
|
||||
)
|
||||
|
||||
func Deploy(mode, target, path string, docker bool, ldFlags, tags string, fast bool, device string, vagrant bool, vagrantsystem string) {
|
||||
utils.Log.WithField("mode", mode).WithField("target", target).WithField("path", path).WithField("docker", docker).WithField("ldFlags", ldFlags).WithField("fast", fast).Debug("running Deploy")
|
||||
func Deploy(mode, target, path string, docker bool, ldFlags, tags string, fast bool, device string, vagrant bool, vagrantsystem string, comply bool) {
|
||||
utils.Log.WithField("mode", mode).WithField("target", target).WithField("path", path).WithField("docker", docker).WithField("ldFlags", ldFlags).WithField("fast", fast).WithField("comply", comply).Debug("running Deploy")
|
||||
name := filepath.Base(path)
|
||||
depPath := filepath.Join(path, "deploy", target)
|
||||
|
||||
|
@ -25,6 +25,9 @@ func Deploy(mode, target, path string, docker bool, ldFlags, tags string, fast b
|
|||
if fast {
|
||||
args = append(args, "-fast")
|
||||
}
|
||||
if comply {
|
||||
args = append(args, "-comply")
|
||||
}
|
||||
if vagrantsystem == "docker" {
|
||||
args = append(args, "-docker")
|
||||
}
|
||||
|
@ -45,6 +48,10 @@ func Deploy(mode, target, path string, docker bool, ldFlags, tags string, fast b
|
|||
}
|
||||
}
|
||||
|
||||
if utils.ExistsDir(depPath + "_obj") {
|
||||
utils.RemoveAll(depPath + "_obj")
|
||||
}
|
||||
|
||||
rcc.Rcc(path, target, tags, os.Getenv("QTRCC_OUTPUT_DIR"))
|
||||
if !fast {
|
||||
moc.Moc(path, target, tags, false, false)
|
||||
|
@ -54,7 +61,7 @@ func Deploy(mode, target, path string, docker bool, ldFlags, tags string, fast b
|
|||
minimal.Minimal(path, target, tags)
|
||||
}
|
||||
|
||||
build(mode, target, path, ldFlags, tags, name, depPath, fast)
|
||||
build(mode, target, path, ldFlags, tags, name, depPath, fast, comply)
|
||||
|
||||
if !(fast || utils.QT_DEBUG_QML()) {
|
||||
bundle(mode, target, path, name, depPath)
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package moc
|
||||
|
||||
import (
|
||||
"crypto/sha1"
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"fmt"
|
||||
"go/ast"
|
||||
|
@ -412,19 +414,105 @@ func parse(path string) ([]*parser.Class, string, error) {
|
|||
continue
|
||||
}
|
||||
|
||||
switch typ := string(src[field.Type.Pos()-1 : field.Type.End()-1]); meta {
|
||||
//TODO: sync, async, lazy, ...
|
||||
//TODO: whole class shims
|
||||
//TODO: multi targets
|
||||
//TODO: private
|
||||
//TODO: qml register tag
|
||||
var (
|
||||
auto int
|
||||
target string
|
||||
inbound bool
|
||||
)
|
||||
if (meta == parser.SIGNAL || meta == parser.SLOT || meta == parser.PROP) && (strings.Contains(tag, ",->") || strings.Contains(tag, ",auto") || strings.Contains(tag, ",<-")) {
|
||||
|
||||
autoTag := strings.Split(tag, ",")[1]
|
||||
|
||||
if strings.Contains(tag, ",->") || strings.Contains(tag, ",auto") {
|
||||
auto = 1
|
||||
autoTag = strings.TrimPrefix(autoTag, "->")
|
||||
autoTag = strings.TrimPrefix(autoTag, "auto")
|
||||
} else {
|
||||
auto = 2
|
||||
autoTag = strings.TrimPrefix(autoTag, "<-")
|
||||
}
|
||||
|
||||
if strings.Contains(autoTag, "(") {
|
||||
if !strings.HasPrefix(autoTag, "(this.") {
|
||||
//TODO: concurrent + cache lookups
|
||||
var found bool
|
||||
for _, imp := range file.Imports {
|
||||
if strings.Contains(autoTag, "("+imp.Name.String()+".") {
|
||||
name := strings.TrimSpace(utils.RunCmd(exec.Command("go", "list", "-f", "{{.Name}}", strings.Replace(imp.Path.Value, "\"", "", -1)), "get import name"))
|
||||
dir := strings.TrimSpace(utils.RunCmd(exec.Command("go", "list", "-f", "{{.Dir}}", strings.Replace(imp.Path.Value, "\"", "", -1)), "get import dir"))
|
||||
|
||||
h := sha1.New()
|
||||
h.Write([]byte(dir))
|
||||
|
||||
mname := "custom_" + name + "_" + hex.EncodeToString(h.Sum(nil)[:3]) + "m"
|
||||
goMocImportsCacheMutex.Lock()
|
||||
goMocImportsCache[path] = append(goMocImportsCache[path], fmt.Sprintf("%v %v", mname, imp.Path.Value))
|
||||
goMocImportsCacheMutex.Unlock()
|
||||
|
||||
autoTag = strings.Replace(autoTag, "("+imp.Name.String()+".", "("+mname+".", -1)
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if !found {
|
||||
for _, imp := range file.Imports {
|
||||
if imp.Name.String() != "<nil>" && imp.Name.String() != "_" {
|
||||
continue
|
||||
}
|
||||
name := strings.TrimSpace(utils.RunCmd(exec.Command("go", "list", "-f", "{{.Name}}", strings.Replace(imp.Path.Value, "\"", "", -1)), "get import name"))
|
||||
if !strings.Contains(autoTag, "("+name+".") {
|
||||
continue
|
||||
}
|
||||
dir := strings.TrimSpace(utils.RunCmd(exec.Command("go", "list", "-f", "{{.Dir}}", strings.Replace(imp.Path.Value, "\"", "", -1)), "get import dir"))
|
||||
|
||||
h := sha1.New()
|
||||
h.Write([]byte(dir))
|
||||
|
||||
mname := "custom_" + name + "_" + hex.EncodeToString(h.Sum(nil)[:3]) + "m"
|
||||
goMocImportsCacheMutex.Lock()
|
||||
goMocImportsCache[path] = append(goMocImportsCache[path], fmt.Sprintf("%v %v", mname, imp.Path.Value))
|
||||
goMocImportsCacheMutex.Unlock()
|
||||
|
||||
autoTag = strings.Replace(autoTag, "("+name+".", "("+mname+".", -1)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
target = strings.TrimSuffix(strings.TrimPrefix(autoTag, "("), ")")
|
||||
}
|
||||
|
||||
tag = strings.Split(tag, ",")[0]
|
||||
}
|
||||
|
||||
name := strings.Split(tag, ":")[1]
|
||||
if name[:1] != strings.ToLower(name[:1]) {
|
||||
inbound = true
|
||||
name = strings.ToLower(name[:1]) + strings.TrimPrefix(name[1:], name[:1])
|
||||
}
|
||||
|
||||
typ := string(src[field.Type.Pos()-1 : field.Type.End()-1])
|
||||
switch meta {
|
||||
case parser.SIGNAL, parser.SLOT:
|
||||
f := &parser.Function{
|
||||
Access: "public",
|
||||
Fullname: fmt.Sprintf("%v::%v", class.Name, strings.Split(tag, ":")[1]),
|
||||
Fullname: fmt.Sprintf("%v::%v", class.Name, name),
|
||||
Meta: meta,
|
||||
Name: strings.Split(tag, ":")[1],
|
||||
Name: name,
|
||||
Status: "public",
|
||||
Virtual: parser.PURE,
|
||||
Signature: "()",
|
||||
Output: "void",
|
||||
Parameters: parameters(typ),
|
||||
IsMocFunction: true,
|
||||
Connect: auto,
|
||||
Target: target,
|
||||
Inbound: inbound,
|
||||
}
|
||||
if meta == parser.SLOT {
|
||||
if strings.Contains(typ, ") ") {
|
||||
|
@ -446,11 +534,17 @@ func parse(path string) ([]*parser.Class, string, error) {
|
|||
case parser.PROP:
|
||||
class.Properties = append(class.Properties,
|
||||
&parser.Variable{
|
||||
Access: "public",
|
||||
Fullname: fmt.Sprintf("%v::%v", class.Name, strings.Split(tag, ":")[1]),
|
||||
Name: strings.Split(tag, ":")[1],
|
||||
Status: "public",
|
||||
Output: typ,
|
||||
Access: "public",
|
||||
Fullname: fmt.Sprintf("%v::%v", class.Name, strings.Split(tag, ":")[1]),
|
||||
Name: strings.Split(tag, ":")[1],
|
||||
Status: "public",
|
||||
Output: typ,
|
||||
Connect: auto,
|
||||
ConnectGet: strings.Contains(field.Tag.Value, ",get"),
|
||||
ConnectSet: strings.Contains(field.Tag.Value, ",set"),
|
||||
ConnectChanged: strings.Contains(field.Tag.Value, ",changed"),
|
||||
Target: target,
|
||||
Inbound: inbound,
|
||||
})
|
||||
|
||||
case parser.CONSTRUCTOR:
|
||||
|
@ -623,11 +717,11 @@ func cppTypeFromGoType(f *parser.Function, t string, class *parser.Class) (strin
|
|||
tOld = strings.Replace(tOld, "$WC_", "chan<- ", -1)
|
||||
tOld = strings.Replace(tOld, "$C_", "chan ", -1)
|
||||
|
||||
//TODO: directly resolve moc pkgs imports in parse ?
|
||||
ttOld := strings.TrimPrefix(tOld, "*")
|
||||
if strings.Contains(tOld, ".") {
|
||||
ttOld = strings.Split(ttOld, ".")[1]
|
||||
}
|
||||
|
||||
if c, ok := parser.State.GoClassMap[ttOld]; ok {
|
||||
if c.Path != class.Path {
|
||||
pos := c.Module + "." + ttOld
|
||||
|
|
136
internal/cmd/moc/test/sub/subb.go
Normal file
136
internal/cmd/moc/test/sub/subb.go
Normal file
|
@ -0,0 +1,136 @@
|
|||
package sub
|
||||
|
||||
import (
|
||||
"github.com/therecipe/qt/core"
|
||||
|
||||
_ "github.com/therecipe/qt/internal/cmd/moc/test/sub/subsub"
|
||||
)
|
||||
|
||||
var SomeType *someType
|
||||
|
||||
type someType struct {
|
||||
core.QObject
|
||||
|
||||
_ bool `property:"someBool,auto"`
|
||||
_ string `property:"someString,auto"`
|
||||
|
||||
_ func(string) `signal:"someSignal,auto"`
|
||||
_ func(string) `slot:"someSlot,auto"`
|
||||
|
||||
_ bool `property:"someBoolB"`
|
||||
_ string `property:"someStringB"`
|
||||
|
||||
_ func(string) `signal:"someSignalB"`
|
||||
_ func(string) `slot:"someSlotB"`
|
||||
|
||||
_ string `property:"someSubProp,->(subsubcustom.SubSubTestStructInstance.subsubProperty)"`
|
||||
_ string `property:"someSubPropA,<-(subsubcustom.SubSubTestStructInstance.subsubProperty)"`
|
||||
|
||||
_ func(string) `signal:"someSignalC,->(subsubcustom.SubSubTestStructInstance.subPropertySignal)"`
|
||||
_ func(string) `slot:"someSlotC,->(subsubcustom.SubSubTestStructInstance.subPropertySlot)"`
|
||||
|
||||
_ func(string) `signal:"SomeSignalD,<-(subsubcustom.SubSubTestStructInstance.subPropertySignal)"`
|
||||
_ func(string) `slot:"SomeSlotD,<-(subsubcustom.SubSubTestStructInstance.subPropertySlot)"`
|
||||
}
|
||||
|
||||
func (t *someType) isSomeBool() bool { return true }
|
||||
func (t *someType) setSomeBool(bool) {}
|
||||
func (t *someType) someBoolChanged(bool) {}
|
||||
|
||||
func (t *someType) someString() string { return "test" }
|
||||
func (t *someType) setSomeString(string) {}
|
||||
func (t *someType) someStringChanged(string) {}
|
||||
|
||||
func (t *someType) someSignal(string) {}
|
||||
func (t *someType) someSlot(string) {}
|
||||
|
||||
type someOtherType struct {
|
||||
core.QObject
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ bool `property:"someBool,->(SomeType)"`
|
||||
_ string `property:"someString,->(SomeType)"`
|
||||
|
||||
_ bool `property:"someBoolA,->(SomeType.someBool)"`
|
||||
_ string `property:"someStringA,->(SomeType.someString)"`
|
||||
|
||||
_ bool `property:"someBoolB,<-(SomeType)"`
|
||||
_ string `property:"someStringB,<-(SomeType)"`
|
||||
|
||||
_ bool `property:"someBoolC,<-(SomeType.someBool)"`
|
||||
_ string `property:"someStringC,<-(SomeType.someString)"`
|
||||
|
||||
_ func(string) `signal:"someSignal,->(SomeType)"`
|
||||
_ func(string) `signal:"someSlot,->(SomeType)"`
|
||||
|
||||
_ func(string) `signal:"someSignalA,->(SomeType.someSignal)"`
|
||||
_ func(string) `signal:"someSlotA,->(SomeType.someSlot)"`
|
||||
|
||||
_ func(string) `signal:"someSignalB,<-(SomeType)"`
|
||||
_ func(string) `signal:"someSlotB,<-(SomeType)"`
|
||||
|
||||
_ func(string) `signal:"someSignalC,<-(SomeType.someSignal)"`
|
||||
_ func(string) `signal:"someSlotC,<-(SomeType.someSlot)"`
|
||||
}
|
||||
|
||||
func (t *someOtherType) init() { SomeType = NewSomeType(nil) }
|
||||
|
||||
func (t *someOtherType) someSignalB(string) {}
|
||||
func (t *someOtherType) someSlotB(string) {}
|
||||
|
||||
func (t *someOtherType) someSignalC(string) {}
|
||||
func (t *someOtherType) someSlotC(string) {}
|
||||
|
||||
type someOtherTypeOut struct {
|
||||
core.QObject
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ bool `property:"someBool,->(this.c)"`
|
||||
_ string `property:"someString,->(this.c)"`
|
||||
|
||||
_ bool `property:"someBoolA,->(this.c.someBool)"`
|
||||
_ string `property:"someStringA,->(this.c.someString)"`
|
||||
|
||||
_ func(string) `signal:"someSignal,->(this.c)"`
|
||||
_ func(string) `signal:"someSlot,->(this.c)"`
|
||||
|
||||
_ func(string) `signal:"someSignalA,->(this.c.someSignal)"`
|
||||
_ func(string) `signal:"someSlotA,->(this.c.someSlot)"`
|
||||
|
||||
c *someType
|
||||
}
|
||||
|
||||
func (t *someOtherTypeOut) init() { t.c = NewSomeType(nil) }
|
||||
|
||||
type someOtherTypeIn struct {
|
||||
core.QObject
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ bool `property:"someBool,<-(this.c)"`
|
||||
_ string `property:"someString,<-(this.c)"`
|
||||
|
||||
_ bool `property:"someBoolA,<-(this.c.someBool)"`
|
||||
_ string `property:"someStringA,<-(this.c.someString)"`
|
||||
|
||||
_ func(string) `signal:"someSignal,<-(this.c)"`
|
||||
_ func(string) `slot:"someSlot,<-(this.c)"`
|
||||
|
||||
_ func(string) `signal:"someSignalA,<-(this.c.someSignal)"`
|
||||
_ func(string) `slot:"someSlotA,<-(this.c.someSlot)"`
|
||||
|
||||
_ func(string) `signal:"SomeSignalB,<-(this.c.someSignal)"`
|
||||
_ func(string) `slot:"SomeSlotB,<-(this.c.someSlot)"`
|
||||
|
||||
c *someType
|
||||
}
|
||||
|
||||
func (t *someOtherTypeIn) init() { t.c = NewSomeType(nil) }
|
||||
|
||||
func (t *someOtherTypeIn) someSignal(string) {}
|
||||
func (t *someOtherTypeIn) someSlot(string) {}
|
||||
|
||||
func (t *someOtherTypeIn) someSignalA(string) {}
|
||||
func (t *someOtherTypeIn) someSlotA(string) {}
|
|
@ -2,16 +2,22 @@ package subsubcustom
|
|||
|
||||
import "github.com/therecipe/qt/gui"
|
||||
|
||||
var SubSubTestStructInstance *SubSubTestStruct
|
||||
|
||||
type SubSubTestStruct struct {
|
||||
gui.QWindow
|
||||
|
||||
_ func() `constructor:"Init"`
|
||||
|
||||
_ func(string) `signal:"subPropertySignal"`
|
||||
_ func(string) `slot:"subPropertySlot"`
|
||||
|
||||
_ string `property:"subsubProperty"`
|
||||
|
||||
SubSubConstructorProperty int
|
||||
}
|
||||
|
||||
func (s *SubSubTestStruct) Init() {
|
||||
SubSubTestStructInstance = s
|
||||
s.SubSubConstructorProperty++
|
||||
}
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
package setup
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os/exec"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"github.com/therecipe/qt/internal/binding/parser"
|
||||
"github.com/therecipe/qt/internal/binding/templater"
|
||||
|
||||
"github.com/therecipe/qt/internal/utils"
|
||||
|
||||
"github.com/therecipe/qt/internal/cmd"
|
||||
"github.com/therecipe/qt/internal/utils"
|
||||
)
|
||||
|
||||
func Generate(target string, docker, vagrant bool) {
|
||||
|
@ -42,5 +43,14 @@ func Generate(target string, docker, vagrant bool) {
|
|||
} else {
|
||||
templater.CgoTemplate(module, "", target, templater.MINIMAL, "", "") //TODO: collect errors
|
||||
}
|
||||
|
||||
if utils.QT_DYNAMIC_SETUP() && mode == "full" {
|
||||
cc, _ := templater.ParseCgo(strings.ToLower(module), target)
|
||||
if cc != "" {
|
||||
cmd := exec.Command("go", "tool", "cgo", utils.GoQtPkgPath(strings.ToLower(module), strings.ToLower(module)+".go"))
|
||||
cmd.Dir = utils.GoQtPkgPath(strings.ToLower(module))
|
||||
utils.RunCmdOptional(cmd, fmt.Sprintf("failed to run cgo for %v (%v) on %v", target, strings.ToLower(module), runtime.GOOS))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,8 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/therecipe/qt/internal/binding/parser"
|
||||
"github.com/therecipe/qt/internal/binding/templater"
|
||||
|
||||
"github.com/therecipe/qt/internal/cmd"
|
||||
"github.com/therecipe/qt/internal/utils"
|
||||
)
|
||||
|
@ -63,6 +65,20 @@ func Install(target string, docker, vagrant bool) {
|
|||
}
|
||||
utils.Log.Infof("installing %v qt/%v", mode, strings.ToLower(module))
|
||||
|
||||
if utils.QT_DYNAMIC_SETUP() && mode == "full" {
|
||||
cc, com := templater.ParseCgo(strings.ToLower(module), target)
|
||||
if cc != "" {
|
||||
cmd := exec.Command(cc, strings.Split(com, " ")...)
|
||||
cmd.Dir = utils.GoQtPkgPath(strings.ToLower(module))
|
||||
utils.RunCmdOptional(cmd, fmt.Sprintf("failed to create dynamic lib for %v (%v) on %v", target, strings.ToLower(module), runtime.GOOS))
|
||||
|
||||
utils.RemoveAll(utils.GoQtPkgPath(strings.ToLower(module), strings.ToLower(module)+".cpp"))
|
||||
utils.RemoveAll(utils.GoQtPkgPath(strings.ToLower(module), "_obj"))
|
||||
|
||||
templater.ReplaceCgo(strings.ToLower(module), target)
|
||||
}
|
||||
}
|
||||
|
||||
cmd := exec.Command("go", "install", "-p", strconv.Itoa(runtime.GOMAXPROCS(0)), "-v")
|
||||
if len(tags) > 0 {
|
||||
cmd.Args = append(cmd.Args, fmt.Sprintf("-tags=\"%v\"", strings.Join(tags, "\" \"")))
|
||||
|
|
|
@ -156,6 +156,7 @@ func Test(target string, docker, vagrant bool, vagrantsystem string) {
|
|||
"",
|
||||
vagrant,
|
||||
vagrantsystem,
|
||||
false,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ type controller struct {
|
|||
func (c *controller) init() {
|
||||
Controller = c
|
||||
|
||||
c.SetLocked(true)
|
||||
c.SetLocked(false) //TODO:
|
||||
|
||||
go c.loop()
|
||||
}
|
||||
|
|
|
@ -13,16 +13,12 @@ type actionButtonTemplate struct {
|
|||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(string) `signal:"showDownload"`
|
||||
_ func(string) `signal:"deleteRequest"`
|
||||
_ func(string) `signal:"showDownload,->(controller.ActionButtonController)"`
|
||||
_ func(string) `signal:"deleteRequest,->(controller.ActionButtonController)"`
|
||||
}
|
||||
|
||||
func (t *actionButtonTemplate) init() {
|
||||
c := controller.ActionButtonController
|
||||
if c == nil {
|
||||
c = controller.NewActionButtonController(nil)
|
||||
if controller.ActionButtonController == nil {
|
||||
controller.NewActionButtonController(nil)
|
||||
}
|
||||
|
||||
t.ConnectShowDownload(c.ShowDownload)
|
||||
t.ConnectDeleteRequest(c.DeleteRequest)
|
||||
}
|
||||
|
|
|
@ -13,14 +13,11 @@ type buttonTemplate struct {
|
|||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(string) `signal:"clicked"`
|
||||
_ func(string) `signal:"clicked,->(controller.ButtonController)"`
|
||||
}
|
||||
|
||||
func (t *buttonTemplate) init() {
|
||||
c := controller.ButtonController
|
||||
if c == nil {
|
||||
c = controller.NewButtonController(nil)
|
||||
if controller.ButtonController == nil {
|
||||
controller.NewButtonController(nil)
|
||||
}
|
||||
|
||||
t.ConnectClicked(c.Clicked)
|
||||
}
|
||||
|
|
|
@ -3,8 +3,8 @@ package controller
|
|||
import (
|
||||
"github.com/therecipe/qt/core"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/controller"
|
||||
dcontroller "github.com/therecipe/qt/internal/examples/showcases/sia/files/dialog/controller"
|
||||
maincontroller "github.com/therecipe/qt/internal/examples/showcases/sia/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/files/dialog/controller"
|
||||
)
|
||||
|
||||
var ActionButtonController *actionButtonController
|
||||
|
@ -14,19 +14,16 @@ type actionButtonController struct {
|
|||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(string) `signal:"showDownload"`
|
||||
_ func(string) `signal:"deleteRequest"`
|
||||
_ func(string) `signal:"showDownload,->(controller.Controller)"`
|
||||
_ func(string) `signal:"deleteRequest,auto"`
|
||||
}
|
||||
|
||||
func (c *actionButtonController) init() {
|
||||
ActionButtonController = c
|
||||
|
||||
c.ConnectShowDownload(dcontroller.Controller.ShowDownload)
|
||||
c.ConnectDeleteRequest(c.deleteRequest)
|
||||
}
|
||||
|
||||
func (c *actionButtonController) deleteRequest(name string) {
|
||||
err := controller.Client.RenterDeletePost(name)
|
||||
err := maincontroller.Client.RenterDeletePost(name)
|
||||
if err != nil {
|
||||
println("Couldn't delete file:", err.Error())
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package controller
|
|||
import (
|
||||
"github.com/therecipe/qt/core"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/files/dialog/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/files/dialog/controller"
|
||||
)
|
||||
|
||||
var ButtonController *buttonController
|
||||
|
@ -13,11 +13,9 @@ type buttonController struct {
|
|||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(string) `signal:"clicked"`
|
||||
_ func(string) `signal:"clicked,->(controller.Controller.Show)"`
|
||||
}
|
||||
|
||||
func (c *buttonController) init() {
|
||||
ButtonController = c
|
||||
|
||||
c.ConnectClicked(controller.Controller.Show)
|
||||
}
|
||||
|
|
|
@ -7,8 +7,8 @@ import (
|
|||
|
||||
"github.com/therecipe/qt/core"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/controller"
|
||||
vcontroller "github.com/therecipe/qt/internal/examples/showcases/sia/view/controller"
|
||||
maincontroller "github.com/therecipe/qt/internal/examples/showcases/sia/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/view/controller"
|
||||
)
|
||||
|
||||
var Controller *dialogController
|
||||
|
@ -20,30 +20,22 @@ type dialogController struct {
|
|||
|
||||
_ func(cident string) `signal:"show"`
|
||||
_ func(string) `signal:"showDownload"`
|
||||
_ func(bool) `signal:"blur"`
|
||||
_ func(bool) `signal:"blur,->(controller.Controller)"`
|
||||
|
||||
_ func([]string) `signal:"uploadFiles"`
|
||||
_ func(string) `signal:"uploadFolder"`
|
||||
_ func(string, string) `signal:"download"`
|
||||
_ func([]string) `signal:"uploadFiles,auto"`
|
||||
_ func(string) `signal:"uploadFolder,auto"`
|
||||
_ func(string, string) `signal:"download,auto"`
|
||||
|
||||
_ func() bool `slot:"isLocked"`
|
||||
_ func() bool `slot:"isLocked,->(maincontroller.Controller)"`
|
||||
}
|
||||
|
||||
func (c *dialogController) init() {
|
||||
Controller = c
|
||||
|
||||
c.ConnectBlur(vcontroller.Controller.Blur)
|
||||
|
||||
c.ConnectUploadFiles(c.uploadFiles)
|
||||
c.ConnectUploadFolder(c.uploadFolder)
|
||||
c.ConnectDownload(c.download)
|
||||
|
||||
c.ConnectIsLocked(controller.Controller.IsLocked)
|
||||
}
|
||||
|
||||
func (c *dialogController) uploadFiles(files []string) {
|
||||
for _, f := range files {
|
||||
go controller.Client.RenterUploadPost("/renter/upload/"+filepath.Base(f), "source="+f, 1, 1) //TODO: dataPieces, parityPieces ?
|
||||
go maincontroller.Client.RenterUploadPost("/renter/upload/"+filepath.Base(f), "source="+f, 1, 1) //TODO: dataPieces, parityPieces ?
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -68,7 +60,7 @@ func (c *dialogController) uploadFolder(source string) {
|
|||
|
||||
func (c *dialogController) download(name, path string) {
|
||||
go func() {
|
||||
err := controller.Client.RenterDownloadGet(name, path, 0, 1, true) //TODO: offset, lenght, async ?
|
||||
err := maincontroller.Client.RenterDownloadGet(name, path, 0, 1, true) //TODO: offset, lenght, async ?
|
||||
if err != nil {
|
||||
println("Could not download file:", err.Error())
|
||||
}
|
||||
|
|
|
@ -12,18 +12,14 @@ type filesDialogTemplate struct {
|
|||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(cident string) `signal:"show"`
|
||||
_ func(bool) `signal:"blur"`
|
||||
_ func(cident string) `signal:"show,<-(fcontroller.Controller)"`
|
||||
_ func(bool) `signal:"blur,->(fcontroller.Controller)"`
|
||||
}
|
||||
|
||||
func (t *filesDialogTemplate) init() {
|
||||
c := fcontroller.Controller
|
||||
if c == nil {
|
||||
c = fcontroller.NewDialogController(nil)
|
||||
if fcontroller.Controller == nil {
|
||||
fcontroller.NewDialogController(nil)
|
||||
}
|
||||
|
||||
c.ConnectShow(t.show)
|
||||
t.ConnectBlur(c.Blur)
|
||||
}
|
||||
|
||||
func (t *filesDialogTemplate) show(cident string) {
|
||||
|
|
|
@ -3,20 +3,13 @@ package dialog
|
|||
import (
|
||||
"github.com/therecipe/qt/widgets"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/files/dialog/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/files/dialog/controller"
|
||||
)
|
||||
|
||||
type filesUploadTemplate struct {
|
||||
filesDialogTemplate
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func([]string) `slot:"uploadFiles"`
|
||||
}
|
||||
|
||||
func (t *filesUploadTemplate) init() {
|
||||
t.ConnectUploadFiles(controller.Controller.UploadFiles)
|
||||
t.ConnectShow(t.show)
|
||||
_ func([]string) `slot:"uploadFiles,->(controller.Controller)"`
|
||||
}
|
||||
|
||||
func (t *filesUploadTemplate) show(cident string) {
|
||||
|
|
|
@ -3,24 +3,16 @@ package dialog
|
|||
import (
|
||||
"github.com/therecipe/qt/widgets"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/files/dialog/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/files/dialog/controller"
|
||||
)
|
||||
|
||||
type folderUploadTemplate struct {
|
||||
filesDialogTemplate
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
_ func(string) `signal:"uploadFolder,->(controller.Controller)"`
|
||||
|
||||
_ func(string) `signal:"uploadFolder"`
|
||||
_ func(string, string) `signal:"download"`
|
||||
}
|
||||
|
||||
func (t *folderUploadTemplate) init() {
|
||||
t.ConnectUploadFolder(controller.Controller.UploadFolder)
|
||||
t.ConnectShow(t.show)
|
||||
|
||||
t.ConnectDownload(controller.Controller.Download)
|
||||
controller.Controller.ConnectShowDownload(t.showDownload)
|
||||
_ func(string, string) `signal:"download,->(controller.Controller)"`
|
||||
_ func(string) `signal:"showDownload,<-(controller.Controller)"`
|
||||
}
|
||||
|
||||
func (t *folderUploadTemplate) show(cident string) {
|
||||
|
|
|
@ -21,7 +21,7 @@ type FilesModel struct {
|
|||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func([]File) `signal:"updateWith"`
|
||||
_ func([]File) `signal:"updateWith,auto"`
|
||||
}
|
||||
|
||||
func (m *FilesModel) init() {
|
||||
|
@ -34,7 +34,6 @@ func (m *FilesModel) init() {
|
|||
m.ConnectColumnCount(func(*core.QModelIndex) int { return 4 }) //needed for sort filter model
|
||||
m.ConnectData(m.data)
|
||||
m.ConnectRoleNames(m.roleNames)
|
||||
m.ConnectUpdateWith(m.updateWith)
|
||||
}
|
||||
|
||||
func (m *FilesModel) rowCount(parent *core.QModelIndex) int {
|
||||
|
|
|
@ -15,13 +15,7 @@ var PathToSiac string
|
|||
type terminalController struct {
|
||||
core.QObject
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(cmd string) string `slot:"command"`
|
||||
}
|
||||
|
||||
func (c *terminalController) init() {
|
||||
c.ConnectCommand(c.command)
|
||||
_ func(cmd string) string `slot:"command,auto"`
|
||||
}
|
||||
|
||||
func (c *terminalController) command(cmd string) string {
|
||||
|
|
|
@ -3,7 +3,7 @@ package terminal
|
|||
import (
|
||||
"github.com/therecipe/qt/quick"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/terminal/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/terminal/controller"
|
||||
)
|
||||
|
||||
func init() { terminalTemplate_QmlRegisterType2("TerminalTemplate", 1, 0, "TerminalTemplate") }
|
||||
|
@ -11,13 +11,5 @@ func init() { terminalTemplate_QmlRegisterType2("TerminalTemplate", 1, 0, "Termi
|
|||
type terminalTemplate struct {
|
||||
quick.QQuickItem
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(cmd string) string `slot:"command"`
|
||||
}
|
||||
|
||||
func (t *terminalTemplate) init() {
|
||||
c := controller.NewTerminalController(nil)
|
||||
|
||||
t.ConnectCommand(c.Command)
|
||||
_ func(cmd string) string `slot:"command,->(controller.NewTerminalController(nil))"`
|
||||
}
|
||||
|
|
|
@ -2,63 +2,44 @@ package controller
|
|||
|
||||
import "github.com/therecipe/qt/core"
|
||||
|
||||
var Controller *themeController
|
||||
var Controller *ThemeController
|
||||
|
||||
type themeController struct {
|
||||
type ThemeController struct {
|
||||
core.QObject
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ string `property:"name"`
|
||||
_ string `property:"name,auto,changed"`
|
||||
|
||||
_ string `property:"accent"`
|
||||
_ string `property:"nextAccent"`
|
||||
_ string `property:"accent,auto,get"`
|
||||
_ string `property:"nextAccent,auto,get"`
|
||||
|
||||
_ string `property:"background"`
|
||||
_ string `property:"darkBackground"`
|
||||
_ string `property:"background,auto,get"`
|
||||
_ string `property:"darkBackground,auto,get"`
|
||||
|
||||
_ string `property:"walletTableHeader"`
|
||||
_ string `property:"walletTableAlternate"`
|
||||
_ string `property:"walletTableHighlight"`
|
||||
_ string `property:"walletTableHeader,auto,get"`
|
||||
_ string `property:"walletTableAlternate,auto,get"`
|
||||
_ string `property:"walletTableHighlight,auto,get"`
|
||||
|
||||
_ string `property:"inputFieldBackground"`
|
||||
_ string `property:"inputFieldBackground,auto,get"`
|
||||
|
||||
_ string `property:"font"`
|
||||
_ string `property:"fontHighlight"`
|
||||
_ string `property:"font,auto,get"`
|
||||
_ string `property:"fontHighlight,auto,get"`
|
||||
|
||||
_ func() `signal:"change"`
|
||||
_ func() `signal:"change,auto"`
|
||||
|
||||
_ func() `signal:"hide"`
|
||||
}
|
||||
|
||||
func (c *themeController) init() {
|
||||
func (c *ThemeController) init() {
|
||||
Controller = c
|
||||
|
||||
c.ConnectNameChanged(c.nameChanged)
|
||||
|
||||
c.ConnectAccent(c.accent)
|
||||
c.ConnectNextAccent(c.nextAccent)
|
||||
|
||||
c.ConnectBackground(c.background)
|
||||
c.ConnectDarkBackground(c.darkBackground)
|
||||
|
||||
c.ConnectWalletTableHeader(c.walletTableHeader)
|
||||
c.ConnectWalletTableAlternate(c.walletTableAlternate)
|
||||
c.ConnectWalletTableHighlight(c.walletTableHighlight)
|
||||
|
||||
c.ConnectInputFieldBackground(c.inputFieldBackground)
|
||||
|
||||
c.ConnectFont(c.font)
|
||||
c.ConnectFontHighlight(c.fontHighlight)
|
||||
|
||||
c.SetName("dark")
|
||||
|
||||
c.ConnectChange(c.change)
|
||||
|
||||
initColorDialog()
|
||||
}
|
||||
|
||||
func (c *themeController) nameChanged(string) {
|
||||
func (c *ThemeController) nameChanged(string) {
|
||||
c.AccentChanged(c.Accent())
|
||||
c.NextAccentChanged(c.NextAccent())
|
||||
|
||||
|
@ -75,7 +56,7 @@ func (c *themeController) nameChanged(string) {
|
|||
c.FontHighlightChanged(c.FontHighlight())
|
||||
}
|
||||
|
||||
func (c *themeController) accent() string {
|
||||
func (c *ThemeController) accent() string {
|
||||
if color := c.AccentDefault(); color != "" {
|
||||
return color
|
||||
}
|
||||
|
@ -89,7 +70,7 @@ func (c *themeController) accent() string {
|
|||
}
|
||||
}
|
||||
|
||||
func (c *themeController) nextAccent() string {
|
||||
func (c *ThemeController) nextAccent() string {
|
||||
if color := c.NextAccentDefault(); color != "" {
|
||||
return color
|
||||
}
|
||||
|
@ -103,7 +84,7 @@ func (c *themeController) nextAccent() string {
|
|||
}
|
||||
}
|
||||
|
||||
func (c *themeController) background() string {
|
||||
func (c *ThemeController) background() string {
|
||||
if color := c.BackgroundDefault(); color != "" {
|
||||
return color
|
||||
}
|
||||
|
@ -117,7 +98,7 @@ func (c *themeController) background() string {
|
|||
}
|
||||
}
|
||||
|
||||
func (c *themeController) darkBackground() string {
|
||||
func (c *ThemeController) darkBackground() string {
|
||||
if color := c.DarkBackgroundDefault(); color != "" {
|
||||
return color
|
||||
}
|
||||
|
@ -131,7 +112,7 @@ func (c *themeController) darkBackground() string {
|
|||
}
|
||||
}
|
||||
|
||||
func (c *themeController) walletTableHeader() string {
|
||||
func (c *ThemeController) walletTableHeader() string {
|
||||
if color := c.WalletTableHeaderDefault(); color != "" {
|
||||
return color
|
||||
}
|
||||
|
@ -145,7 +126,7 @@ func (c *themeController) walletTableHeader() string {
|
|||
}
|
||||
}
|
||||
|
||||
func (c *themeController) walletTableAlternate() string {
|
||||
func (c *ThemeController) walletTableAlternate() string {
|
||||
if color := c.WalletTableAlternateDefault(); color != "" {
|
||||
return color
|
||||
}
|
||||
|
@ -159,7 +140,7 @@ func (c *themeController) walletTableAlternate() string {
|
|||
}
|
||||
}
|
||||
|
||||
func (c *themeController) walletTableHighlight() string {
|
||||
func (c *ThemeController) walletTableHighlight() string {
|
||||
if color := c.WalletTableHighlightDefault(); color != "" {
|
||||
return color
|
||||
}
|
||||
|
@ -173,7 +154,7 @@ func (c *themeController) walletTableHighlight() string {
|
|||
}
|
||||
}
|
||||
|
||||
func (c *themeController) inputFieldBackground() string {
|
||||
func (c *ThemeController) inputFieldBackground() string {
|
||||
if color := c.InputFieldBackgroundDefault(); color != "" {
|
||||
return color
|
||||
}
|
||||
|
@ -187,7 +168,7 @@ func (c *themeController) inputFieldBackground() string {
|
|||
}
|
||||
}
|
||||
|
||||
func (c *themeController) font() string {
|
||||
func (c *ThemeController) font() string {
|
||||
if color := c.FontDefault(); color != "" {
|
||||
return color
|
||||
}
|
||||
|
@ -201,7 +182,7 @@ func (c *themeController) font() string {
|
|||
}
|
||||
}
|
||||
|
||||
func (c *themeController) fontHighlight() string {
|
||||
func (c *ThemeController) fontHighlight() string {
|
||||
if color := c.FontHighlightDefault(); color != "" {
|
||||
return color
|
||||
}
|
||||
|
@ -215,7 +196,7 @@ func (c *themeController) fontHighlight() string {
|
|||
}
|
||||
}
|
||||
|
||||
func (c *themeController) change() {
|
||||
func (c *ThemeController) change() {
|
||||
colorDialog.Show()
|
||||
//TODO: there is no light theme yet
|
||||
/*
|
||||
|
|
|
@ -13,52 +13,24 @@ type themeTemplate struct {
|
|||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ string `property:"accent"`
|
||||
_ string `property:"nextAccent"`
|
||||
_ string `property:"accent,<-(this.c)"`
|
||||
_ string `property:"nextAccent,<-(this.c)"`
|
||||
|
||||
_ string `property:"background"`
|
||||
_ string `property:"darkBackground"`
|
||||
_ string `property:"background,<-(this.c)"`
|
||||
_ string `property:"darkBackground,<-(this.c)"`
|
||||
|
||||
_ string `property:"walletTableHeader"`
|
||||
_ string `property:"walletTableAlternate"`
|
||||
_ string `property:"walletTableHighlight"`
|
||||
_ string `property:"walletTableHeader,<-(this.c)"`
|
||||
_ string `property:"walletTableAlternate,<-(this.c)"`
|
||||
_ string `property:"walletTableHighlight,<-(this.c)"`
|
||||
|
||||
_ string `property:"inputFieldBackground"`
|
||||
_ string `property:"inputFieldBackground,<-(this.c)"`
|
||||
|
||||
_ string `property:"font"`
|
||||
_ string `property:"fontHighlight"`
|
||||
_ string `property:"font,<-(this.c)"`
|
||||
_ string `property:"fontHighlight,<-(this.c)"`
|
||||
|
||||
c *controller.ThemeController
|
||||
}
|
||||
|
||||
func (t *themeTemplate) init() {
|
||||
c := controller.NewThemeController(nil)
|
||||
|
||||
t.ConnectAccent(c.Accent)
|
||||
c.ConnectAccentChanged(t.AccentChanged)
|
||||
|
||||
t.ConnectNextAccent(c.NextAccent)
|
||||
c.ConnectNextAccentChanged(t.NextAccentChanged)
|
||||
|
||||
t.ConnectBackground(c.Background)
|
||||
c.ConnectBackgroundChanged(t.BackgroundChanged)
|
||||
|
||||
t.ConnectDarkBackground(c.DarkBackground)
|
||||
c.ConnectDarkBackgroundChanged(t.DarkBackgroundChanged)
|
||||
|
||||
t.ConnectWalletTableHeader(c.WalletTableHeader)
|
||||
c.ConnectWalletTableHeaderChanged(t.WalletTableHeaderChanged)
|
||||
|
||||
t.ConnectWalletTableAlternate(c.WalletTableAlternate)
|
||||
c.ConnectWalletTableAlternateChanged(t.WalletTableAlternateChanged)
|
||||
|
||||
t.ConnectWalletTableHighlight(c.WalletTableHighlight)
|
||||
c.ConnectWalletTableHighlightChanged(t.WalletTableHighlightChanged)
|
||||
|
||||
t.ConnectInputFieldBackground(c.InputFieldBackground)
|
||||
c.ConnectInputFieldBackgroundChanged(t.InputFieldBackgroundChanged)
|
||||
|
||||
t.ConnectFont(c.Font)
|
||||
c.ConnectFontChanged(t.FontChanged)
|
||||
|
||||
t.ConnectFontHighlight(c.FontHighlight)
|
||||
c.ConnectFontHighlightChanged(t.FontHighlightChanged)
|
||||
t.c = controller.NewThemeController(nil)
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package left
|
|||
import (
|
||||
"github.com/therecipe/qt/quick"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/view/left/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/view/left/controller"
|
||||
)
|
||||
|
||||
func init() { buttonTemplate_QmlRegisterType2("LeftTemplate", 1, 0, "ButtonTemplate") }
|
||||
|
@ -11,13 +11,5 @@ func init() { buttonTemplate_QmlRegisterType2("LeftTemplate", 1, 0, "ButtonTempl
|
|||
type buttonTemplate struct {
|
||||
quick.QQuickItem
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(string) `signal:"clicked"`
|
||||
}
|
||||
|
||||
func (t *buttonTemplate) init() {
|
||||
c := controller.NewButtonController(nil)
|
||||
|
||||
t.ConnectClicked(c.Clicked)
|
||||
_ func(string) `signal:"clicked,->(controller.NewButtonController(nil))"`
|
||||
}
|
||||
|
|
|
@ -9,12 +9,8 @@ import (
|
|||
type buttonController struct {
|
||||
core.QObject
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(code string) `signal:"clicked"`
|
||||
_ func(code string) `signal:"clicked,auto"`
|
||||
}
|
||||
|
||||
func (c *buttonController) init() {
|
||||
//lazy binding to the view/stack controller
|
||||
c.ConnectClicked(func(code string) { controller.StackController.Clicked(code) })
|
||||
}
|
||||
//lazy binding to the view/stack controller
|
||||
func (c *buttonController) clicked(code string) { controller.StackController.Clicked(code) }
|
||||
|
|
|
@ -8,13 +8,7 @@ import (
|
|||
type logoController struct {
|
||||
core.QObject
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func() `signal:"clicked"`
|
||||
}
|
||||
|
||||
func (c *logoController) init() {
|
||||
c.ConnectClicked(c.clicked)
|
||||
_ func() `signal:"clicked,auto"`
|
||||
}
|
||||
|
||||
func (c *logoController) clicked() {
|
||||
|
|
|
@ -12,29 +12,22 @@ import (
|
|||
"github.com/therecipe/qt/internal/examples/showcases/sia/controller"
|
||||
)
|
||||
|
||||
type progressBarController struct {
|
||||
type ProgressBarController struct {
|
||||
core.QObject
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ string `property:"text"`
|
||||
_ float64 `property:"value"`
|
||||
|
||||
_ func() `signal:"clicked"`
|
||||
_ func() `signal:"clicked,auto"`
|
||||
|
||||
_ func(types.BlockHeight) `signal:"heightChanged,<-(controller.Controller)"`
|
||||
}
|
||||
|
||||
func (c *progressBarController) init() {
|
||||
|
||||
controller.Controller.ConnectHeightChanged(c.heightChanged)
|
||||
|
||||
c.ConnectClicked(c.clicked)
|
||||
}
|
||||
|
||||
func (c *progressBarController) clicked() {
|
||||
func (c *ProgressBarController) clicked() {
|
||||
gui.QDesktopServices_OpenUrl(core.NewQUrl3("https://explore.sia.tech", 0))
|
||||
}
|
||||
|
||||
func (c *progressBarController) heightChanged(height types.BlockHeight) {
|
||||
func (c *ProgressBarController) heightChanged(height types.BlockHeight) {
|
||||
if controller.Controller.IsSynced() {
|
||||
c.SetText(fmt.Sprintf("BH: %v", controller.Controller.Height()))
|
||||
c.SetValue(100)
|
||||
|
|
|
@ -3,7 +3,7 @@ package left
|
|||
import (
|
||||
"github.com/therecipe/qt/quick"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/view/left/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/view/left/controller"
|
||||
)
|
||||
|
||||
func init() { leftTemplate_QmlRegisterType2("LeftTemplate", 1, 0, "LeftTemplate") }
|
||||
|
@ -11,12 +11,5 @@ func init() { leftTemplate_QmlRegisterType2("LeftTemplate", 1, 0, "LeftTemplate"
|
|||
type leftTemplate struct {
|
||||
quick.QQuickItem
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(cident string) `signal:"clicked"`
|
||||
}
|
||||
|
||||
func (t *leftTemplate) init() {
|
||||
c := controller.NewLeftController(nil)
|
||||
c.ConnectClicked(t.Clicked)
|
||||
_ func(cident string) `signal:"Clicked,<-(controller.NewLeftController(nil))"`
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package left
|
|||
import (
|
||||
"github.com/therecipe/qt/quick"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/view/left/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/view/left/controller"
|
||||
)
|
||||
|
||||
func init() { logoTemplate_QmlRegisterType2("LeftTemplate", 1, 0, "LogoTemplate") }
|
||||
|
@ -11,13 +11,5 @@ func init() { logoTemplate_QmlRegisterType2("LeftTemplate", 1, 0, "LogoTemplate"
|
|||
type logoTemplate struct {
|
||||
quick.QQuickItem
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func() `signal:"clicked"`
|
||||
}
|
||||
|
||||
func (t *logoTemplate) init() {
|
||||
c := controller.NewLogoController(nil)
|
||||
|
||||
t.ConnectClicked(c.Clicked)
|
||||
_ func() `signal:"clicked,->(controller.NewLogoController(nil))"`
|
||||
}
|
||||
|
|
|
@ -13,20 +13,14 @@ type progressBarTemplate struct {
|
|||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ string `property:"text"`
|
||||
_ float64 `property:"value"`
|
||||
_ string `property:"text,<-(this.c)"`
|
||||
_ float64 `property:"value,<-(this.c)"`
|
||||
|
||||
_ func() `signal:"clicked"`
|
||||
_ func() `signal:"clicked,->(this.c)"`
|
||||
|
||||
c *controller.ProgressBarController
|
||||
}
|
||||
|
||||
func (t *progressBarTemplate) init() {
|
||||
c := controller.NewProgressBarController(nil)
|
||||
|
||||
t.ConnectText(c.Text)
|
||||
c.ConnectTextChanged(t.TextChanged)
|
||||
|
||||
t.ConnectValue(c.Value)
|
||||
c.ConnectValueChanged(t.ValueChanged)
|
||||
|
||||
t.ConnectClicked(c.Clicked)
|
||||
t.c = controller.NewProgressBarController(nil)
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package view
|
|||
import (
|
||||
"github.com/therecipe/qt/quick"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/view/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/view/controller"
|
||||
)
|
||||
|
||||
func init() { stackTemplate_QmlRegisterType2("ViewTemplate", 1, 0, "StackTemplate") }
|
||||
|
@ -11,13 +11,5 @@ func init() { stackTemplate_QmlRegisterType2("ViewTemplate", 1, 0, "StackTemplat
|
|||
type stackTemplate struct {
|
||||
quick.QQuickItem
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(code string) `signal:"clicked"`
|
||||
}
|
||||
|
||||
func (t *stackTemplate) init() {
|
||||
c := controller.NewStackController(nil)
|
||||
|
||||
c.ConnectClicked(t.Clicked)
|
||||
_ func(code string) `signal:"Clicked,<-(controller.NewStackController(nil))"`
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package top
|
|||
import (
|
||||
"github.com/therecipe/qt/quick"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/view/top/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/view/top/controller"
|
||||
)
|
||||
|
||||
func init() { colorTemplate_QmlRegisterType2("TopTemplate", 1, 0, "ColorTemplate") }
|
||||
|
@ -11,13 +11,5 @@ func init() { colorTemplate_QmlRegisterType2("TopTemplate", 1, 0, "ColorTemplate
|
|||
type colorTemplate struct {
|
||||
quick.QQuickItem
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func() `signal:"change"`
|
||||
}
|
||||
|
||||
func (t *colorTemplate) init() {
|
||||
c := controller.NewColorController(nil)
|
||||
|
||||
t.ConnectChange(c.Change)
|
||||
_ func() `signal:"change,->(controller.NewColorController(nil))"`
|
||||
}
|
||||
|
|
|
@ -9,12 +9,8 @@ import (
|
|||
type colorController struct {
|
||||
core.QObject
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func() `signal:"change"`
|
||||
_ func() `signal:"change,auto"`
|
||||
}
|
||||
|
||||
func (c *colorController) init() {
|
||||
//lazy binding to the (qml singleton) theme controller
|
||||
c.ConnectChange(func() { controller.Controller.Change() })
|
||||
}
|
||||
//lazy binding to the (qml singleton) theme controller
|
||||
func (c *colorController) change() { controller.Controller.Change() }
|
||||
|
|
|
@ -9,26 +9,15 @@ import (
|
|||
dcontroller "github.com/therecipe/qt/internal/examples/showcases/sia/wallet/dialog/controller"
|
||||
)
|
||||
|
||||
type lockController struct {
|
||||
type LockController struct {
|
||||
core.QObject
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
_ bool `property:"locked,<-(controller.Controller)"`
|
||||
|
||||
_ bool `property:"locked"`
|
||||
|
||||
_ func() `signal:"change"`
|
||||
_ func() `signal:"change,auto"`
|
||||
}
|
||||
|
||||
func (c *lockController) init() {
|
||||
|
||||
c.ConnectIsLocked(controller.Controller.IsLocked)
|
||||
c.ConnectSetLocked(controller.Controller.SetLocked)
|
||||
controller.Controller.ConnectLockedChanged(c.LockedChanged)
|
||||
|
||||
c.ConnectChange(c.change)
|
||||
}
|
||||
|
||||
func (c *lockController) change() {
|
||||
func (c *LockController) change() {
|
||||
if c.IsLocked() {
|
||||
dcontroller.Controller.Show("unlock")
|
||||
} else {
|
||||
|
|
|
@ -10,13 +10,7 @@ import (
|
|||
type searchController struct {
|
||||
core.QObject
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(string) `signal:"search"`
|
||||
}
|
||||
|
||||
func (c *searchController) init() {
|
||||
c.ConnectSearch(c.search)
|
||||
_ func(string) `signal:"search,auto"`
|
||||
}
|
||||
|
||||
func (c *searchController) search(name string) {
|
||||
|
|
|
@ -9,23 +9,19 @@ import (
|
|||
"github.com/NebulousLabs/Sia/node/api"
|
||||
"github.com/NebulousLabs/Sia/types"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/controller"
|
||||
)
|
||||
|
||||
type statusController struct {
|
||||
type StatusController struct {
|
||||
core.QObject
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ string `property:"balance"`
|
||||
_ string `property:"delta"`
|
||||
|
||||
_ func(interface{}) `signal:"wallet,<-(controller.Controller.WalletChanged)"`
|
||||
}
|
||||
|
||||
func (c *statusController) init() {
|
||||
controller.Controller.ConnectWalletChanged(c.wallet)
|
||||
}
|
||||
|
||||
func (c *statusController) wallet(wgI interface{}) {
|
||||
func (c *StatusController) wallet(wgI interface{}) {
|
||||
wg := wgI.(api.WalletGET)
|
||||
if wg.Unlocked {
|
||||
confirmedFloat, _ := new(big.Rat).SetFrac(wg.ConfirmedSiacoinBalance.Big(), types.SiacoinPrecision.Big()).Float64()
|
||||
|
|
|
@ -4,10 +4,4 @@ import "github.com/therecipe/qt/core"
|
|||
|
||||
type topController struct {
|
||||
core.QObject
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
}
|
||||
|
||||
func (c *topController) init() {
|
||||
|
||||
}
|
||||
|
|
|
@ -13,16 +13,13 @@ type lockTemplate struct {
|
|||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ bool `property:"locked"`
|
||||
_ bool `property:"locked,<-(this.c)"`
|
||||
|
||||
_ func() `signal:"change"`
|
||||
_ func() `signal:"change,->(this.c)"`
|
||||
|
||||
c *controller.LockController
|
||||
}
|
||||
|
||||
func (t *lockTemplate) init() {
|
||||
c := controller.NewLockController(nil)
|
||||
|
||||
t.ConnectIsLocked(c.IsLocked)
|
||||
c.ConnectLockedChanged(t.LockedChanged)
|
||||
|
||||
t.ConnectChange(c.Change)
|
||||
t.c = controller.NewLockController(nil)
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package top
|
|||
import (
|
||||
"github.com/therecipe/qt/quick"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/view/top/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/view/top/controller"
|
||||
)
|
||||
|
||||
func init() { searchTemplate_QmlRegisterType2("TopTemplate", 1, 0, "SearchTemplate") }
|
||||
|
@ -11,13 +11,5 @@ func init() { searchTemplate_QmlRegisterType2("TopTemplate", 1, 0, "SearchTempla
|
|||
type searchTemplate struct {
|
||||
quick.QQuickItem
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(string) `signal:"search"`
|
||||
}
|
||||
|
||||
func (t *searchTemplate) init() {
|
||||
c := controller.NewSearchController(nil)
|
||||
|
||||
t.ConnectSearch(c.Search)
|
||||
_ func(string) `signal:"search,->(controller.NewSearchController(nil))"`
|
||||
}
|
||||
|
|
|
@ -13,16 +13,12 @@ type statusTemplate struct {
|
|||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ string `property:"balance"`
|
||||
_ string `property:"delta"`
|
||||
_ string `property:"balance,<-(this.c)"`
|
||||
_ string `property:"delta,<-(this.c)"`
|
||||
|
||||
c *controller.StatusController
|
||||
}
|
||||
|
||||
func (t *statusTemplate) init() {
|
||||
c := controller.NewStatusController(nil)
|
||||
|
||||
t.ConnectBalance(c.Balance)
|
||||
c.ConnectBalanceChanged(t.BalanceChanged)
|
||||
|
||||
t.ConnectDelta(c.Delta)
|
||||
c.ConnectDeltaChanged(t.DeltaChanged)
|
||||
t.c = controller.NewStatusController(nil)
|
||||
}
|
||||
|
|
|
@ -6,10 +6,4 @@ func init() { topTemplate_QmlRegisterType2("TopTemplate", 1, 0, "TopTemplate") }
|
|||
|
||||
type topTemplate struct {
|
||||
quick.QQuickItem
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
}
|
||||
|
||||
func (t *topTemplate) init() {
|
||||
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package view
|
|||
import (
|
||||
"github.com/therecipe/qt/quick"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/view/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/view/controller"
|
||||
)
|
||||
|
||||
func init() { viewTemplate_QmlRegisterType2("ViewTemplate", 1, 0, "ViewTemplate") }
|
||||
|
@ -11,13 +11,5 @@ func init() { viewTemplate_QmlRegisterType2("ViewTemplate", 1, 0, "ViewTemplate"
|
|||
type viewTemplate struct {
|
||||
quick.QQuickItem
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(b bool) `signal:"blur"`
|
||||
}
|
||||
|
||||
func (t *viewTemplate) init() {
|
||||
c := controller.NewViewController(nil)
|
||||
|
||||
c.ConnectBlur(t.Blur)
|
||||
_ func(b bool) `signal:"Blur,<-(controller.NewViewController(nil))"`
|
||||
}
|
||||
|
|
|
@ -13,14 +13,11 @@ type buttonTemplate struct {
|
|||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(string) `signal:"clicked"`
|
||||
_ func(string) `signal:"clicked,->(controller.ButtonController)"`
|
||||
}
|
||||
|
||||
func (t *buttonTemplate) init() {
|
||||
c := controller.ButtonController
|
||||
if c == nil {
|
||||
c = controller.NewButtonController(nil)
|
||||
if controller.ButtonController == nil {
|
||||
controller.NewButtonController(nil)
|
||||
}
|
||||
|
||||
t.ConnectClicked(c.Clicked)
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package controller
|
|||
import (
|
||||
"github.com/therecipe/qt/core"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/wallet/dialog/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/wallet/dialog/controller"
|
||||
)
|
||||
|
||||
var ButtonController *buttonController
|
||||
|
@ -13,11 +13,9 @@ type buttonController struct {
|
|||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(string) `signal:"clicked"`
|
||||
_ func(string) `signal:"clicked,->(controller.Controller.Show)"`
|
||||
}
|
||||
|
||||
func (c *buttonController) init() {
|
||||
ButtonController = c
|
||||
|
||||
c.ConnectClicked(controller.Controller.Show)
|
||||
}
|
||||
|
|
|
@ -15,33 +15,31 @@ import (
|
|||
"github.com/therecipe/qt/internal/examples/showcases/sia/wallet/model"
|
||||
)
|
||||
|
||||
var Controller *walletController
|
||||
var Controller *WalletController
|
||||
|
||||
type walletController struct {
|
||||
type WalletController struct {
|
||||
core.QObject
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ *model.WalletModel `property:"model"`
|
||||
|
||||
_ func(ID string) `signal:"doubleClicked"`
|
||||
_ func(ID string) `signal:"doubleClicked,auto"`
|
||||
}
|
||||
|
||||
func (c *walletController) init() {
|
||||
func (c *WalletController) init() {
|
||||
Controller = c
|
||||
|
||||
c.SetModel(model.NewWalletModel(nil))
|
||||
|
||||
c.ConnectDoubleClicked(c.doubleClicked)
|
||||
|
||||
go c.loop()
|
||||
}
|
||||
|
||||
func (c *walletController) doubleClicked(ID string) {
|
||||
func (c *WalletController) doubleClicked(ID string) {
|
||||
gui.QDesktopServices_OpenUrl(core.NewQUrl3(fmt.Sprintf("https://explore.sia.tech/hash.html?hash=%v", ID), 0))
|
||||
}
|
||||
|
||||
func (c *walletController) loop() {
|
||||
func (c *WalletController) loop() {
|
||||
for range time.NewTicker(1 * time.Second).C {
|
||||
|
||||
wtg, err := controller.Client.WalletTransactionsGet(0, 10000000)
|
||||
|
|
|
@ -12,8 +12,8 @@ import (
|
|||
"github.com/NebulousLabs/Sia/node/api"
|
||||
"github.com/NebulousLabs/Sia/types"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/controller"
|
||||
vcontroller "github.com/therecipe/qt/internal/examples/showcases/sia/view/controller"
|
||||
maincontroller "github.com/therecipe/qt/internal/examples/showcases/sia/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/view/controller"
|
||||
)
|
||||
|
||||
var Controller *dialogController
|
||||
|
@ -24,31 +24,22 @@ type dialogController struct {
|
|||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(cident string) `signal:"show"`
|
||||
_ func(bool) `signal:"blur"`
|
||||
_ func(bool) `signal:"blur,->(controller.Controller)"`
|
||||
|
||||
_ func(password string) *core.QVariant `slot:"unlock"`
|
||||
_ func() string `slot:"receive"`
|
||||
_ func(amount, dest string) *core.QVariant `slot:"send"`
|
||||
_ func(seed string) *core.QVariant `slot:"recover"`
|
||||
_ func(password string) *core.QVariant `slot:"unlock,auto"`
|
||||
_ func() string `slot:"receive,auto"`
|
||||
_ func(amount, dest string) *core.QVariant `slot:"send,auto"`
|
||||
_ func(seed string) *core.QVariant `slot:"recover,auto"`
|
||||
|
||||
_ func() bool `slot:"isLocked"`
|
||||
_ func() bool `slot:"isLocked,->(maincontroller.Controller)"`
|
||||
}
|
||||
|
||||
func (c *dialogController) init() {
|
||||
Controller = c
|
||||
|
||||
c.ConnectBlur(vcontroller.Controller.Blur)
|
||||
|
||||
c.ConnectReceive(c.receive)
|
||||
c.ConnectSend(c.send)
|
||||
c.ConnectUnlock(c.unlock)
|
||||
c.ConnectRecover(c.recover)
|
||||
|
||||
c.ConnectIsLocked(controller.Controller.IsLocked)
|
||||
}
|
||||
|
||||
func (c *dialogController) receive() string {
|
||||
wag, err := controller.Client.WalletAddressGet()
|
||||
wag, err := maincontroller.Client.WalletAddressGet()
|
||||
if err != nil {
|
||||
println(err.Error())
|
||||
return fmt.Sprintf("Could not get address: %v", err.Error())
|
||||
|
@ -70,7 +61,7 @@ func (c *dialogController) send(amount, dest string) *core.QVariant {
|
|||
b, _ := new(big.Int).SetString(hastings, 10)
|
||||
var destH types.UnlockHash
|
||||
destH.LoadString(dest)
|
||||
_, errW := controller.Client.WalletSiacoinsPost(types.NewCurrency(b), destH)
|
||||
_, errW := maincontroller.Client.WalletSiacoinsPost(types.NewCurrency(b), destH)
|
||||
if errW != nil {
|
||||
println(errW.Error())
|
||||
return core.NewQVariant24([]*core.QVariant{core.NewQVariant11(false), core.NewQVariant14(fmt.Sprintf("Could not send siacoins: %v", errW.Error()))})
|
||||
|
@ -80,19 +71,19 @@ func (c *dialogController) send(amount, dest string) *core.QVariant {
|
|||
}
|
||||
|
||||
func (c *dialogController) unlock(password string) *core.QVariant {
|
||||
err := controller.Client.WalletUnlockPost(password)
|
||||
err := maincontroller.Client.WalletUnlockPost(password)
|
||||
if err != nil {
|
||||
println(err.Error())
|
||||
return core.NewQVariant24([]*core.QVariant{core.NewQVariant11(false), core.NewQVariant14(fmt.Sprintf("Could not unlock your wallet: %v", err.Error()))})
|
||||
}
|
||||
|
||||
controller.Controller.SetLocked(false)
|
||||
maincontroller.Controller.SetLocked(false)
|
||||
return core.NewQVariant24([]*core.QVariant{core.NewQVariant11(true)})
|
||||
}
|
||||
|
||||
func (c *dialogController) recover(seed string) *core.QVariant {
|
||||
var swp api.WalletSweepPOST
|
||||
req, _ := controller.Client.NewRequest("POST", "/wallet/sweep/seed", strings.NewReader(fmt.Sprintf("seed=%s&dictionary=%s", seed, "english"))) //TODO:
|
||||
req, _ := maincontroller.Client.NewRequest("POST", "/wallet/sweep/seed", strings.NewReader(fmt.Sprintf("seed=%s&dictionary=%s", seed, "english"))) //TODO:
|
||||
res, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
println(err.Error())
|
||||
|
|
|
@ -11,18 +11,14 @@ type dialogTemplate struct {
|
|||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(cident string) `signal:"show"`
|
||||
_ func(bool) `signal:"blur"`
|
||||
_ func(cident string) `signal:"show,<-(controller.Controller)"`
|
||||
_ func(bool) `signal:"blur,->(controller.Controller)"`
|
||||
}
|
||||
|
||||
func (t *dialogTemplate) init() {
|
||||
c := controller.Controller
|
||||
if c == nil {
|
||||
c = controller.NewDialogController(nil)
|
||||
if controller.Controller == nil {
|
||||
controller.NewDialogController(nil)
|
||||
}
|
||||
|
||||
c.ConnectShow(t.show)
|
||||
t.ConnectBlur(c.Blur)
|
||||
}
|
||||
|
||||
func (t *dialogTemplate) show(cident string) {
|
||||
|
|
|
@ -9,15 +9,11 @@ func init() { receiveTemplate_QmlRegisterType2("DialogTemplate", 1, 0, "ReceiveT
|
|||
type receiveTemplate struct {
|
||||
dialogTemplate
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ string `property:"address"`
|
||||
}
|
||||
|
||||
func (t *receiveTemplate) init() {
|
||||
t.ConnectShow(func(cident string) {
|
||||
if cident == "receive" {
|
||||
t.SetAddress(controller.Controller.Receive())
|
||||
}
|
||||
})
|
||||
func (t *receiveTemplate) show(cident string) {
|
||||
if cident == "receive" {
|
||||
t.SetAddress(controller.Controller.Receive())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package dialog
|
|||
import (
|
||||
"github.com/therecipe/qt/core"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/wallet/dialog/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/wallet/dialog/controller"
|
||||
)
|
||||
|
||||
func init() { recoverTemplate_QmlRegisterType2("DialogTemplate", 1, 0, "RecoverTemplate") }
|
||||
|
@ -11,11 +11,5 @@ func init() { recoverTemplate_QmlRegisterType2("DialogTemplate", 1, 0, "RecoverT
|
|||
type recoverTemplate struct {
|
||||
dialogTemplate
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(string) *core.QVariant `slot:"recover"`
|
||||
}
|
||||
|
||||
func (t *recoverTemplate) init() {
|
||||
t.ConnectRecover(controller.Controller.Recover)
|
||||
_ func(string) *core.QVariant `slot:"recover,->(controller.Controller)"`
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package dialog
|
|||
import (
|
||||
"github.com/therecipe/qt/core"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/wallet/dialog/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/wallet/dialog/controller"
|
||||
)
|
||||
|
||||
func init() { sendTemplate_QmlRegisterType2("DialogTemplate", 1, 0, "SendTemplate") }
|
||||
|
@ -11,11 +11,5 @@ func init() { sendTemplate_QmlRegisterType2("DialogTemplate", 1, 0, "SendTemplat
|
|||
type sendTemplate struct {
|
||||
dialogTemplate
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(string, string) *core.QVariant `slot:"send"`
|
||||
}
|
||||
|
||||
func (t *sendTemplate) init() {
|
||||
t.ConnectSend(controller.Controller.Send)
|
||||
_ func(string, string) *core.QVariant `slot:"send,->(controller.Controller)"`
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package dialog
|
|||
import (
|
||||
"github.com/therecipe/qt/core"
|
||||
|
||||
"github.com/therecipe/qt/internal/examples/showcases/sia/wallet/dialog/controller"
|
||||
_ "github.com/therecipe/qt/internal/examples/showcases/sia/wallet/dialog/controller"
|
||||
)
|
||||
|
||||
func init() { unlockTemplate_QmlRegisterType2("DialogTemplate", 1, 0, "UnlockTemplate") }
|
||||
|
@ -11,11 +11,5 @@ func init() { unlockTemplate_QmlRegisterType2("DialogTemplate", 1, 0, "UnlockTem
|
|||
type unlockTemplate struct {
|
||||
dialogTemplate
|
||||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func(string) *core.QVariant `slot:"unlock"`
|
||||
}
|
||||
|
||||
func (t *unlockTemplate) init() {
|
||||
t.ConnectUnlock(controller.Controller.Unlock)
|
||||
_ func(string) *core.QVariant `slot:"unlock,->(controller.Controller)"`
|
||||
}
|
||||
|
|
|
@ -18,14 +18,13 @@ type WalletModel struct {
|
|||
|
||||
_ func() `constructor:"init"`
|
||||
|
||||
_ func([]Transaction) `signal:"updateWith"`
|
||||
_ func([]Transaction) `signal:"updateWith,auto"`
|
||||
}
|
||||
|
||||
func (m *WalletModel) init() {
|
||||
m.ConnectRowCount(m.rowCount)
|
||||
m.ConnectData(m.data)
|
||||
m.ConnectRoleNames(m.roleNames)
|
||||
m.ConnectUpdateWith(m.updateWith)
|
||||
}
|
||||
|
||||
func (m *WalletModel) rowCount(parent *core.QModelIndex) int {
|
||||
|
|
|
@ -16,13 +16,13 @@ type walletTemplate struct {
|
|||
|
||||
_ *core.QAbstractTableModel `property:"WalletModel"`
|
||||
|
||||
_ func(string) `signal:"doubleClicked"`
|
||||
_ func(string) `signal:"doubleClicked,->(this.c)"`
|
||||
|
||||
c *controller.WalletController
|
||||
}
|
||||
|
||||
func (t *walletTemplate) init() {
|
||||
c := controller.NewWalletController(nil)
|
||||
t.c = controller.NewWalletController(nil)
|
||||
|
||||
t.SetWalletModel(c.Model())
|
||||
|
||||
t.ConnectDoubleClicked(c.DoubleClicked)
|
||||
t.SetWalletModel(t.c.Model())
|
||||
}
|
||||
|
|
|
@ -204,3 +204,7 @@ func GOARCH() string {
|
|||
}
|
||||
return runtime.GOARCH
|
||||
}
|
||||
|
||||
func QT_DYNAMIC_SETUP() bool {
|
||||
return os.Getenv("QT_DYNAMIC_SETUP") == "true"
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue