Files

88 lines
2.5 KiB
Go

package views
import (
"fmt"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/dialog"
"fyne.io/fyne/v2/theme"
"fyne.io/fyne/v2/widget"
"work_cation/global"
"work_cation/models"
"work_cation/repo"
"work_cation/service"
)
// 卡片展示界面
func allCardsViews(w fyne.Window) fyne.CanvasObject {
//var Items []fyne.CanvasObject
gridWrap := container.NewGridWrap(fyne.NewSize(200, 200))
for _, baseCard := range repo.BaseCard.FindAll(global.DB) {
if info, is := cardTypeMap[baseCard.ToolType]; is {
var baseCardCopy = baseCard
view, err := info.showView(w, &baseCardCopy)
if err != nil {
view = errorCardView(w, &baseCardCopy, err)
}
var baseCardV *widget.Card
baseCardV = baseCardView(w, baseCardV, baseCardCopy, gridWrap, view)
gridWrap.Add(baseCardV)
}
}
scroll := container.NewScroll(gridWrap)
return container.NewBorder(nil, nil, nil, nil, scroll)
}
// 单卡界面
func baseCardView(
w fyne.Window,
baseCardV *widget.Card,
baseCardCopy models.BaseCard,
gridWrap *fyne.Container,
view fyne.CanvasObject) *widget.Card {
baseCardV = widget.NewCard(baseCardCopy.Title, baseCardCopy.Text, container.NewBorder(nil, widget.NewToolbar(
widget.NewToolbarAction(theme.ContentAddIcon(), func() {}),
widget.NewToolbarAction(theme.DeleteIcon(), func() {
dialog.NewConfirm("提示", fmt.Sprintf("确定删除:%s?", baseCardCopy.Title), func(b bool) {
if b {
err := service.BaseCard.Delete(global.DB, baseCardCopy)
if err != nil {
dialog.ShowInformation("删除失败", err.Error(), w)
return
}
gridWrap.Remove(baseCardV)
}
}, w).Show()
}),
widget.NewToolbarAction(theme.SettingsIcon(), func() {
info := cardTypeMap[baseCardCopy.ToolType]
if info.updateView == nil {
return
}
cWin := fyne.CurrentApp().NewWindow(baseCardV.Title + " 设置")
cWin.SetContent(info.updateView(cWin, &baseCardCopy))
cWin.Resize(info.createSize)
cWin.CenterOnScreen()
cWin.Show()
}),
widget.NewToolbarAction(theme.ViewRefreshIcon(), func() {
}),
), nil, nil, view))
return baseCardV
}
func errorCardView(w fyne.Window, data *models.BaseCard, err error) fyne.CanvasObject {
cardButton := widget.NewButton("出错尝试修复", func() {
dialog.ShowInformation("结果", "修复失败", w)
})
showErrButton := widget.NewButton("工具解析错误", func() {
dialog.ShowInformation("错误", err.Error(), w)
})
card := widget.NewCard(data.Title, data.Text, container.NewVBox(showErrButton, cardButton))
return card
}