forked from Elara6331/itd
		
	
		
			
				
	
	
		
			65 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
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
 | 
						|
	progLbl *widget.Label
 | 
						|
	pb      *widget.ProgressBar
 | 
						|
	*widget.PopUp
 | 
						|
}
 | 
						|
 | 
						|
func newProgress(w fyne.Window) progress {
 | 
						|
	out := progress{}
 | 
						|
 | 
						|
	out.lbl = widget.NewLabel("")
 | 
						|
	out.lbl.Hide()
 | 
						|
 | 
						|
	// Create label to show how many bytes transfered and center it
 | 
						|
	out.progLbl = widget.NewLabel("0 / 0 B")
 | 
						|
	out.progLbl.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.progLbl, out.pb)
 | 
						|
	// Create popup
 | 
						|
	out.PopUp = widget.NewModalPopUp(container.NewMax(l, sizeRect), w.Canvas())
 | 
						|
 | 
						|
	return out
 | 
						|
}
 | 
						|
 | 
						|
func (p progress) SetText(s string) {
 | 
						|
	p.lbl.SetText(s)
 | 
						|
 | 
						|
	if s == "" {
 | 
						|
		p.lbl.Hide()
 | 
						|
	} else {
 | 
						|
		p.lbl.Show()
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (p progress) SetTotal(v float64) {
 | 
						|
	p.pb.Max = v
 | 
						|
	p.pb.Refresh()
 | 
						|
	p.progLbl.SetText(fmt.Sprintf("%.0f / %.0f B", p.pb.Value, v))
 | 
						|
}
 | 
						|
 | 
						|
func (p progress) SetValue(v float64) {
 | 
						|
	p.pb.SetValue(v)
 | 
						|
	p.progLbl.SetText(fmt.Sprintf("%.0f / %.0f B", v, p.pb.Max))
 | 
						|
}
 |