Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.35 KB | None | 0 0
  1. package bar
  2.  
  3. import (
  4.     "fmt"
  5. )
  6.  
  7. const Template = "[%s] %3d%%"
  8.  
  9. type ProgressBar struct {
  10.     template string
  11.  
  12.     str string
  13.  
  14.     curChars   int
  15.     totalChars int
  16.     percentage int
  17.     itt        int
  18. }
  19.  
  20. func NewProgressBar(totalChars int) *ProgressBar {
  21.     b := ProgressBar{}
  22.     b.template = Template
  23.  
  24.     b.curChars = 0
  25.     b.totalChars = totalChars
  26.  
  27.     b.str = ""
  28.  
  29.     return &b
  30. }
  31.  
  32. func (b *ProgressBar) Reset() {
  33.     b.curChars = 0
  34.     b.updateNumbers()
  35.     b.Update()
  36. }
  37.  
  38. func (b *ProgressBar) Done() {
  39.     b.curChars = 0
  40.     fmt.Println("")
  41. }
  42.  
  43. func (b *ProgressBar) SetTemplate(template string) {
  44.     b.template = template
  45.     b.updateNumbers()
  46.     b.Update()
  47. }
  48.  
  49. func (b *ProgressBar) SetTotalChars(total int) {
  50.     b.totalChars = total
  51.     b.updateNumbers()
  52.     b.Update()
  53. }
  54.  
  55. func (b *ProgressBar) SetPercentage(percentage int) {
  56.     b.percentage = percentage
  57.     if percentage > 100 {
  58.         b.percentage = 100
  59.     }
  60.  
  61.     b.updateNumbers()
  62.     b.Update()
  63. }
  64.  
  65. func (b *ProgressBar) updateNumbers() {
  66.     floatPercentage := float64(b.percentage) / 100
  67.     floatChars := float64(b.totalChars)
  68.     b.curChars = int(floatChars * floatPercentage)
  69. }
  70.  
  71. func (b *ProgressBar) Update() {
  72.     restCount := b.totalChars - b.curChars
  73.     out := ""
  74.     var i int
  75.     for i = 0; i < b.curChars; i++ {
  76.         out += "#"
  77.     }
  78.  
  79.     for i = 0; i < restCount; i++ {
  80.         out += "."
  81.     }
  82.  
  83.     fmt.Printf(b.template+"\r", out, b.percentage)
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement