diff --git a/Menu/GameShell/10_Settings/PowerOptions/__init__.py b/Menu/GameShell/10_Settings/PowerOptions/__init__.py index 12a2b67..b5cdee6 100644 --- a/Menu/GameShell/10_Settings/PowerOptions/__init__.py +++ b/Menu/GameShell/10_Settings/PowerOptions/__init__.py @@ -9,7 +9,7 @@ from libs.roundrects import aa_round_rect #import gobject #from wicd import misc ## local UI import -from UI.constants import Width,Height,ICON_TYPES +from UI.constants import Width,Height,ICON_TYPES,POWEROPT from UI.page import Page,PageSelector from UI.label import Label from UI.fonts import fonts @@ -70,6 +70,14 @@ class PageListItem(object): self._Icons = {} self._Fonts = {} + def SetSmallText(self,text): + + l = Label() + l._PosX = 40 + l.SetCanvasHWND(self._Parent._CanvasHWND) + l.Init(text,self._Fonts["small"]) + self._Labels["Small"] = l + def Init(self,text): l = Label() @@ -81,7 +89,7 @@ class PageListItem(object): def Draw(self): - self._Labels["Text"]._PosY = self._PosY + self._Labels["Text"]._PosY = self._PosY+ (self._Height- self._Labels["Text"]._Height)/2 if self._Active == True: self._Parent._Icons["done"].NewCoord( self._Parent._Width-30,self._PosY+5) @@ -90,15 +98,182 @@ class PageListItem(object): self._Labels["Text"].Draw(self._Active) if "Small" in self._Labels: - self._Labels["Small"]._PosX = self._Labels["Text"]._Width + 16 - self._Labels["Small"]._PosY = self._PosY + self._Labels["Small"]._PosX = self._Width - self._Labels["Small"]._Width -10 + self._Labels["Small"]._PosY = self._PosY + (self._Height- self._Labels["Small"]._Height)/2 self._Labels["Small"].Draw() pygame.draw.line(self._Parent._CanvasHWND,(169,169,169),(self._PosX,self._PosY+self._Height-1),(self._PosX+self._Width,self._PosY+self._Height-1),1) +class InfoPage(Page): + _FootMsg = ["Nav.","","","Back",""] + _MyList = [] + _ListFontObj = fonts["varela15"] + _AList = {} + + _Time1 = 40 + _Time2 = 120 + _Time3 = 300 + + def RefreshList(self): + ## after GenList ,reuse + if self._Time1 == 0: + self._AList["time1"]["label"] = "Never" + else: + self._AList["time1"]["label"] = "%d secs" % self._Time1 + + if self._Time2 == 0: + self._AList["time2"]["label"] = "Never" + else: + self._AList["time2"]["label"] = "%d secs" % self._Time2 + + if self._Time3 == 0: + self._AList["time3"]["label"] = "Never" + else: + self._AList["time3"]["label"] = "%d secs" % self._Time3 + + for i,v in enumerate( self._AList): + self._MyList[i]._Labels["Text"].SetText( self._AList[v]["label"] ) + + def GenList(self): + + time1 = {} + time1["key"] = "time1" + if self._Time1 == 0: + time1["label"] = "Never" + else: + time1["label"] = "%d secs" % self._Time1 + time1["value"] = "Dim Screen" + + time2 = {} + time2["key"] = "time2" + if self._Time2 == 0: + time2["label"] = "Never" + else: + time2["label"] = "%d secs" % self._Time2 + + time2["value"] = "TurnOff Screen" + + time3 = {} + time3["key"] = "time3" + + if self._Time3 == 0: + time3["label"] = "Never" + else: + time3["label"] = "%d secs" % self._Time3 + time3["value"] = "Power Off" + + self._AList["time1"] = time1 + self._AList["time2"] = time2 + self._AList["time3"] = time3 + + self._MyList = [] + + start_x = 0 + start_y = 0 + + for i,v in enumerate( self._AList): + print(v) + li = PageListItem() + li._Parent = self + li._PosX = start_x + li._PosY = start_y + i*PageListItem._Height + li._Width = Width + li._Fonts["normal"] = self._ListFontObj + li._Fonts["small"] = fonts["varela12"] + + if self._AList[v]["label"] != "": + li.Init( self._AList[v]["label"] ) + else: + li.Init( self._AList[v]["key"] ) + + li._Flag = self._AList[v]["key"] + + li.SetSmallText( self._AList[v]["value"] ) + + self._MyList.append(li) + + def Init(self): + if self._Screen != None: + if self._Screen._CanvasHWND != None and self._CanvasHWND == None: + self._CanvasHWND = self._Screen._CanvasHWND + + self._PosX = self._Index*self._Screen._Width + self._Width = self._Screen._Width ## equal to screen width + self._Height = self._Screen._Height + + ps = ListPageSelector() + ps._Parent = self + self._Ps = ps + self._PsIndex = 0 + + self.GenList() + + + def ScrollUp(self): + if len(self._MyList) == 0: + return + self._PsIndex -= 1 + if self._PsIndex < 0: + self._PsIndex = 0 + cur_li = self._MyList[self._PsIndex] + if cur_li._PosY < 0: + for i in range(0, len(self._MyList)): + self._MyList[i]._PosY += self._MyList[i]._Height + + + def ScrollDown(self): + if len(self._MyList) == 0: + return + self._PsIndex +=1 + if self._PsIndex >= len(self._MyList): + self._PsIndex = len(self._MyList) -1 + + cur_li = self._MyList[self._PsIndex] + if cur_li._PosY +cur_li._Height > self._Height: + for i in range(0,len(self._MyList)): + self._MyList[i]._PosY -= self._MyList[i]._Height + + def Click(self): + cur_li = self._MyList[self._PsIndex] + print(cur_li._Flag) + + + def OnLoadCb(self): + self.RefreshList() + + def OnReturnBackCb(self): + pass + """ + self.ReturnToUpLevelPage() + self._Screen.Draw() + self._Screen.SwapAndShow() + """ + + def KeyDown(self,event): + if event.key == CurKeys["A"] or event.key == CurKeys["Menu"]: + self.ReturnToUpLevelPage() + self._Screen.Draw() + self._Screen.SwapAndShow() + + if event.key == CurKeys["Up"]: + self.ScrollUp() + self._Screen.Draw() + self._Screen.SwapAndShow() + if event.key == CurKeys["Down"]: + self.ScrollDown() + self._Screen.Draw() + self._Screen.SwapAndShow() + + def Draw(self): + self.ClearCanvas() + self._Ps.Draw() + + for i in self._MyList: + i.Draw() + class PowerOptionsPage(Page): - _FootMsg = ["Nav.","","","Back","Select"] + _FootMsg = ["Nav.","","Detail","Back","Select"] _MyList = [] _ListFont = fonts["notosanscjk15"] @@ -111,6 +286,7 @@ class PowerOptionsPage(Page): _DrawOnce = False _Scroller = None + _InfoPage = None def __init__(self): Page.__init__(self) @@ -198,6 +374,11 @@ class PowerOptionsPage(Page): self._Scroller._PosY = 2 self._Scroller.Init() self._Scroller.SetCanvasHWND(self._HWND) + + self._InfoPage = InfoPage() + self._InfoPage._Screen = self._Screen + self._InfoPage._Name = "Power mode detail" + self._InfoPage.Init() def ScrollDown(self): if len(self._MyList) == 0: @@ -232,7 +413,7 @@ class PowerOptionsPage(Page): i._Active = False cur_li._Active = True - print(cur_li._Value) + print(cur_li._Value) with open(".powerlevel","w") as f: f.write(cur_li._Value) @@ -241,6 +422,8 @@ class PowerOptionsPage(Page): self._Screen._MsgBox.SetText("Applying...") self._Screen._MsgBox.Draw() self._Screen.SwapAndShow() + + pygame.event.post( pygame.event.Event(POWEROPT, message="")) pygame.time.delay(1000) @@ -264,10 +447,12 @@ class PowerOptionsPage(Page): i._Active = True def OnReturnBackCb(self): + pass + """ self.ReturnToUpLevelPage() self._Screen.Draw() self._Screen.SwapAndShow() - + """ def KeyDown(self,event): if event.key == CurKeys["A"] or event.key == CurKeys["Menu"]: self.ReturnToUpLevelPage() @@ -285,8 +470,21 @@ class PowerOptionsPage(Page): self.ScrollDown() self._Screen.Draw() self._Screen.SwapAndShow() - - + + if event.key == CurKeys["Y"]: + cur_li = self._MyList[self._PsIndex] + time1 = config.PowerLevels[cur_li._Value][0] + time2 = config.PowerLevels[cur_li._Value][1] + time3 = config.PowerLevels[cur_li._Value][2] + + self._InfoPage._Time1 = time1 + self._InfoPage._Time2 = time2 + self._InfoPage._Time3 = time3 + + self._Screen.PushPage(self._InfoPage) + self._Screen.Draw() + self._Screen.SwapAndShow() + def Draw(self): self.ClearCanvas() diff --git a/sys.py/UI/constants.py b/sys.py/UI/constants.py index 8d6d83c..3b43273 100644 --- a/sys.py/UI/constants.py +++ b/sys.py/UI/constants.py @@ -34,12 +34,10 @@ DT = pygame.time.Clock().tick(30) # fps in ms,eg:50 GMEVT = pygame.USEREVENT+1 update_titlebar_event = pygame.event.Event(GMEVT, message="titlebar") -RUNEVT = pygame.USEREVENT+2 -RUNSYS = pygame.USEREVENT+3 - - +RUNEVT = pygame.USEREVENT+2 +RUNSYS = pygame.USEREVENT+3 LOWLIGHT = pygame.USEREVENT+4 ## when dim screen backlight -FOOTMSG = pygame.USEREVENT+5 ## +FOOTMSG = pygame.USEREVENT+5 ## POWEROPT = pygame.USEREVENT+6 diff --git a/sys.py/config.py b/sys.py/config.py index 747fb9d..09d025e 100644 --- a/sys.py/config.py +++ b/sys.py/config.py @@ -16,8 +16,10 @@ VERSION="stable 1.0" SKIN="default" +## three timer values in seconds: dim screen, close screen,PowerOff +## zero means no action PowerLevels = {} -PowerLevels["supersaving"] = [10,10,10] +PowerLevels["supersaving"] = [10,30,100] PowerLevels["powersaving"] = [40,120,300] PowerLevels["balance_saving"] = [40,0,0] diff --git a/sys.py/run.py b/sys.py/run.py index 7b9bfce..30e7d0e 100644 --- a/sys.py/run.py +++ b/sys.py/run.py @@ -30,7 +30,7 @@ else: #local UI import -from UI.constants import Width,Height,bg_color,icon_width,icon_height,DT,GMEVT,RUNEVT,RUNSYS,ICON_TYPES +from UI.constants import Width,Height,bg_color,icon_width,icon_height,DT,GMEVT,RUNEVT,RUNSYS,ICON_TYPES,POWEROPT from UI.util_funcs import ReplaceSuffix,FileExists, ReadTheFileContent,midRect,color_surface,SwapAndShow,GetExePath,X_center_mouse from UI.page import PageStack,PageSelector,Page from UI.label import Label @@ -111,7 +111,7 @@ def InspectionTeam(main_screen): time_2 = config.PowerLevels[config.PowerLevel][1] time_3 = config.PowerLevels[config.PowerLevel][2] - if cur_time - everytime_keydown > time_1 and passout_time_stage = 0: + if cur_time - everytime_keydown > time_1 and passout_time_stage == 0: print("timeout, dim screen %d" % int(cur_time - everytime_keydown)) try: @@ -138,7 +138,7 @@ def InspectionTeam(main_screen): passout_time_stage = 1 # next everytime_keydown = cur_time - elif cur_time - everytime_keydown > time_2 and passout_time_stage = 1: + elif cur_time - everytime_keydown > time_2 and passout_time_stage == 1: print("timeout, close screen %d" % int(cur_time - everytime_keydown)) try: @@ -158,8 +158,12 @@ def InspectionTeam(main_screen): passout_time_stage = 2 # next everytime_keydown = cur_time - elif cur_time - everytime_keydown > time_3 and passout_time_stage = 1: + 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)) passout_time_stage = 0 everytime_keydown = cur_time