From 0ec3f6cac768816f79c6faa3e53213487fb30c35 Mon Sep 17 00:00:00 2001 From: Minizbot2012 Date: Tue, 9 Feb 2021 17:13:44 -0800 Subject: [PATCH] Massive generification work --- README.md | 2 +- go.mod | 2 +- go.sum | 14 +++++++--- orbbind.go | 22 ++++++++-------- ui/baseui/baseui.go | 23 ---------------- ui/mainpage/mainpage.go | 58 ----------------------------------------- ui/mui/generator.go | 58 +++++++++++++++++++++++++++++++++++++++++ ui/sidepage/sidepage.go | 51 ------------------------------------ 8 files changed, 81 insertions(+), 149 deletions(-) delete mode 100644 ui/baseui/baseui.go delete mode 100644 ui/mainpage/mainpage.go create mode 100644 ui/mui/generator.go delete mode 100644 ui/sidepage/sidepage.go diff --git a/README.md b/README.md index f3728ae..9bf64ce 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ Orbweaver Mapping utility for orbmap -```go get github.com/Minizbot2012/orbbind``` \ No newline at end of file +```go get github.com/OrbTools/orbbind``` \ No newline at end of file diff --git a/go.mod b/go.mod index 3dedbc0..a44cbde 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.15 require ( fyne.io/fyne v1.4.3 - github.com/OrbTools/OrbCommon v0.0.0-20210209215542-e5d03278f0d5 + github.com/OrbTools/OrbCommon v0.0.0-20210209235647-67bb6503d1dd github.com/go-gl/glfw/v3.3/glfw v0.0.0-20201108214237-06ea97f0c265 // indirect github.com/kr/text v0.2.0 // indirect github.com/srwiley/oksvg v0.0.0-20210209000435-a757b9cbd472 // indirect diff --git a/go.sum b/go.sum index 779c751..01c8475 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,16 @@ fyne.io/fyne v1.4.3 h1:356CnXCiYrrfaLGsB7qLK3c6ktzyh8WR05v/2RBu51I= fyne.io/fyne v1.4.3/go.mod h1:8kiPBNSDmuplxs9WnKCkaWYqbcXFy0DeAzwa6PBO9Z8= github.com/Kodeworks/golang-image-ico v0.0.0-20141118225523-73f0f4cfade9/go.mod h1:7uhhqiBaR4CpN0k9rMjOtjpcfGd6DG2m04zQxKnWQ0I= -github.com/OrbTools/OrbCommon v0.0.0-20210209212230-c28d897d2760 h1:2eOcDeOxaRpMd0OIt3jsSl7EjPSzu8FYsGOqM+ilOgE= -github.com/OrbTools/OrbCommon v0.0.0-20210209212230-c28d897d2760/go.mod h1:ErdpS2Y/8Ik89IDNsH+yaOWo/XcKzf4riEBfPG3xK+o= -github.com/OrbTools/OrbCommon v0.0.0-20210209215542-e5d03278f0d5 h1:W48w6MC69gxrqfR2xPUjaPyB7SWOAP6szppMvIKwauI= -github.com/OrbTools/OrbCommon v0.0.0-20210209215542-e5d03278f0d5/go.mod h1:ErdpS2Y/8Ik89IDNsH+yaOWo/XcKzf4riEBfPG3xK+o= +github.com/OrbTools/OrbCommon v0.0.0-20210209224029-73cec4826e73 h1:9bKK432OLKXWfkG4cVZA+LNp8U+jVmc132tuwCU4bQI= +github.com/OrbTools/OrbCommon v0.0.0-20210209224029-73cec4826e73/go.mod h1:ErdpS2Y/8Ik89IDNsH+yaOWo/XcKzf4riEBfPG3xK+o= +github.com/OrbTools/OrbCommon v0.0.0-20210209233138-8623fe5b8a96 h1:YyCVdiz5Yk1dyE7tdV6XATIC3aGHPiPowYrNd5I92cA= +github.com/OrbTools/OrbCommon v0.0.0-20210209233138-8623fe5b8a96/go.mod h1:ErdpS2Y/8Ik89IDNsH+yaOWo/XcKzf4riEBfPG3xK+o= +github.com/OrbTools/OrbCommon v0.0.0-20210209234440-f9da0895ed81 h1:nrS6Fl/cAhYdCk8SAceFGDt1yE/wrErTu+uUo2PQYYU= +github.com/OrbTools/OrbCommon v0.0.0-20210209234440-f9da0895ed81/go.mod h1:ErdpS2Y/8Ik89IDNsH+yaOWo/XcKzf4riEBfPG3xK+o= +github.com/OrbTools/OrbCommon v0.0.0-20210209235147-bc7589e327b4 h1:5OgIJHZvLkZR9v27cas4KrJy19TGQSowXoi09OAiFoE= +github.com/OrbTools/OrbCommon v0.0.0-20210209235147-bc7589e327b4/go.mod h1:ErdpS2Y/8Ik89IDNsH+yaOWo/XcKzf4riEBfPG3xK+o= +github.com/OrbTools/OrbCommon v0.0.0-20210209235647-67bb6503d1dd h1:G9vKM/+GnnbkE3l08LdAahlhhJa4gUk4Qa/dCBJqLCg= +github.com/OrbTools/OrbCommon v0.0.0-20210209235647-67bb6503d1dd/go.mod h1:ErdpS2Y/8Ik89IDNsH+yaOWo/XcKzf4riEBfPG3xK+o= github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/orbbind.go b/orbbind.go index 2161017..3d1ea10 100644 --- a/orbbind.go +++ b/orbbind.go @@ -1,13 +1,12 @@ package main import ( + "reflect" + "fyne.io/fyne" "fyne.io/fyne/app" "fyne.io/fyne/dialog" - "fyne.io/fyne/widget" - "github.com/OrbTools/OrbBind/ui/baseui" - "github.com/OrbTools/OrbBind/ui/mainpage" - "github.com/OrbTools/OrbBind/ui/sidepage" + "github.com/OrbTools/OrbBind/ui/mui" "github.com/OrbTools/OrbCommon/devices/orbweaver" ) @@ -17,10 +16,11 @@ func main() { window.SetMaster() omap := new(orbweaver.PKM) - pages := make(map[string]baseui.PageWithBindings) - pages["main"] = mainpage.NewMainPage(window, omap) - pages["side"] = sidepage.NewSidePage(window, omap) - tabs := widget.NewTabContainer(pages["main"].Create(), pages["side"].Create()) + //pages := make(map[string]baseui.PageWithBindings) + //pages["main"] = mainpage.NewMainPage(window, omap) + //pages["side"] = sidepage.NewSidePage(window, omap) + tabs, setter := mui.Generate(orbweaver.GUI, window, reflect.ValueOf(omap)) + //tabs := widget.NewTabContainer(pages["main"].Create(), pages["side"].Create()) tabs.Resize(fyne.NewSize(640, 480)) main := tabs window.Resize(fyne.NewSize(640, 500)) @@ -41,9 +41,9 @@ func main() { return } if reader != nil { - omap = orbweaver.LoadPKMKeymap(reader) - pages["main"].SetBindings(omap) - pages["side"].SetBindings(omap) + setter(reflect.ValueOf(orbweaver.LoadPKMKeymap(reader))) + // pages["main"].SetBindings(omap) + // pages["side"].SetBindings(omap) } }, window) }))) diff --git a/ui/baseui/baseui.go b/ui/baseui/baseui.go deleted file mode 100644 index bab7161..0000000 --- a/ui/baseui/baseui.go +++ /dev/null @@ -1,23 +0,0 @@ -package baseui - -import ( - "fyne.io/fyne" - "fyne.io/fyne/widget" - "github.com/OrbTools/OrbCommon/devices/orbweaver" -) - -//BasicPage creates a very basic Page -type BasicPage interface { - Create() *widget.TabItem -} - -//PageWithBindings defines a page with bindings -type PageWithBindings interface { - BasicPage - SetBindings(*orbweaver.PKM) -} - -//DialogPage is a dialog popup -type DialogPage interface { - Create() *fyne.CanvasObject -} diff --git a/ui/mainpage/mainpage.go b/ui/mainpage/mainpage.go deleted file mode 100644 index a1acad7..0000000 --- a/ui/mainpage/mainpage.go +++ /dev/null @@ -1,58 +0,0 @@ -package mainpage - -import ( - "strconv" - - "fyne.io/fyne" - "fyne.io/fyne/dialog" - "fyne.io/fyne/layout" - "fyne.io/fyne/widget" - "github.com/OrbTools/OrbBind/ui/bind" - "github.com/OrbTools/OrbCommon/devices/orbweaver" -) - -//Page is a basic page -type Page struct { - binds *orbweaver.PKM - dev map[string]fyne.CanvasObject - parent fyne.Window -} - -func (mp *Page) createButtons() { - for i := 0; i < 4; i++ { - for j := 0; j < 5; j++ { - id := (j + i*5 + 1) - mp.dev["B"+strconv.Itoa(id)] = widget.NewButton(strconv.Itoa(id), func() { - popup := bind.NewBindPage(id, mp.parent, mp.binds.MIP[id-1]) - dialog.ShowCustomConfirm("Binding", "Set", "Cancel", popup.Create(string(id)), func(b bool) { - if b { - mp.binds.MIP[popup.Bind.Bindid-1] = popup.Bind.Bound - } - }, mp.parent) - }) - mp.dev["V"].(*fyne.Container).AddObject(mp.dev["B"+strconv.Itoa(id)]) - } - } -} - -//SetBindings Sets the binding Map -func (mp *Page) SetBindings(o *orbweaver.PKM) { - mp.binds = o -} - -//Create Creates the main binding page -func (mp *Page) Create() *widget.TabItem { - mp.dev = make(map[string]fyne.CanvasObject) - layout := layout.NewGridLayout(5) - mp.dev["V"] = fyne.NewContainerWithLayout(layout) - mp.createButtons() - return widget.NewTabItem("Main Bindings", mp.dev["V"]) -} - -//NewMainPage Creates a new main page -func NewMainPage(parent fyne.Window, pkm *orbweaver.PKM) *Page { - mp := new(Page) - mp.binds = pkm - mp.parent = parent - return mp -} diff --git a/ui/mui/generator.go b/ui/mui/generator.go new file mode 100644 index 0000000..0b74245 --- /dev/null +++ b/ui/mui/generator.go @@ -0,0 +1,58 @@ +package mui + +import ( + "math" + "reflect" + + "fyne.io/fyne" + "fyne.io/fyne/dialog" + "fyne.io/fyne/layout" + "fyne.io/fyne/widget" + "github.com/OrbTools/OrbBind/ui/bind" + "github.com/OrbTools/OrbCommon/gui" +) + +//Generate creates a GUI from definition +func Generate(ui *gui.GUI, window fyne.Window, KBS reflect.Value) (*widget.TabContainer, func(reflect.Value)) { + keybind := KBS + tui := widget.NewTabContainer() + for _, page := range ui.Pages[:] { + var cont *fyne.Container + pg := page + switch page.Type { + case gui.PGrid: + { + cont = fyne.NewContainer() + cont.Layout = layout.NewGridLayout(int(math.Ceil(math.Sqrt(float64(len(page.Keys)))))) + } + default: + { + cont = fyne.NewContainer() + cont.Layout = layout.NewGridLayout(int(math.Ceil(math.Sqrt(float64(len(page.Keys)))))) + } + } + for _, key := range page.Keys[:] { + ky := key + btn := widget.NewButton(ky.KeyName, func() { + bp := bind.NewBindPage(ky.KeyID, window, uint16(keybind.Elem().FieldByName(pg.Hive).Index(ky.KeyID).Uint())) + cont := bp.Create(ky.KeyName) + ok := func(ok bool) { + kb := keybind.Elem() + if ok { + field := kb.FieldByName(pg.Hive) + if field.Kind() == reflect.Array { + field.Index(ky.KeyID).SetUint(uint64(bp.Bind.Bound)) + println(field.Index(ky.KeyID).Uint()) + println(ky.KeyID) + } + } + } + dialog.ShowCustomConfirm("Bind", "Save", "Cancel", cont, ok, window) + }) + cont.AddObject(btn) + } + ti := widget.NewTabItem(page.Name, cont) + tui.Append(ti) + } + return tui, func(v reflect.Value) { keybind = v } +} diff --git a/ui/sidepage/sidepage.go b/ui/sidepage/sidepage.go deleted file mode 100644 index fa88741..0000000 --- a/ui/sidepage/sidepage.go +++ /dev/null @@ -1,51 +0,0 @@ -package sidepage - -import ( - "strconv" - - "fyne.io/fyne" - "fyne.io/fyne/dialog" - "fyne.io/fyne/layout" - "fyne.io/fyne/widget" - "github.com/OrbTools/OrbBind/ui/bind" - "github.com/OrbTools/OrbCommon/devices/orbweaver" -) - -//Page Overweave side button configs -type Page struct { - binds *orbweaver.PKM - dev map[string]fyne.CanvasObject - parent fyne.Window -} - -//SetBindings Loads bindings from SIP -func (p *Page) SetBindings(o *orbweaver.PKM) { - p.binds = o -} - -//Create Creates the page -func (p *Page) Create() *widget.TabItem { - p.dev = make(map[string]fyne.CanvasObject) - strs := []string{"Upper Button", "Dpad Up", "Dpad Right", "Dpad Down", "Dpad Left", "Lower Button"} - for j := 0; j < 6; j++ { - id := j + 1 - p.dev["B"+strconv.Itoa(id)] = widget.NewButton(strs[j], func() { - popup := bind.NewBindPage(id, p.parent, p.binds.SIP[id-1]) - dialog.ShowCustomConfirm("Binding", "Set", "Cancel", popup.Create(string(id)), func(b bool) { - if b { - p.binds.SIP[popup.Bind.Bindid-1] = popup.Bind.Bound - } - }, p.parent) - }) - } - cont := fyne.NewContainerWithLayout(layout.NewBorderLayout(p.dev["B2"], p.dev["B4"], p.dev["B5"], p.dev["B3"]), p.dev["B2"], p.dev["B4"], p.dev["B5"], p.dev["B3"], widget.NewVBox(p.dev["B1"], p.dev["B6"])) - return widget.NewTabItem("Side Config", cont) -} - -//NewSidePage Creates a new side configuration page -func NewSidePage(parent fyne.Window, pkm *orbweaver.PKM) *Page { - p := new(Page) - p.binds = pkm - p.parent = parent - return p -}