mirror of
https://github.com/clockworkpi/LauncherGoDev.git
synced 2026-03-20 19:02:58 +01:00
counter screen and interval checking in main.go
This commit is contained in:
159
sysgo/UI/counter_screen.go
Normal file
159
sysgo/UI/counter_screen.go
Normal file
@@ -0,0 +1,159 @@
|
||||
package UI
|
||||
|
||||
import (
|
||||
|
||||
gotime "time"
|
||||
|
||||
)
|
||||
type CounterScreen struct {
|
||||
FullScreen
|
||||
|
||||
|
||||
CounterFont *ttf.Font
|
||||
TextFont1 *ttf.Font
|
||||
TextFont2 *ttf.Font
|
||||
|
||||
TopLabel LabelInterface
|
||||
BottomLabel LabelInterface
|
||||
NumberLabel LabelInterface
|
||||
BGColor *color.Color
|
||||
FGColor *color.Color
|
||||
|
||||
Counting bool
|
||||
|
||||
Number int // 10
|
||||
|
||||
inter_counter int //
|
||||
|
||||
TheTicker *gotime.Ticker
|
||||
TickerStoped chan bool
|
||||
|
||||
}
|
||||
|
||||
func NewCounterScreen() *CounterScreen {
|
||||
p := &CounterScreen{}
|
||||
p.Number = 10
|
||||
p.CounterFont = Fonts["varela120"]
|
||||
p.TextFont1 = Fonts["varela15"]
|
||||
p.TextFont2 = Fonts["varela12"]
|
||||
|
||||
p.BGColor = &color.Color{0,0,0,255}
|
||||
p.FGColor = &color.Color{255,255,255,255}
|
||||
|
||||
return p
|
||||
}
|
||||
|
||||
func (self *CounterScreen ) Interval() {
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-self.TheTicker.C:
|
||||
self.inter_counter += 1
|
||||
|
||||
if self.Number == 0 {
|
||||
self.Counting = false
|
||||
self.TheTicker.Stop()
|
||||
fmt.Println("do the real shutdown")
|
||||
|
||||
if sysgo.CurKeySet != "PC" {
|
||||
cmdpath := "feh --bg-center sysgo/gameshell/wallpaper/seeyou.png;"
|
||||
cmdpath = cmdpath + "sleep 3;"
|
||||
cmdpath = cmdpath + "sudo halt -p"
|
||||
event.Post(RUNEVT,cmdpath)
|
||||
|
||||
}
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
if self.inter_counter >= 2 {
|
||||
self.Number -= 1
|
||||
if self.Number < 0 {
|
||||
self.Number = 0
|
||||
}
|
||||
|
||||
fmt.Println("sub Number ", self.Number)
|
||||
self.inter_counter = 0
|
||||
|
||||
self.Draw()
|
||||
self.SwapAndShow()
|
||||
|
||||
}
|
||||
case <- self.TickerStoped:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
func (self *CounterScreen) StartCounter() {
|
||||
if self.Counting == true {
|
||||
return
|
||||
}
|
||||
|
||||
self.Number = 10
|
||||
self.inter_counter = 0
|
||||
|
||||
self.Counting = true
|
||||
|
||||
self.TheTicker.Start()
|
||||
|
||||
go self.Interval()
|
||||
|
||||
}
|
||||
|
||||
|
||||
func (self *CounterScreen) StopCounter() {
|
||||
if self.Counting == false {
|
||||
return
|
||||
}
|
||||
|
||||
self.Counting = false
|
||||
self.Number = 0
|
||||
self.inter_counter = 0
|
||||
|
||||
self.TheTicker.Stop()
|
||||
self.TickerStoped <- true
|
||||
|
||||
}
|
||||
|
||||
func (self *CounterScreen) Init() {
|
||||
|
||||
self.CanvasHWND = surface.Surface(self.Width,self.Height)
|
||||
|
||||
self.TopLabel = NewLabel()
|
||||
self.TopLabel.SetCanvasHWND( self.CanvasHWND)
|
||||
self.TopLabel.Init("System shutdown in", self.TextFont1,self.FGColor)
|
||||
|
||||
self.BottomLabel = NewLabel()
|
||||
self.BottomLabel.SetCanvasHWND(self.CanvasHWND)
|
||||
self.BottomLabel.Init("Press any key to stop countdown",self.TextFont2,self.FGColor)
|
||||
|
||||
|
||||
self.NumberLabel = NewLabel()
|
||||
self.NumberLabel.SetCanvasHWND(self.CanvasHWND)
|
||||
number_str := fmt.Sprintf("%d",self.Number)
|
||||
self.NumberLabel.Init(number_str,self.CounterFont,self.FGColor)
|
||||
|
||||
self.TheTicker = gotime.NewTicker(500 * gotime.Millisecond)
|
||||
self.TickerStoped = make(chan bool,1)
|
||||
|
||||
}
|
||||
|
||||
func (self *CounterScreen) Draw() {
|
||||
surface.Fill(self.CanvasHWND, self.FGColor)
|
||||
|
||||
self.TopLabel.NewCoord(Width/2,15)
|
||||
self.TopLabel.DrawCenter(false)
|
||||
|
||||
self.BottomLabel.NewCoord(Width/2, Height-15)
|
||||
self.BottomLabel.DrawCenter(false)
|
||||
|
||||
self.NumberLabel.NewCoord(Width/2,Height/2)
|
||||
number_str := fmt.Sprintf("%d",self.Number)
|
||||
self.NumberLabel.SetText(number_str)
|
||||
self.NumberLabel.DrawCenter(false)
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user