From 361ae09545bffe48fef1ef0eecd1a76d6c245db0 Mon Sep 17 00:00:00 2001 From: wh_zcy Date: Mon, 12 Dec 2022 14:09:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- busi/sociaty.go | 22 +++++++ lib/action.go | 1 + main.go | 1 + robot.log | 1 - ui/mainmenu.go | 2 +- ui/mainwindow.go | 167 +++++++++++++++++++++++++++++++++++------------ 6 files changed, 152 insertions(+), 42 deletions(-) create mode 100644 busi/sociaty.go diff --git a/busi/sociaty.go b/busi/sociaty.go new file mode 100644 index 0000000..fd71af8 --- /dev/null +++ b/busi/sociaty.go @@ -0,0 +1,22 @@ +package busi + +import "legu.airobot/lib" + +var _ lib.IScene = (*SociatyScene)(nil) + +type SociatyScene struct { + lib.Action +} + +func (s *SociatyScene) Info() lib.SceneInfo { + return lib.SceneInfo{ + Name: "公会申请", + Desc: "bbb", + } +} + +func (s *SociatyScene) Run(robot lib.IRobot) error { + + + return nil +} diff --git a/lib/action.go b/lib/action.go index 2b46551..4f9e133 100644 --- a/lib/action.go +++ b/lib/action.go @@ -6,6 +6,7 @@ type IAction interface { type Action struct { // scene *scene + Id string Name string Desc string } diff --git a/main.go b/main.go index c1e3ce3..3dcfd34 100644 --- a/main.go +++ b/main.go @@ -29,6 +29,7 @@ func init() { registerScenes( &busi.FriendScene{}, + &busi.SociatyScene{}, ) } diff --git a/robot.log b/robot.log index 8ec243b..e69de29 100644 --- a/robot.log +++ b/robot.log @@ -1 +0,0 @@ -{"level":"debug","msg":"配置","time":"2022-12-12 11:40:00","场景":[{"id":"799348400","name":"场景1","desc":"111","callers":[{"id":"799348400_1670808209409441100","name":"好友推荐","key":"friend.randlist","num":1}]},{"id":"261021700","name":"登录","callers":[{"id":"261021700_1670808329010907700","name":"好友申请","key":"friend.apply"}],"status":1}]} diff --git a/ui/mainmenu.go b/ui/mainmenu.go index 9b51f76..f0d0f00 100644 --- a/ui/mainmenu.go +++ b/ui/mainmenu.go @@ -36,7 +36,7 @@ func newMainMenu() *mainMenu { mm.configMenu = fyne.NewMenuItem("配置", globalWindow.configContainer) mm.configMenu.Icon = theme.FileTextIcon() //场景 - mm.sceneMenu = fyne.NewMenuItem("旧场景", globalWindow.sceneContainer) + mm.sceneMenu = fyne.NewMenuItem("场景", globalWindow.newSceneContainer) mm.sceneMenu.Icon = theme.FileTextIcon() // AI diff --git a/ui/mainwindow.go b/ui/mainwindow.go index 6b5a13f..a375f0a 100644 --- a/ui/mainwindow.go +++ b/ui/mainwindow.go @@ -90,31 +90,31 @@ func (mw *MainWindow) startContainer() { } // 检查场景配置 if config.Scenes == nil { - dialog.ShowCustomConfirm("提示", "创建", "取消", widget.NewLabel("还没有创建任何场景"), func(b bool) { + dialog.ShowCustomConfirm("提示", "创建", "取消", widget.NewLabel("还没有选择任何场景"), func(b bool) { if !b { return } - mw.sceneContainer() + mw.newSceneContainer() }, mw.w) return } // 检查场景是否启用 - isEnable := false - for _, v := range config.Scenes { - if v.Status == lib.STATUS_ENABLE { - isEnable = true - break - } - } - if !isEnable { - dialog.ShowCustomConfirm("提示", "启用", "取消", widget.NewLabel("还没有启用任意场景"), func(b bool) { - if !b { - return - } - mw.sceneContainer() - }, mw.w) - return - } + // isEnable := false + // for _, v := range config.Scenes { + // if v.Status == lib.STATUS_ENABLE { + // isEnable = true + // break + // } + // } + // if !isEnable { + // dialog.ShowCustomConfirm("提示", "启用", "取消", widget.NewLabel("还没有启用任意场景"), func(b bool) { + // if !b { + // return + // } + // mw.sceneContainer() + // }, mw.w) + // return + // } startBtn.Enable() startBtn.OnTapped = func() { ai, err := lib.NewAI(lib.AIParam{RobotCount: uint32(config.Global.UserCount)}) @@ -567,24 +567,25 @@ func (mw *MainWindow) sceneContainer() { func (mw *MainWindow) newSceneContainer() { //注册的场景列表 registerSceneList := *lib.NewItemList() - registerSceneList.OnSelFunc = func(id widget.ListItemID) { - data := registerSceneList.CachedList.Items[id].Data - info, ok := data.(lib.SceneInfo) - if !ok { - return - } - logrus.Debug(info) - // callerNameEntry.Text = info.Desc - // callerKeyEntry.Text = info.Name - // callerForm.Refresh() - } + // registerSceneList.OnSelFunc = func(id widget.ListItemID) { + // data := registerSceneList.CachedList.Items[id].Data + // info, ok := data.(lib.SceneInfo) + // if !ok { + // return + // } + // logrus.Debug(info) + // // callerNameEntry.Text = info.Desc + // // callerKeyEntry.Text = info.Name + // // callerForm.Refresh() + // } registerSceneList.ListWidget = registerSceneList.CreateList() registerSceneReload := func() { + registerSceneList.Reset() for _, v := range mw.UIImpl.scenes { info := v.Info() item := lib.Item{ Id: info.Name, - Text: fmt.Sprintf("%s (%s)", info.Desc, info.Name), + Text: fmt.Sprintf("【%s】 %s", info.Name, info.Desc), Data: info, } registerSceneList.AddItem(item) @@ -597,7 +598,14 @@ func (mw *MainWindow) newSceneContainer() { selectedSceneList := *lib.NewItemList() selectedSceneList.ListWidget = selectedSceneList.CreateList() selectedSceneLoad := func() { - + selectedSceneList.Reset() + for _, v := range mw.config.Scenes { + item := lib.Item{ + Id: v.Name, + Text: fmt.Sprintf("【%s】 %s", v.Name, v.Desc), + } + selectedSceneList.AddItem(item) + } } selectedSceneLoad() @@ -606,26 +614,105 @@ func (mw *MainWindow) newSceneContainer() { deleSceneBtn := widget.NewButtonWithIcon("删除场景", theme.DeleteIcon(), nil) // 刷新场景 - refreshBtn := widget.NewButtonWithIcon("", theme.ViewRefreshIcon(), nil) + // refreshBtn := widget.NewButtonWithIcon("", theme.ViewRefreshIcon(), nil) + + //search + searchEntry := widget.NewEntry() + searchEntry.PlaceHolder = "输入要搜索的用例" + searchEntry.OnChanged = func(s string) { + if s == "" { + registerSceneReload() + } else { + newList := []lib.Item{} + for _, v := range registerSceneList.SearchItem { + if strings.Contains(v.Text, s) { + newList = append(newList, v) + } + } + registerSceneList.CachedList.Items = newList + registerSceneList.ListWidget.Refresh() + } + } // 工具条 - toolbar := container.NewHBox(addSceneBtn, deleSceneBtn, layout.NewSpacer(), refreshBtn) + // toolbar := container.NewHBox(addSceneBtn, deleSceneBtn, layout.NewSpacer(), refreshBtn) //布局 var dynamic fyne.CanvasObject contentRender := func() { - // sceneLoad() + selectedSceneLoad() if len(selectedSceneList.CachedList.Items) == 0 { - dynamic = container.NewCenter(widget.NewLabel("还没有创建任何场景")) + dynamic = container.NewCenter(widget.NewLabel("还没有选择任何场景")) } else { - split := container.NewHSplit(selectedSceneList.ListWidget, selectedSceneList.ListWidget) - split.Offset = 0.3 - dynamic = split + dynamic = container.NewBorder(container.NewHBox(deleSceneBtn, layout.NewSpacer()), nil, nil, nil, selectedSceneList.ListWidget) } - content := container.NewBorder(toolbar, nil, nil, nil, dynamic) - mw.changeContent(content) + split := container.NewHSplit( + container.NewBorder( + container.NewBorder(nil, nil, container.NewHBox(addSceneBtn), nil, searchEntry), nil, nil, nil, + registerSceneList.ListWidget), dynamic) + split.Offset = 0.3 + // content := container.NewBorder(toolbar, nil, nil, nil, split) + mw.changeContent(split) } contentRender() + // 添加场景事件 + addSceneBtn.OnTapped = func() { + selId := registerSceneList.SelectedId() + if selId == "" { + ShowTip("请选择一个场景") + return + } + + for _, v := range mw.UIImpl.scenes { + si := v.Info() + if si.Name == "" { + break + } + if si.Name == selId { + item := lib.Item{ + Id: si.Name, + Text: si.Name, + } + selectedSceneList.AddItem(item) + + scenes_conf := mw.config.Scenes + scenes_conf = append(scenes_conf, &storage.Scene{ + ID: cast.ToString(time.Now().Nanosecond()), + Name: si.Name, + Desc: si.Desc, + }) + mw.config.Scenes = scenes_conf + if err := mw.storage.StoreConfig(mw.config); err != nil { + ShowTip(fmt.Sprintf("错误:%v", err.Error())) + return + } + } + } + contentRender() + } + + // 删除场景事件 + deleSceneBtn.OnTapped = func() { + selId := selectedSceneList.SelectedId() + if selId == "" { + ShowTip("请选择一个场景") + return + } + scenes := mw.config.Scenes + + for i, item := range scenes { + if item.Name == selId { + scenes = append(scenes[:i], scenes[i+1:]...) + break + } + } + mw.config.Scenes = scenes + selectedSceneLoad() + if err := mw.storage.StoreConfig(mw.config); err != nil { + ShowTip(fmt.Sprintf("错误:%v", err.Error())) + return + } + } } // 导出配置