package formview import ( "fmt" "go_dreamfactory/cmd/v2/lib/common" "go_dreamfactory/cmd/v2/model" "go_dreamfactory/cmd/v2/service" "go_dreamfactory/cmd/v2/service/observer" "go_dreamfactory/comm" "go_dreamfactory/pb" "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/dialog" "fyne.io/fyne/v2/widget" "github.com/sirupsen/logrus" "github.com/spf13/cast" ) type OldtimesView struct { BaseformView chapterItemList *common.ItemList //章节列表 levelItemList *common.ItemList //关卡列表 flag bool right *fyne.Container } func (this *OldtimesView) CreateView(t *model.TestCase) fyne.CanvasObject { this.chapterItemList = common.NewItemList() this.chapterItemList.ItemList = this.chapterItemList.CreateList() this.levelItemList = common.NewItemList() this.levelItemList.ItemList = this.levelItemList.CreateList() this.right = container.NewGridWithColumns(2, this.chapterItemList.ItemList, this.levelItemList.ItemList) this.chapterItemList.ItemList.OnSelected = func(id widget.ListItemID) { item := this.chapterItemList.CachedList.Items[id] this.chapterItemList.SelItemId = item.Id this.levelItemList.Reset() if chapter, ok := item.Data.(*pb.Chapter); ok { for _, ll := range chapter.Levels { item := common.Item{ Id: cast.ToString(ll.Lid), Text: fmt.Sprintf("%v", ll.Lid), } this.levelItemList.AddItem(item) } } } // this.levelItemList.ItemList.OnSelected = func(id widget.ListItemID) { // item := this.levelItemList.CachedList.Items[id] // this.levelItemList.SelItemId = item.Id // } loadChapters := func() { this.chapterItemList.Reset() if err := service.GetPttService().SendToClient( t.MainType, "getall", &pb.OldtimesGetallReq{}, ); err != nil { logrus.Error(err) return } } loadChapters() levelIdEntry := widget.NewEntry() form := widget.NewForm( widget.NewFormItem("关卡", levelIdEntry), ) enterBtn := widget.NewButton("进入", func() { defer levelIdEntry.SetText("") chapterId := cast.ToInt32(this.chapterItemList.SelItemId) form.OnSubmit = func() { levelId := cast.ToInt32(levelIdEntry.Text) if chapterId == 0 || levelId == 0 { common.ShowTip("没有正确选择章节或关卡") return } if err := service.GetPttService().SendToClient( t.MainType, "enter", &pb.OldtimesEnterReq{ ChapterId: chapterId, LevelId: levelId, }, ); err != nil { logrus.Error(err) return } } win := dialog.NewCustom("升级", "关闭", form, this.w) win.Resize(fyne.NewSize(600, 300)) win.Show() }) finishBtn := widget.NewButton("闯关", func() { defer levelIdEntry.SetText("") chapterId := cast.ToInt32(this.chapterItemList.SelItemId) form.OnSubmit = func() { levelId := cast.ToInt32(levelIdEntry.Text) if chapterId == 0 || levelId == 0 { common.ShowTip("没有正确选择章节或关卡") return } if err := service.GetPttService().SendToClient( t.MainType, "finish", &pb.OldtimesFinishReq{ ChapterId: chapterId, LevelId: levelId, }, ); err != nil { logrus.Error(err) return } } win := dialog.NewCustom("升级", "关闭", form, this.w) win.Resize(fyne.NewSize(600, 300)) win.Show() }) //领取章节奖励 receiveBtn := widget.NewButton("章节奖励", func() { chapterId := cast.ToInt32(this.chapterItemList.SelItemId) if err := service.GetPttService().SendToClient( t.MainType, "receive", &pb.OldtimesReceiveReq{ ChapterId: chapterId, }, ); err != nil { logrus.Error(err) return } }) topBtns := container.NewHBox(enterBtn, finishBtn, receiveBtn) c := container.NewBorder(topBtns, nil, nil, nil, this.right, ) this.chapterList() return c } func (this *OldtimesView) chapterList() { if this.flag { return } this.obs.AddListener(observer.EVENT_REQ_RSP, observer.Listener{ OnNotify: func(d interface{}, args ...interface{}) { data := d.(*pb.UserMessage) if data.MainType == string(comm.ModuleOldtimes) && data.SubType == "getall" { rsp := &pb.OldtimesGetallResp{} if !comm.ProtoUnmarshal(data, rsp) { logrus.Error("unmarshal err") return } if rsp.Data == nil { return } for _, v := range rsp.Data.Chapters { item := common.Item{ Id: cast.ToString(v.Cid), Text: fmt.Sprintf("%v", v.Cid), Data: v, } this.chapterItemList.AddItem(item) } } }, }) this.flag = true }