bedrocktool/gui/gui.go

170 lines
4.0 KiB
Go
Raw Normal View History

2023-03-05 21:50:58 +00:00
package gui
import (
"context"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/data/binding"
"fyne.io/fyne/v2/widget"
2023-03-06 01:03:31 +00:00
"github.com/bedrock-tool/bedrocktool/subcommands"
"github.com/bedrock-tool/bedrocktool/subcommands/skins"
"github.com/bedrock-tool/bedrocktool/subcommands/world"
2023-03-05 21:50:58 +00:00
"github.com/bedrock-tool/bedrocktool/utils"
)
2023-03-06 01:03:31 +00:00
var settings = map[string]func(utils.Command) *widget.Form{
"world": func(cc utils.Command) *widget.Form {
c := cc.(*world.WorldCMD)
return widget.NewForm(
widget.NewFormItem(
"serverAddress", widget.NewEntryWithData(binding.BindString(&c.ServerAddress)),
), widget.NewFormItem(
"", widget.NewCheckWithData("packs", binding.BindBool(&c.Packs)),
), widget.NewFormItem(
"", widget.NewCheckWithData("void", binding.BindBool(&c.EnableVoid)),
), widget.NewFormItem(
"", widget.NewCheckWithData("saveImage", binding.BindBool(&c.SaveImage)),
), widget.NewFormItem(
"", widget.NewCheckWithData("experimentInventory", binding.BindBool(&c.ExperimentInventory)),
),
)
},
"skins": func(cc utils.Command) *widget.Form {
c := cc.(*skins.SkinCMD)
return widget.NewForm(
widget.NewFormItem(
"serverAddress", widget.NewEntryWithData(binding.BindString(&c.ServerAddress)),
), widget.NewFormItem(
"filter", widget.NewEntryWithData(binding.BindString(&c.Filter)),
),
)
},
"capture": func(cc utils.Command) *widget.Form {
c := cc.(*subcommands.CaptureCMD)
return widget.NewForm(
widget.NewFormItem(
"serverAddress", widget.NewEntryWithData(binding.BindString(&c.ServerAddress)),
),
)
},
"chat-log": func(cc utils.Command) *widget.Form {
c := cc.(*subcommands.ChatLogCMD)
return widget.NewForm(
widget.NewFormItem(
"serverAddress", widget.NewEntryWithData(binding.BindString(&c.ServerAddress)),
),
widget.NewFormItem(
"", widget.NewCheckWithData("Verbose", binding.BindBool(&c.Verbose)),
),
)
},
"debug-proxy": func(cc utils.Command) *widget.Form {
c := cc.(*subcommands.DebugProxyCMD)
return widget.NewForm(
widget.NewFormItem(
"serverAddress", widget.NewEntryWithData(binding.BindString(&c.ServerAddress)),
), widget.NewFormItem(
"filter", widget.NewEntryWithData(binding.BindString(&c.Filter)),
),
)
},
}
2023-03-05 21:50:58 +00:00
type GUI struct {
UI
selected binding.String
}
func NewGUI() *GUI {
return &GUI{}
}
2023-03-06 01:03:31 +00:00
func (g *GUI) SetOptions() bool {
2023-03-05 21:50:58 +00:00
a := app.New()
w := a.NewWindow("Bedrocktool")
debug := binding.NewBool()
debug.AddListener(binding.NewDataListener(func() {
utils.Options.Debug, _ = debug.Get()
}))
extra_debug := binding.NewBool()
extra_debug.AddListener(binding.NewDataListener(func() {
utils.Options.ExtraDebug, _ = extra_debug.Get()
if utils.Options.ExtraDebug {
debug.Set(true)
}
}))
entries := []string{}
forms := make(map[string]*widget.Form)
for k, c := range utils.ValidCMDs {
entries = append(entries, k)
2023-03-06 01:03:31 +00:00
f := settings[k]
if f != nil {
s := f(c)
2023-03-05 21:50:58 +00:00
forms[k] = s
}
}
g.selected = binding.NewString()
forms_box := container.NewVBox()
2023-03-06 01:03:31 +00:00
var quit = true
2023-03-05 21:50:58 +00:00
w.SetContent(container.NewVBox(
widget.NewRichTextFromMarkdown("## Settings"),
container.NewHBox(
widget.NewCheckWithData("Debug", debug),
widget.NewCheckWithData("extra-debug", extra_debug),
),
2023-03-06 01:03:31 +00:00
container.NewHBox(
widget.NewRichTextFromMarkdown("Custom Userdata:"),
widget.NewEntryWithData(binding.BindString(&utils.Options.PathCustomUserData)),
),
2023-03-05 21:50:58 +00:00
widget.NewRichTextFromMarkdown("# Commands"),
widget.NewSelect(entries, func(s string) {
g.selected.Set(s)
2023-03-06 01:03:31 +00:00
quit = false
2023-03-05 21:50:58 +00:00
}),
forms_box,
widget.NewButton("Start", func() {
w.Close()
}),
))
for _, f := range forms {
forms_box.Add(f)
}
g.selected.AddListener(binding.NewDataListener(func() {
v, _ := g.selected.Get()
for n, f := range forms {
if n == v {
f.Show()
} else {
f.Hide()
}
}
}))
w.ShowAndRun()
2023-03-06 01:03:31 +00:00
return quit
2023-03-05 21:50:58 +00:00
}
func (g *GUI) Init() {
}
func (g *GUI) Execute(ctx context.Context) error {
sub, err := g.selected.Get()
if err != nil {
return err
}
cmd := utils.ValidCMDs[sub]
cmd.Execute(ctx, nil)
return nil
}