diff --git a/ui/scrnplt.go b/ui/scrnplt.go index f383ede2bf410fb434d9723cb8034abb5294bdbb..715fc16582508183f7c8080c4d5e385a6f55feaf 100644 --- a/ui/scrnplt.go +++ b/ui/scrnplt.go @@ -8,48 +8,51 @@ package ui import ( "bytes" "fmt" + "fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/dialog" "fyne.io/fyne/v2/storage" - "fyne.io/fyne/v2/widget" ) -func coffee() { - print("coffee\n") -} -func tea() { - print("tea\n") +func tryfsave(uriw fyne.URIWriteCloser, err error, data []byte, parent fyne.Window) { + if err != nil { + dialog.ShowError(err, parent) + return + } + if uriw == nil { + return // cancel + } + if _, err := uriw.Write(data); err != nil { + fmt.Println("error writing") + } + if err := uriw.Close(); err != nil { + fmt.Println("error closing") + } + fmt.Printf("trydsave called with %+v %+v", uriw, err) } -func trydsave(uriwc fyne.URIWriteCloser, err error) { - uriwc.Write([]byte("hello from trydsave\n")) - fmt.Printf("trydsave called with %+v %+v", uriwc, err) -} -func dsave(parent fyne.Window) { - filter := storage.NewExtensionFileFilter([]string{"csv", "abc"}) - t := dialog.NewFileSave(trydsave, parent) - t.SetFileName("f_val.csv") +func fsave(parent fyne.Window, fdata []byte, suggested string) { + filter := storage.NewExtensionFileFilter([]string{"png", "PNG"}) + ts := func(uriw fyne.URIWriteCloser, err error) { + tryfsave(uriw, err, fdata, parent) + } + t := dialog.NewFileSave(ts, parent) + t.SetFileName(suggested) t.SetFilter(filter) t.Show() - fmt.Println("dsave called and returning") -} -func stopme() { - print("stopme\n") + fmt.Println("dsave called and returning") } -type fssavefunc func(fyne.URIReadCloser, error) - -func topmenu(parent fyne.Window) *fyne.Menu { - ds := func() { dsave(parent) } - a := fyne.NewMenuItem("coffee", coffee) - b := fyne.NewMenuItem("tea", tea) +func topmenu(parent fyne.Window, fdata, xdata []byte) *fyne.Menu { + ds := func() { fsave(parent, fdata, "func_val.png") } // function values + xs := func() { fsave(parent, xdata, "x_trj.png") } c := fyne.NewMenuItem("save func plot", ds) - d := fyne.NewMenuItem("frueh feierabend", stopme) - return fyne.NewMenu("a simple menu", a, b, c, d) + d := fyne.NewMenuItem("save X trajectory plot", xs) + return fyne.NewMenu("actions", c, d) } func fileSaved(f fyne.URIWriteCloser, w fyne.Window) { @@ -64,44 +67,22 @@ func fileSaved(f fyne.URIWriteCloser, w fyne.Window) { } fmt.Println("Saved to...", f.URI()) } -func nothing(...interface{}) {} - -// buf2file takes an array of bytes and writes them to a file. -func buf2file(buf []byte) { - var z fyne.URIWriteCloser - - // NewFileSave(callback func(fyne.URIWriteCloser, error), parent fyne.Window) *FileDialog - var win fyne.Window - fs := widget.NewButton("File Save", func() { - dialog.ShowFileSave(func(writer fyne.URIWriteCloser, err error) { - if err != nil { - dialog.ShowError(err, win) - return - } - if writer == nil { - fmt.Println("Cancelled") - return - } - - fileSaved(writer, win) - }, win) - }) - nothing(fs, z) -} +func nothing(...interface{}) {} func breaker(...interface{}) {} -func Scrnplt(fdata []byte, xdata []byte) { +func Scrnplt(fdata, xdata []byte) { a := app.NewWithID("ackley") // Find a way to check if it is happy - w := a.NewWindow("container") + w := a.NewWindow("Monte Carlo") - w.SetMainMenu(fyne.NewMainMenu(topmenu(w))) + w.SetMainMenu(fyne.NewMainMenu(topmenu(w, fdata, xdata))) fImage := canvas.NewImageFromReader(bytes.NewReader(fdata), "func.png") fImage.FillMode = canvas.ImageFillContain xImage := canvas.NewImageFromReader(bytes.NewReader(xdata), "xdata.png") xImage.FillMode = canvas.ImageFillContain content := container.NewGridWithRows(2, fImage, xImage) - w.Resize(fyne.NewSize(500, 300)) + w.Resize(fyne.NewSize(500, 600)) w.SetContent(content) w.ShowAndRun() + fmt.Println("This was executed after the graphics finished") }