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 }