场景排序

This commit is contained in:
wh_zcy 2022-12-12 14:51:52 +08:00
parent 361ae09545
commit 71dd567e5f
2 changed files with 82 additions and 18 deletions

View File

@ -24,6 +24,7 @@ type Scene struct {
Desc string `json:"desc,omitempty"` //描述
Callers []*Caller `json:"callers,omitempty"` //调用器列表
Status uint32 `json:"status,omitempty"` //是否启用 默认0未启用 1是启用
Num int `json:"num,omitempty"` //顺序号
}
type Caller struct {

View File

@ -90,7 +90,7 @@ 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
}
@ -592,29 +592,29 @@ func (mw *MainWindow) newSceneContainer() {
}
registerSceneList.SearchItem = registerSceneList.CachedList.Items
}
registerSceneReload()
// 选中的场景列表
selectedSceneList := *lib.NewItemList()
selectedSceneList.ListWidget = selectedSceneList.CreateList()
selectedSceneLoad := func() {
selectedSceneList.Reset()
for _, v := range mw.config.Scenes {
scenes := mw.config.Scenes
sort.SliceStable(scenes, func(i, j int) bool {
return scenes[i].Num < scenes[j].Num
})
for _, v := range scenes {
item := lib.Item{
Id: v.Name,
Text: fmt.Sprintf("【%s】 %s", v.Name, v.Desc),
Id: v.ID,
Text: fmt.Sprintf("%d【%s】 %s", v.Num, v.Name, v.Desc),
}
selectedSceneList.AddItem(item)
}
}
selectedSceneLoad()
//场景按钮
addSceneBtn := widget.NewButtonWithIcon("添加场景", theme.ContentAddIcon(), nil)
deleSceneBtn := widget.NewButtonWithIcon("删除场景", theme.DeleteIcon(), nil)
// 刷新场景
// refreshBtn := widget.NewButtonWithIcon("", theme.ViewRefreshIcon(), nil)
setNumBtn := widget.NewButtonWithIcon("设置序号", theme.ListIcon(), nil)
//search
searchEntry := widget.NewEntry()
@ -634,27 +634,44 @@ func (mw *MainWindow) newSceneContainer() {
}
}
// 工具条
// toolbar := container.NewHBox(addSceneBtn, deleSceneBtn, layout.NewSpacer(), refreshBtn)
//布局
var dynamic fyne.CanvasObject
contentRender := func() {
selectedSceneLoad()
if len(selectedSceneList.CachedList.Items) == 0 {
dynamic = container.NewCenter(widget.NewLabel("还没有选择任何场景"))
registerSceneReload()
if len(registerSceneList.CachedList.Items) == 0 {
dynamic = container.NewCenter(widget.NewLabel("还没有注册任何场景"))
} else {
dynamic = container.NewBorder(container.NewHBox(deleSceneBtn, layout.NewSpacer()), nil, nil, nil, selectedSceneList.ListWidget)
selectedSceneLoad()
if len(selectedSceneList.CachedList.Items) == 0 {
dynamic = container.NewCenter(widget.NewLabel("还没有选择任何场景"))
} else {
dynamic = container.NewBorder(container.NewHBox(setNumBtn, deleSceneBtn, layout.NewSpacer()), nil, nil, nil, selectedSceneList.ListWidget)
}
}
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)
split.Offset = 0.4
mw.changeContent(split)
}
contentRender()
getMaxNum := func() int {
scenes := mw.config.Scenes
if len(scenes) == 0 {
return 1
}
// 降序
sort.SliceStable(scenes, func(i, j int) bool {
return scenes[i].Num > scenes[j].Num
})
return scenes[0].Num + 1
}
// 添加场景事件
addSceneBtn.OnTapped = func() {
selId := registerSceneList.SelectedId()
@ -680,6 +697,7 @@ func (mw *MainWindow) newSceneContainer() {
ID: cast.ToString(time.Now().Nanosecond()),
Name: si.Name,
Desc: si.Desc,
Num: getMaxNum(),
})
mw.config.Scenes = scenes_conf
if err := mw.storage.StoreConfig(mw.config); err != nil {
@ -701,7 +719,7 @@ func (mw *MainWindow) newSceneContainer() {
scenes := mw.config.Scenes
for i, item := range scenes {
if item.Name == selId {
if item.ID == selId {
scenes = append(scenes[:i], scenes[i+1:]...)
break
}
@ -713,6 +731,51 @@ func (mw *MainWindow) newSceneContainer() {
return
}
}
// 设置序号事件
setNumBtn.OnTapped = func() {
selId := selectedSceneList.SelectedId()
if selId == "" {
ShowTip("请选择一个场景")
return
}
sceneNumEntry := widget.NewEntry()
sceneNumEntry.Text = "0"
sceneItems := []*widget.FormItem{
widget.NewFormItem("顺序号", sceneNumEntry),
}
// 加载
var sceneConf *storage.Scene
for _, item := range mw.config.Scenes {
if item.ID == selId {
sceneConf = item
}
}
if sceneConf != nil {
sceneNumEntry.Text = cast.ToString(sceneConf.Num)
}
editSceneWin := dialog.NewForm("编辑场景序号", "确定", "取消", sceneItems, func(b bool) {
if !b {
return
}
for _, item := range mw.config.Scenes {
if item.ID == selId {
item.Num = cast.ToInt(sceneNumEntry.Text)
}
}
if err := mw.storage.StoreConfig(mw.config); err != nil {
ShowTip(fmt.Sprintf("错误:%v", err.Error()))
return
}
selectedSceneLoad()
}, mw.w)
editSceneWin.Resize(fyne.NewSize(300, 150))
editSceneWin.Show()
}
}
// 导出配置