From 208c1eeb554a7ee249cc17406fd58d54e7c70cef Mon Sep 17 00:00:00 2001 From: cuu Date: Tue, 3 Jul 2018 18:33:48 +0800 Subject: [PATCH] airplane mode with animation --- .../10_Settings/Airplane/__init__.py | 87 ++++++++++++++++-- .../sys.py/gameshell/icons/DialogBox.png | Bin 0 -> 1310 bytes .../sys.py/gameshell/icons/DialogBoxs.png | Bin 0 -> 5582 bytes skin/default/sys.py/gameshell/icons/GS.png | Bin 0 -> 599 bytes .../sys.py/gameshell/icons/airwire.png | Bin 0 -> 111 bytes sys.py/UI/multi_icon_item.py | 25 ++++- 6 files changed, 104 insertions(+), 8 deletions(-) create mode 100644 skin/default/sys.py/gameshell/icons/DialogBox.png create mode 100644 skin/default/sys.py/gameshell/icons/DialogBoxs.png create mode 100644 skin/default/sys.py/gameshell/icons/GS.png create mode 100644 skin/default/sys.py/gameshell/icons/airwire.png diff --git a/Menu/GameShell/10_Settings/Airplane/__init__.py b/Menu/GameShell/10_Settings/Airplane/__init__.py index 78bf10d..8a83987 100644 --- a/Menu/GameShell/10_Settings/Airplane/__init__.py +++ b/Menu/GameShell/10_Settings/Airplane/__init__.py @@ -18,6 +18,8 @@ from UI.keys_def import CurKeys from UI.scroller import ListScroller from UI.icon_pool import MyIconPool from UI.icon_item import IconItem +from UI.multi_icon_item import MultiIconItem + from UI.multilabel import MultiLabel class InfoPageListItem(object): @@ -88,6 +90,11 @@ class AirplanePage(Page): _DrawOnce = False _Scroller = None + + _EasingDur = 30 + + _airwire_y = 0 + _dialog_index = 0 def __init__(self): Page.__init__(self) @@ -109,8 +116,34 @@ class AirplanePage(Page): self._Width = self._Screen._Width ## equal to screen width self._Height = self._Screen._Height + + + airwire = IconItem() + airwire._ImgSurf = MyIconPool._Icons["airwire"] + airwire._MyType = ICON_TYPES["STAT"] + airwire._Parent = self + airwire.Adjust(0,0,5,43,0) + self._Icons["airwire"] = airwire + + GS = IconItem() + GS._ImgSurf = MyIconPool._Icons["GS"] + GS._MyType = ICON_TYPES["STAT"] + GS._Parent = self + GS.Adjust(0,0,72,95,0) + self._Icons["GS"] = GS + + DialogBoxs = MultiIconItem() + DialogBoxs._ImgSurf = MyIconPool._Icons["DialogBoxs"] + DialogBoxs._MyType = ICON_TYPES["STAT"] + DialogBoxs._Parent = self + DialogBoxs._IconWidth = 134 + DialogBoxs._IconHeight = 93 + DialogBoxs.Adjust(0,0,134,372,0) + self._Icons["DialogBoxs"] = DialogBoxs + + """ - bgpng = IconItem() + bgpng = MultiIconItem() bgpng._ImgSurf = MyIconPool._Icons["about_bg"] bgpng._MyType = ICON_TYPES["STAT"] bgpng._Parent = self @@ -140,6 +173,34 @@ class AirplanePage(Page): self._PosY += dis self._Scrolled += dis + def ToggleModeAni(self): ## with animation + out = commands.getstatusoutput('rfkill list | grep yes | cut -d " " -f3') + if out[1] == "yes": + data = self.EasingData(0,43) + for _,v in enumerate(data): + self._airwire_y -= v + self._dialog_index = 2 + pygame.time.delay(40) + + self._Screen.Draw() + self._Screen.SwapAndShow() + + commands.getstatusoutput("rfkill unblock all") + self._Screen._TitleBar._InAirPlaneMode = False + + else: + data = self.EasingData(0,43) + for _,v in enumerate(data): + self._airwire_y += v + self._dialog_index = 3 + pygame.time.delay(40) + self._Screen.Draw() + self._Screen.SwapAndShow() + + commands.getstatusoutput("rfkill block all") + self._Screen._TitleBar._InAirPlaneMode = True + + def ToggleMode(self): out = commands.getstatusoutput('rfkill list | grep yes | cut -d " " -f3') print out @@ -163,7 +224,11 @@ class AirplanePage(Page): out = commands.getstatusoutput('rfkill list | grep yes | cut -d " " -f3') if out[1] == "yes": self._Screen._TitleBar._InAirPlaneMode = True + self._airwire_y = 50+43 + self._dialog_index = 1 else: + self._airwire_y = 50 + self._dialog_index = 0 self._Screen._TitleBar._InAirPlaneMode = False @@ -179,6 +244,8 @@ class AirplanePage(Page): self._Screen.SwapAndShow() if event.key == CurKeys["B"]: + self.ToggleModeAni() + """ self.ToggleMode() self._Screen.SwapAndShow() @@ -186,7 +253,7 @@ class AirplanePage(Page): self._Screen.Draw() self._Screen.SwapAndShow() - + """ """ if event.key == CurKeys["Up"]: self.ScrollUp() @@ -200,12 +267,18 @@ class AirplanePage(Page): def Draw(self): self.ClearCanvas() + + self._Icons["DialogBoxs"].NewCoord(145,23) + self._Icons["airwire"].NewCoord(80,self._airwire_y) + + self._Icons["DialogBoxs"]._IconIndex = self._dialog_index + + self._Icons["DialogBoxs"].DrawTopLeft() + self._Icons["airwire"].Draw() + + self._Icons["GS"].NewCoord(98,118) + self._Icons["GS"].Draw() - if "bg" in self._Icons: - self._Icons["bg"].NewCoord(self._Width/2,self._Height/2 + (self._BGheight - Height)/2 + self._Screen._TitleBar._Height) - self._Icons["bg"].Draw() - - if self._HWND != None: self._HWND.fill((255,255,255)) diff --git a/skin/default/sys.py/gameshell/icons/DialogBox.png b/skin/default/sys.py/gameshell/icons/DialogBox.png new file mode 100644 index 0000000000000000000000000000000000000000..eac3a7d5a72f92d22c0d7965bc2bbebdfd89f93e GIT binary patch literal 1310 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 XA^%%pl2<7kQ~=O=7j-MNG131A-InkM literal 0 HcmV?d00001 diff --git a/skin/default/sys.py/gameshell/icons/GS.png b/skin/default/sys.py/gameshell/icons/GS.png new file mode 100644 index 0000000000000000000000000000000000000000..68b8affad60511a36ef5dee4018158888de11872 GIT binary patch literal 599 zcmeAS@N?(olHy`uVBq!ia0vp^9zYz=!3HF~?HW@U7?|WdT^vIy=DeMIyYR4r07Kxh zy+Mtu3s_g3J*pz#X{3_8r=wlhWOsa-56{gzvP_vvp4RPWe^j=+Hfiz69dYZuJ$LtC zWS%L@$~gTFduG(y*S}_6+%rMq@%&8_y)BhF0t6N)BzP|Wx%v9s^dl1W@yoxS;9wGA zNm>50*W^o4=JairQvJtbKAGoAI67=zpzQ9?@%C}HP)UiUwC>|0QX#h#pMKh%dQ4(9 zU+k_c3nulY+pepMoLE=Ray4jb()k&oE_}-?9UKol?fHFn?GnEp1qa85CI(hUE}#_} zV7nb09mE}PbN$QF{wZMPc0uxKi@+gO+wK>KzDl28^A1UQ2xrvw(p|!hTOa3kEr?Xv z+Oyg6XrJE7(wd62uRYK2e($-i#0xj_>sQAuj@PPw=4Q^n;_qFr7~&Ri^4-J#W?%Mg zJAdi@+Pfc3jsjhAwfpMc+!wXE^OxR_j&5GnUEZ=bpBGOz zUna2t=xc}TQYOEz9aCPWe`)c5O^6scB+h;}@J^o?S+|cJ6c+(gliWQfPt2T}!~(Q^ z&%I!3HEZoOD_Yq|7{B978lFzCFE>lR<%p^9FB|lAzAk39k28hEf-Iq2@IaD KelF{r5}E+Cup~wR literal 0 HcmV?d00001 diff --git a/sys.py/UI/multi_icon_item.py b/sys.py/UI/multi_icon_item.py index 4690aca..58b2af1 100644 --- a/sys.py/UI/multi_icon_item.py +++ b/sys.py/UI/multi_icon_item.py @@ -23,6 +23,27 @@ class MultiIconItem(IconItem): self._ImgSurf = pygame.image.load( self._ImageName ).convert_alpha() + def DrawTopLeft(self): + if self._Align==ALIGN["VCenter"]: #default + if self._Label != None: + self._Label._PosX = self._PosX - self._Label._Width/2 + self._Parent._PosX + self._Label._PosY = self._PosY + self._Height/2 +6 + self._Parent._PosY + + elif self._Align ==ALIGN["HLeft"]: + if self._Label != None: + self._Label._PosX = self._PosX + self._Width/2 + 3 + self._Parent._PosX + self._Label._PosY = self._PosY - self._Label._Height/2 + self._Parent._PosY + + if self._Label!=None: + self._Label.Draw() + + + if self._ImgSurf != None: + self._Parent._CanvasHWND.blit(self._ImgSurf,pygame.Rect(self._PosX+self._Parent._PosX, + self._PosY+self._Parent._PosY, + self._Width,self._Height), + (0,self._IconIndex*self._IconHeight,self._IconWidth,self._IconHeight)) + def Draw(self): if self._Align==ALIGN["VCenter"]: #default if self._Label != None: @@ -36,9 +57,11 @@ class MultiIconItem(IconItem): if self._Label!=None: self._Label.Draw() - + + if self._ImgSurf != None: self._Parent._CanvasHWND.blit(self._ImgSurf,midRect(self._PosX+self._Parent._PosX, self._PosY+self._Parent._PosY, self._Width,self._Height,Width,Height), (0,self._IconIndex*self._IconHeight,self._IconWidth,self._IconHeight)) +