diff --git a/keymap/orbweaver/orbweaver.go b/keymap/orbweaver/orbweaver.go index 345d0c0..5114f6b 100644 --- a/keymap/orbweaver/orbweaver.go +++ b/keymap/orbweaver/orbweaver.go @@ -2,8 +2,8 @@ package orbweaver import ( "encoding/binary" - "os" + "fyne.io/fyne" "github.com/minizbot2012/orbbind/keys" ) @@ -15,8 +15,7 @@ type PKM struct { } //SaveIntoKeymap saves an orb -func SaveIntoKeymap(mapped *PKM, path string) { - fil, _ := os.OpenFile(path, os.O_RDWR, 0) +func SaveIntoKeymap(mapped *PKM, file fyne.FileWriteCloser) { for i := 0; i < 26; i++ { if i < 26 { buf := make([]byte, 2) @@ -25,21 +24,21 @@ func SaveIntoKeymap(mapped *PKM, path string) { } else { binary.LittleEndian.PutUint16(buf, uint16(keys.GetSCForASCII(int(byte(mapped.SIP[i-20]))))) } - fil.Write(buf) + file.Write(buf) } else { arr := []byte{byte(mapped.COL[0]), byte(mapped.COL[1]), byte(mapped.COL[2])} - fil.Write(arr) + file.Write(arr) } } + file.Close() } //LoadFile loads an orb -func LoadFile(file string) *PKM { +func LoadFile(file fyne.FileReadCloser) *PKM { mapped := &PKM{} - inf, _ := os.Open(file) for i := 0; i < 26; i++ { b := make([]byte, 2) - inf.Read(b) + file.Read(b) Asc := keys.GetASCIIForSC(int(binary.LittleEndian.Uint16(b))) if i < 26 { if i < 20 { @@ -50,10 +49,10 @@ func LoadFile(file string) *PKM { } } b := make([]byte, 3) - inf.Read(b) + file.Read(b) mapped.COL[0] = int(b[0]) mapped.COL[1] = int(b[1]) mapped.COL[2] = int(b[2]) - inf.Close() + file.Close() return mapped } diff --git a/orbbind.go b/orbbind.go index a9bd146..d1a55d3 100644 --- a/orbbind.go +++ b/orbbind.go @@ -8,6 +8,7 @@ import ( "fyne.io/fyne/dialog" "fyne.io/fyne/widget" "github.com/minizbot2012/orbbind/keymap/orbweaver" + "github.com/minizbot2012/orbbind/ui/baseui" "github.com/minizbot2012/orbbind/ui/mainpage" "github.com/minizbot2012/orbbind/ui/sidepage" ) @@ -15,25 +16,60 @@ import ( func main() { ap := app.NewWithID("com.minizbot2012.orbbind") window := ap.NewWindow("Orbweaver Rebinding") - window.Resize(fyne.NewSize(480, 480)) + window.SetMaster() + omap := &orbweaver.PKM{} - nmp := mainpage.NewMainPage(window, omap) - nsp := sidepage.NewSidePage(window, omap) - tabs := widget.NewTabContainer(nmp.Create(), nsp.Create()) - tabs.Resize(window.Content().Size()) - window.SetMainMenu(fyne.NewMainMenu(fyne.NewMenu("File", fyne.NewMenuItem("Save", func() { - dialog.ShowFileSave(func(p string) { - orbweaver.SaveIntoKeymap(omap, p) + 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()) + tabs.Resize(fyne.NewSize(640, 480)) + dmenu := widget.NewHBox(widget.NewButton("Save", func() { + dialog.ShowFileSave(func(writer fyne.FileWriteCloser, err error) { + if err != nil { + dialog.ShowError(err, window) + return + } + if writer != nil { + orbweaver.SaveIntoKeymap(omap, writer) + } + }, window) + }), widget.NewButton("Load", func() { + dialog.ShowFileOpen(func(reader fyne.FileReadCloser, err error) { + if err != nil { + dialog.ShowError(err, window) + return + } + if reader != nil { + omap = orbweaver.LoadFile(reader) + pages["main"].SetBindings(omap) + pages["side"].SetBindings(omap) + } + }, window) + })) + main := widget.NewVBox(dmenu, tabs) + window.Resize(fyne.NewSize(640, 500)) + /*mainMenu := fyne.NewMainMenu(fyne.NewMenu("File", fyne.NewMenuItem("Save", func() { + dialog.ShowFileSave(func(writer fyne.FileWriteCloser, err error) { + if err != nil { + dialog.ShowError(err, window) + return + } + orbweaver.SaveIntoKeymap(omap, writer) }, window) }), fyne.NewMenuItem("Load", func() { - dialog.ShowFileOpen(func(p string) { - if p != "" { - omap = orbweaver.LoadFile(p) - nmp.SetBindings(omap) - nsp.SetBindings(omap) + dialog.ShowFileOpen(func(reader fyne.FileReadCloser, err error) { + if err != nil { + dialog.ShowError(err, window) + return } + omap = orbweaver.LoadFile(reader) + pages["main"].SetBindings(omap) + pages["side"].SetBindings(omap) }, window) - })))) - window.SetContent(tabs) + }))) + window.SetMainMenu(mainMenu) + */ + window.SetContent(main) window.ShowAndRun() } diff --git a/ui/baseui/baseui.go b/ui/baseui/baseui.go index 240d2e0..cdec55c 100644 --- a/ui/baseui/baseui.go +++ b/ui/baseui/baseui.go @@ -14,7 +14,7 @@ type BasicPage interface { //PageWithBindings defines a page with bindings type PageWithBindings interface { BasicPage - SetBinding(*orbweaver.PKM) + SetBindings(*orbweaver.PKM) } //DialogPage is a dialog popup diff --git a/ui/mainpage/main.go b/ui/mainpage/mainpage.go similarity index 100% rename from ui/mainpage/main.go rename to ui/mainpage/mainpage.go