88 lines
2.5 KiB
Go
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
|
|
}
|