package main import ( "fmt" "image/color" "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/widget" ) type progress struct { lbl *widget.Label pb *widget.ProgressBar *widget.PopUp } func newProgress(w fyne.Window) progress { out := progress{} // Create label to show how many bytes transfered and center it out.lbl = widget.NewLabel("0 / 0 B") out.lbl.Alignment = fyne.TextAlignCenter // Create new progress bar out.pb = widget.NewProgressBar() // Create new rectangle to set the size of the popup sizeRect := canvas.NewRectangle(color.Transparent) sizeRect.SetMinSize(fyne.NewSize(300, 50)) // Create vbox for label and progress bar l := container.NewVBox(out.lbl, out.pb) // Create popup out.PopUp = widget.NewModalPopUp(container.NewMax(l, sizeRect), w.Canvas()) return out } func (p progress) SetTotal(v float64) { p.pb.Max = v p.pb.Refresh() p.lbl.SetText(fmt.Sprintf("%.0f / %.0f B", p.pb.Value, v)) } func (p progress) SetValue(v float64) { p.pb.SetValue(v) p.lbl.SetText(fmt.Sprintf("%.0f / %.0f B", v, p.pb.Max)) }