场景排序
This commit is contained in:
parent
361ae09545
commit
71dd567e5f
@ -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 {
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
// 导出配置
|
||||
|
Loading…
Reference in New Issue
Block a user