gigibox
2023-06-15 ff3cadba4a63cd1b63cd0e36358f49ccedb88bef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package gui
 
import (
    "fmt"
    "strings"
 
    "kingdee-dbapi/config"
    "kingdee-dbapi/kingdee"
    "kingdee-dbapi/report"
    "kingdee-dbapi/static"
    "kingdee-dbapi/webserver"
 
    "fyne.io/fyne/v2"
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/canvas"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/dialog"
    "fyne.io/fyne/v2/layout"
    "fyne.io/fyne/v2/storage"
    "fyne.io/fyne/v2/theme"
    "fyne.io/fyne/v2/widget"
)
 
type Display struct {
    Window     fyne.Window
    FullScreen bool
}
 
func NewDisplay() *Display {
    a := app.New()
    // 设置图标
    a.SetIcon(static.IconPng)
 
    // 创建窗口
    w := a.NewWindow("金蝶数据接口服务 v14.02")
 
    // 设置为主窗口
    w.SetMaster()
 
    serverPort := widget.NewEntry()
    sqlAddr := widget.NewEntry()
    sqlDBName := widget.NewEntry()
    sqlUsername := widget.NewEntry()
    sqlPassword := widget.NewEntry()
    sqlPassword.Password = true
    serverPort.Text = config.Options.WebPort
    sqlAddr.Text = config.Options.SqlAddr
    sqlUsername.Text = config.Options.SqlUsername
    sqlPassword.Text = config.Options.SqlPassword
    sqlDBName.Text = config.Options.SqlDBName
 
    form := &widget.Form{
        Items: []*widget.FormItem{
            // we can specify items in the constructor
            {Text: "服务端口", Widget: serverPort},
            {Text: "数据库地址", Widget: sqlAddr},
            {Text: "数据库名称", Widget: sqlDBName},
            {Text: "数据用户名", Widget: sqlUsername},
            {Text: "数据库密码", Widget: sqlPassword},
        },
        //SubmitText: "确定",
        //
        //OnSubmit: func() {
        //    // optional, handle form submission
        //    fmt.Println("Form submitted:", serverPort.Text)
        //    //myWindow.Close()
        //},
    }
    var submitBtn *widget.Button
    submitBtn = widget.NewButtonWithIcon("启动", theme.MailSendIcon(), func() {
        config.Options.WebPort = strings.Trim(serverPort.Text, " ")
        config.Options.SqlAddr = strings.Trim(sqlAddr.Text, " ")
        config.Options.SqlUsername = strings.Trim(sqlUsername.Text, " ")
        config.Options.SqlPassword = strings.Trim(sqlPassword.Text, " ")
        config.Options.SqlDBName = strings.Trim(sqlDBName.Text, " ")
 
        config.SaveConfig()
 
        // 连接数据库
        err := kingdee.Init(config.Options.SqlUsername, config.Options.SqlPassword, config.Options.SqlAddr, config.Options.SqlDBName)
        if err != nil {
            fmt.Println("db init error:", err.Error())
            dialog.ShowError(err, w)
            return
        }
 
        form.Disable()
        submitBtn.Text = "已启动"
        submitBtn.Disable()
 
        report.StartReport()
 
        go webserver.Serve(serverPort.Text)
    })
 
    content := container.New(layout.NewGridWrapLayout(fyne.NewSize(300, 200)), form)
 
    content1 := container.NewVBox(content, submitBtn)
    w.SetContent(content1)
    return &Display{
        w,
        false,
    }
}
 
func (d *Display) ShowMainWindow() {
    d.Window.Resize(fyne.NewSize(330, 250))
 
    d.Window.Canvas().SetOnTypedKey(func(event *fyne.KeyEvent) {
        if event.Name == "F12" {
            d.Window.SetFullScreen(!d.FullScreen)
            d.FullScreen = !d.FullScreen
        }
    })
 
    d.Window.ShowAndRun()
}
 
func (d *Display) DrawImage(imgUri string) {
    uri, err := storage.ParseURI(imgUri)
    if err != nil {
        fmt.Println("parse uri error:", err)
    }
 
    image := canvas.NewImageFromURI(uri)
    //image := canvas.NewImageFromImage(src)
    // image := canvas.NewImageFromReader(reader, name)
    //image := canvas.NewImageFromFile("./a.png")
    //image.FillMode = canvas.ImageFillContain
    //image.FillMode = canvas.ImageFillOriginal
    image.FillMode = canvas.ImageFillStretch
 
    d.Window.SetContent(image)
}