From 0f0e3563e03a15cb522aee9fdb29cad82ae0fa4a Mon Sep 17 00:00:00 2001 From: cuu Date: Thu, 5 Jul 2018 11:44:08 +0800 Subject: [PATCH] counter down screen --- sys.py/UI/counter_screen.py | 111 ++++++++++++++++++++++++++++++++++++ sys.py/UI/fonts.py | 1 + sys.py/UI/full_screen.py | 38 ++++++++++++ sys.py/UI/label.py | 7 +++ sys.py/UI/main_screen.py | 15 ++++- sys.py/UI/title_bar.py | 2 - sys.py/config.py | 2 +- sys.py/run.py | 41 +++++++++---- 8 files changed, 199 insertions(+), 18 deletions(-) create mode 100644 sys.py/UI/counter_screen.py create mode 100644 sys.py/UI/full_screen.py diff --git a/sys.py/UI/counter_screen.py b/sys.py/UI/counter_screen.py new file mode 100644 index 0000000..d331152 --- /dev/null +++ b/sys.py/UI/counter_screen.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- + +import pygame +import gobject +import commands +## local package import +from constants import Width,Height +from label import Label +from fonts import fonts +from full_screen import FullScreen + +import config + +class CounterScreen(FullScreen): + + _CounterFont = fonts["varela120"] + _TextFont1 = fonts["varela15"] + _TextFont2 = fonts["varela12"] + + _TopLabel = None + _BottomLabel = None + _NumberLabel = None + + _BGColor = pygame.Color(0,0,0) + _FGColor = pygame.Color(255,255,255) + + _Counting = False + _Number = 10 + _GobjectIntervalId = -1 + + _inter_counter = 0 + + def GObjectInterval(self): + + self._inter_counter+=1 + if self._inter_counter >= 10: + self._Number-=1 + print("sub Number %d " % self._Number) + self._inter_counter = 0 + + + if self._inter_counter == 2: + commands.getstatusoutput("echo 0 > /proc/driver/led1") + #turn off + + elif self._inter_counter == 7: + commands.getstatusoutput("echo 1 > /proc/driver/led1") + #turn on + + if self._Number == 0: + self._Counting = False + + print("do the real shutdown") + + if config.CurKeySet != "PC": + cmdpath = "feh --bg-center gameshell/wallpaper/seeyou.png;" + cmdpath += "sleep 3;" + cmdpath += "sudo halt -p" + pygame.event.post( pygame.event.Event(RUNSYS, message=cmdpath)) + + self.Draw() + self.SwapAndShow() + + return self._Counting + + def StartCounter(self): + if self._Counting == True: + return + + self._Counting = True + + self._GobjectIntervalId = gobject.timeout_add(100,self.GObjectInterval) + + def StopCounter(self): + self._Counting = False + self._Number = 10 + commands.getstatusoutput("echo 0 > /proc/driver/led1") + + if self._GobjectIntervalId != -1: + gobject.source_remove(self._GobjectIntervalId) + self._GobjectIntervalId = -1 + + def Init(self): + self._CanvasHWND = pygame.Surface((self._Width,self._Height)) + self._TopLabel = Label() + self._TopLabel.SetCanvasHWND(self._CanvasHWND) + self._TopLabel.Init("System shutdown in", self._TextFont1, self._FGColor) + + self._BottomLabel = Label() + self._BottomLabel.SetCanvasHWND(self._CanvasHWND) + self._BottomLabel.Init("Press any key to stop countdown", self._TextFont2, self._FGColor) + + self._NumberLabel = Label() + self._NumberLabel.SetCanvasHWND(self._CanvasHWND) + self._NumberLabel.Init(str(self._Number), self._CounterFont, self._FGColor) + + def Draw(self): + self._CanvasHWND.fill( self._BGColor ) + + self._TopLabel.NewCoord(Width/2, 15) + self._TopLabel.DrawCenter() + + self._BottomLabel.NewCoord(Width/2, Height-15) + self._BottomLabel.DrawCenter() + + self._NumberLabel.NewCoord(Width/2,Height/2) + self._NumberLabel.SetText(str(self._Number)) + self._NumberLabel.DrawCenter() + + + diff --git a/sys.py/UI/fonts.py b/sys.py/UI/fonts.py index 29d5e19..5fc2555 100644 --- a/sys.py/UI/fonts.py +++ b/sys.py/UI/fonts.py @@ -38,6 +38,7 @@ fonts["varela27"] = pygame.font.Font(fonts_path["varela"],27) fonts["varela28"] = pygame.font.Font(fonts_path["varela"],28) fonts["varela34"] = pygame.font.Font(fonts_path["varela"],34) fonts["varela40"] = pygame.font.Font(fonts_path["varela"],40) +fonts["varela120"] = pygame.font.Font(fonts_path["varela"],120) fonts["veramono25"] = pygame.font.Font(fonts_path["veramono"],25) fonts["veramono24"] = pygame.font.Font(fonts_path["veramono"],24) diff --git a/sys.py/UI/full_screen.py b/sys.py/UI/full_screen.py new file mode 100644 index 0000000..c6e2c65 --- /dev/null +++ b/sys.py/UI/full_screen.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- + +import pygame +#from sys import exit +#import os +#import sys + +#from libs import easing +#from datetime import datetime + +#from beeprint import pp + +## local package import +from constants import Width,Height + + +class FullScreen(object): + _PosX = 0 + _PosY = 0 + _Width = Width + _Height = Height + _CanvasHWND = None + _HWND = None + + def __init__(self): + pass + + def Init(self): + pass + + def SwapAndShow(self): + if self._HWND != None: + self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width,self._Height)) + pygame.display.update() + + def Draw(self): + pass + diff --git a/sys.py/UI/label.py b/sys.py/UI/label.py index 2fe65a6..fdc6889 100644 --- a/sys.py/UI/label.py +++ b/sys.py/UI/label.py @@ -4,6 +4,8 @@ import pygame #import base64 #from beeprint import pp +from constants import Width,Height +from util_funcs import midRect class Label: _PosX=0 @@ -50,6 +52,11 @@ class Label: def SetCanvasHWND(self,_canvashwnd): self._CanvasHWND = _canvashwnd + def DrawCenter(self,bold=False): + self._FontObj.set_bold(bold) ## avoing same font tangling set_bold to others + my_text = self._FontObj.render( self._Text,True,self._Color) + self._CanvasHWND.blit(my_text,midRect(self._PosX,self._PosY,self._Width,self._Height,Width,Height)) + def Draw(self,bold=False): self._FontObj.set_bold(bold) ## avoing same font tangling set_bold to others my_text = self._FontObj.render( self._Text,True,self._Color) diff --git a/sys.py/UI/main_screen.py b/sys.py/UI/main_screen.py index 6def24e..8dcc779 100644 --- a/sys.py/UI/main_screen.py +++ b/sys.py/UI/main_screen.py @@ -26,6 +26,7 @@ from untitled_icon import UntitledIcon from Emulator import MyEmulator from skin_manager import SkinManager +from counter_screen import CounterScreen class MessageBox(Label): _Parent = None @@ -135,7 +136,8 @@ class MainScreen(object): _MsgBoxFont = fonts["veramono20"] _IconFont = fonts["varela15"] _SkinManager = None - + + _CounterScreen = None def __init__(self): self._Pages = [] @@ -149,6 +151,12 @@ class MainScreen(object): self._SkinManager = SkinManager() self._SkinManager.Init() + + self._CounterScreen = CounterScreen() + self._CounterScreen._HWND = self._HWND + + self._CounterScreen.Init() + def FartherPages(self): self._PageMax = len(self._Pages) @@ -515,8 +523,9 @@ class MainScreen(object): self.SwapAndShow() if event.key == CurKeys["Space"]: - self.Draw() - self.SwapAndShow() + self._CounterScreen.Draw() + self._CounterScreen.SwapAndShow() + self._CounterScreen.StartCounter() ## leave rest to Pages current_page_key_down_cb = getattr(self._CurrentPage,"KeyDown",None) diff --git a/sys.py/UI/title_bar.py b/sys.py/UI/title_bar.py index 81ca4fb..75891bf 100644 --- a/sys.py/UI/title_bar.py +++ b/sys.py/UI/title_bar.py @@ -61,12 +61,10 @@ class TitleBar: SwapAndShow() else: self._InLowBackLight+=1 - if self._InLowBackLight > 10: self.CheckBatteryStat() self.SyncSoundVolume() self.UpdateWifiStrength() - SwapAndShow() self._InLowBackLight = 0 return True diff --git a/sys.py/config.py b/sys.py/config.py index 044eca7..09d025e 100644 --- a/sys.py/config.py +++ b/sys.py/config.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -CurKeySet = "GameShell" ## >>> PC or GameShell <<< +CurKeySet = "PC" ## >>> PC or GameShell <<< DontLeave = False diff --git a/sys.py/run.py b/sys.py/run.py index 207e469..636b479 100644 --- a/sys.py/run.py +++ b/sys.py/run.py @@ -76,7 +76,12 @@ def gobject_loop(): def RestoreLastBackLightBrightness(main_screen): global last_brt,passout_time_stage - + + main_screen._CounterScreen.StopCounter() + + passout_time_stage = 0 + main_screen._TitleBar._InLowBackLight = -1 + if last_brt == -1: return @@ -96,10 +101,7 @@ def RestoreLastBackLightBrightness(main_screen): f.truncate() f.close() last_brt = -1 - main_screen._TitleBar._InLowBackLight = -1 - passout_time_stage = 0 - else: - + else: f.close() return @@ -159,14 +161,27 @@ def InspectionTeam(main_screen): everytime_keydown = cur_time elif cur_time - everytime_keydown > time_3 and passout_time_stage == 2: - print("Power Off now") - - if config.CurKeySet != "PC": - cmdpath = "sudo halt -p" - pygame.event.post( pygame.event.Event(RUNSYS, message=cmdpath)) + print("Power Off counting down") - passout_time_stage = 0 - everytime_keydown = cur_time + main_screen._CounterScreen.Draw() + main_screen._CounterScreen.SwapAndShow() + main_screen._CounterScreen.StartCounter() + + if main_screen._CounterScreen._Counting == True: + return True + + try: + f = open(config.BackLight,"r+") + except IOError: + pass + else: + with f: + brt = last_brt + f.seek(0) + f.write(str(brt)) + f.truncate() + f.close() + main_screen._TitleBar._InLowBackLight = 0 return True @@ -273,6 +288,7 @@ def event_process(event,main_screen): ########################################################### if event.key == pygame.K_ESCAPE: pygame.event.clear() + key_down_cb = getattr(main_screen,"KeyDown",None) if key_down_cb != None: @@ -368,6 +384,7 @@ def big_loop(): main_screen.ReadTheDirIntoPages("../Menu",0,None) main_screen.FartherPages() + title_bar._SkinManager = main_screen._SkinManager foot_bar._SkinManager = main_screen._SkinManager