Files
work_cation/views/erlangCard.go
T

146 lines
3.5 KiB
Go

package views
import (
"fmt"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/data/binding"
"fyne.io/fyne/v2/dialog"
"fyne.io/fyne/v2/widget"
"github.com/atotto/clipboard"
"strings"
"work_cation/global"
"work_cation/models"
"work_cation/models/repo"
"work_cation/pkg/utils"
)
func myCardsViews(w fyne.Window) fyne.CanvasObject {
var items []fyne.CanvasObject
for _, i := range repo.ErlangCardRepo.FindAll(global.DB) {
var i2 = i
items = append(items, ErlangCardView(w, &i2))
}
return container.NewBorder(nil, nil, nil, nil, container.NewScroll(
container.NewGridWrap(fyne.NewSize(200, 200), items...)))
}
func ErlangCardView(_ fyne.Window, data *models.ErlangCards) fyne.CanvasObject {
if data == nil {
data = &models.ErlangCards{
UUID: utils.CreateUUID(),
Title: "玩家获取",
Text: "玩家获取脚本",
VarName: []string{"服务器ID", "玩家UID"},
Template: "z_db_lib:get(z_db_lib:get_table('role', $var), $var).",
}
}
if len(data.VarName) == 0 {
return widget.NewCard(data.Title, data.Text, widget.NewButton(data.Template, func() {
fmt.Print("复制:", data.UUID)
}))
}
txtBound := binding.NewString()
txtBound.Set(data.Template)
txtWid := widget.NewEntryWithData(txtBound)
txtWid.Wrapping = fyne.TextWrapOff
cardButton := widget.NewButton("OPEN", func() {
go UseErlangCard(data)
})
card := widget.NewCard(data.Title, data.Text, cardButton)
//image := canvas.NewImageFromResource(assets.LogoDataSR)
//image.FillMode = canvas.ImageFillContain
//card.SetImage(image)
return card
}
func UseErlangCard(data *models.ErlangCards) {
var template = data.Template
var vars = data.VarName
myApp := fyne.CurrentApp()
myWindow := myApp.NewWindow(data.Title)
myWindow.CenterOnScreen()
myWindow.Resize(fyne.NewSize(500, 0))
var items []*widget.FormItem
for index, key := range vars {
wid := widget.NewEntry()
if len(data.VarContent) > index {
wid.SetText(data.VarContent[index])
}
items = append(items, &widget.FormItem{Text: key, Widget: wid})
}
var text string
if data.IsShowOut {
text = replaceVars(template, data.VarContent)
}
showErlang := widget.NewLabel(text)
showButton := widget.NewButton("...", nil)
upOut := func() {
if data.IsShowOut {
text = replaceVars(template, data.VarContent)
showErlang.SetText(text)
showButton.SetText("隐藏输出")
} else {
text = ""
showErlang.SetText(text)
showButton.SetText("展示输出")
}
}
upOut()
showButton.OnTapped = func() {
data.IsShowOut = !data.IsShowOut
upOut()
}
form := &widget.Form{
Items: items,
SubmitText: "生成并复制",
OnSubmit: func() {
var values []string
for _, item := range items {
values = append(values, item.Widget.(*widget.Entry).Text)
}
data.VarContent = values
//out.SetText(replaceVars(template, data.VarContent))
err := clipboard.WriteAll(replaceVars(template, data.VarContent))
if err != nil {
dialog.ShowError(err, myWindow)
}
upOut()
},
}
title := widget.NewCard(data.Title, data.Text, nil)
content := container.NewVBox(
title,
widget.NewLabel("输入模版参数:"),
form,
widget.NewLabel("输出:"),
showErlang,
showButton,
)
myWindow.SetContent(content)
myWindow.Show()
}
func replaceVars(input string, replacements []string) string {
varIndex := 0
result := input
for strings.Contains(result, "$var") && varIndex < len(replacements) {
result = strings.Replace(result, "$var", replacements[varIndex], 1)
varIndex++
}
return result
}