counter_screen.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package UI
  2. import (
  3. gotime "time"
  4. )
  5. type CounterScreen struct {
  6. FullScreen
  7. CounterFont *ttf.Font
  8. TextFont1 *ttf.Font
  9. TextFont2 *ttf.Font
  10. TopLabel LabelInterface
  11. BottomLabel LabelInterface
  12. NumberLabel LabelInterface
  13. BGColor *color.Color
  14. FGColor *color.Color
  15. Counting bool
  16. Number int // 10
  17. inter_counter int //
  18. TheTicker *gotime.Ticker
  19. TickerStoped chan bool
  20. }
  21. func NewCounterScreen() *CounterScreen {
  22. p := &CounterScreen{}
  23. p.Number = 10
  24. p.CounterFont = Fonts["varela120"]
  25. p.TextFont1 = Fonts["varela15"]
  26. p.TextFont2 = Fonts["varela12"]
  27. p.BGColor = &color.Color{0,0,0,255}
  28. p.FGColor = &color.Color{255,255,255,255}
  29. return p
  30. }
  31. func (self *CounterScreen ) Interval() {
  32. for {
  33. select {
  34. case <-self.TheTicker.C:
  35. self.inter_counter += 1
  36. if self.Number == 0 {
  37. self.Counting = false
  38. self.TheTicker.Stop()
  39. fmt.Println("do the real shutdown")
  40. if sysgo.CurKeySet != "PC" {
  41. cmdpath := "feh --bg-center sysgo/gameshell/wallpaper/seeyou.png;"
  42. cmdpath = cmdpath + "sleep 3;"
  43. cmdpath = cmdpath + "sudo halt -p"
  44. event.Post(RUNEVT,cmdpath)
  45. }
  46. break
  47. }
  48. if self.inter_counter >= 2 {
  49. self.Number -= 1
  50. if self.Number < 0 {
  51. self.Number = 0
  52. }
  53. fmt.Println("sub Number ", self.Number)
  54. self.inter_counter = 0
  55. self.Draw()
  56. self.SwapAndShow()
  57. }
  58. case <- self.TickerStoped:
  59. break
  60. }
  61. }
  62. }
  63. func (self *CounterScreen) StartCounter() {
  64. if self.Counting == true {
  65. return
  66. }
  67. self.Number = 10
  68. self.inter_counter = 0
  69. self.Counting = true
  70. self.TheTicker.Start()
  71. go self.Interval()
  72. }
  73. func (self *CounterScreen) StopCounter() {
  74. if self.Counting == false {
  75. return
  76. }
  77. self.Counting = false
  78. self.Number = 0
  79. self.inter_counter = 0
  80. self.TheTicker.Stop()
  81. self.TickerStoped <- true
  82. }
  83. func (self *CounterScreen) Init() {
  84. self.CanvasHWND = surface.Surface(self.Width,self.Height)
  85. self.TopLabel = NewLabel()
  86. self.TopLabel.SetCanvasHWND( self.CanvasHWND)
  87. self.TopLabel.Init("System shutdown in", self.TextFont1,self.FGColor)
  88. self.BottomLabel = NewLabel()
  89. self.BottomLabel.SetCanvasHWND(self.CanvasHWND)
  90. self.BottomLabel.Init("Press any key to stop countdown",self.TextFont2,self.FGColor)
  91. self.NumberLabel = NewLabel()
  92. self.NumberLabel.SetCanvasHWND(self.CanvasHWND)
  93. number_str := fmt.Sprintf("%d",self.Number)
  94. self.NumberLabel.Init(number_str,self.CounterFont,self.FGColor)
  95. self.TheTicker = gotime.NewTicker(500 * gotime.Millisecond)
  96. self.TickerStoped = make(chan bool,1)
  97. }
  98. func (self *CounterScreen) Draw() {
  99. surface.Fill(self.CanvasHWND, self.FGColor)
  100. self.TopLabel.NewCoord(Width/2,15)
  101. self.TopLabel.DrawCenter(false)
  102. self.BottomLabel.NewCoord(Width/2, Height-15)
  103. self.BottomLabel.DrawCenter(false)
  104. self.NumberLabel.NewCoord(Width/2,Height/2)
  105. number_str := fmt.Sprintf("%d",self.Number)
  106. self.NumberLabel.SetText(number_str)
  107. self.NumberLabel.DrawCenter(false)
  108. }