3
.gitignore
vendored
@ -22,3 +22,6 @@ screenshots/*
|
||||
.DS_Store
|
||||
sys.py/.*
|
||||
sys.py/*.db
|
||||
launcher.sublime-workspace
|
||||
.screenshot.png
|
||||
version.json
|
||||
|
||||
BIN
.screenshot.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
@ -1,285 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import pygame
|
||||
#import math
|
||||
import commands
|
||||
|
||||
#from beeprint import pp
|
||||
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.page import Page,PageSelector
|
||||
from UI.label import Label
|
||||
from UI.util_funcs import midRect
|
||||
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
|
||||
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.lang_manager import MyLangManager
|
||||
from UI.skin_manager import MySkinManager
|
||||
from UI.multilabel import MultiLabel
|
||||
|
||||
class AirplanePage(Page):
|
||||
_FootMsg = ["Nav","","Rescue","Back","Toggle"]
|
||||
_MyList = []
|
||||
_ListFontObj = MyLangManager.TrFont("varela13")
|
||||
|
||||
_AList = {}
|
||||
|
||||
_Scrolled = 0
|
||||
|
||||
_BGwidth = 320
|
||||
_BGheight = 240-24-20
|
||||
|
||||
_DrawOnce = False
|
||||
_Scroller = None
|
||||
|
||||
_EasingDur = 30
|
||||
|
||||
_airwire_y = 0
|
||||
_dialog_index = 0
|
||||
|
||||
def __init__(self):
|
||||
Page.__init__(self)
|
||||
self._Icons = {}
|
||||
|
||||
def GenList(self):
|
||||
|
||||
self._MyList = []
|
||||
|
||||
|
||||
|
||||
def Init(self):
|
||||
if self._Screen != None:
|
||||
if self._Screen._CanvasHWND != None and self._CanvasHWND == None:
|
||||
self._HWND = self._Screen._CanvasHWND
|
||||
self._CanvasHWND = pygame.Surface( (self._Screen._Width,self._BGheight) )
|
||||
|
||||
self._PosX = self._Index*self._Screen._Width
|
||||
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 = 180
|
||||
DialogBoxs._IconHeight = 80
|
||||
DialogBoxs.Adjust(0,0,180,320,0)
|
||||
self._Icons["DialogBoxs"] = DialogBoxs
|
||||
|
||||
|
||||
"""
|
||||
bgpng = MultiIconItem()
|
||||
bgpng._ImgSurf = MyIconPool._Icons["about_bg"]
|
||||
bgpng._MyType = ICON_TYPES["STAT"]
|
||||
bgpng._Parent = self
|
||||
bgpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
|
||||
self._Icons["bg"] = bgpng
|
||||
"""
|
||||
|
||||
|
||||
self.GenList()
|
||||
|
||||
self._Scroller = ListScroller()
|
||||
self._Scroller._Parent = self
|
||||
self._Scroller._PosX = self._Width - 10
|
||||
self._Scroller._PosY = 2
|
||||
self._Scroller.Init()
|
||||
self._Scroller.SetCanvasHWND(self._HWND)
|
||||
|
||||
self.OnLoadCb()
|
||||
|
||||
def ScrollDown(self):
|
||||
dis = 10
|
||||
if abs(self._Scrolled) < (self._BGheight - self._Height)/2 + 0:
|
||||
self._PosY -= dis
|
||||
self._Scrolled -= dis
|
||||
|
||||
def ScrollUp(self):
|
||||
dis = 10
|
||||
if self._PosY < 0:
|
||||
self._PosY += dis
|
||||
self._Scrolled += dis
|
||||
|
||||
def ToggleModeAni(self): ## with animation
|
||||
out = commands.getstatusoutput('sudo rfkill list | grep yes | cut -d " " -f3')
|
||||
if "yes" in out[1]:
|
||||
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("sudo rfkill unblock all")
|
||||
self._Screen._TitleBar._InAirPlaneMode = False
|
||||
|
||||
else:
|
||||
data = self.EasingData(0,43)
|
||||
data.reverse()
|
||||
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("sudo rfkill block all")
|
||||
self._Screen._TitleBar._InAirPlaneMode = True
|
||||
|
||||
|
||||
def ToggleMode(self):
|
||||
out = commands.getstatusoutput('sudo rfkill list | grep yes | cut -d " " -f3')
|
||||
print out
|
||||
if "yes" in out[1]:
|
||||
self._Screen._MsgBox.SetText("TurningOn")
|
||||
self._Screen._MsgBox.Draw()
|
||||
commands.getstatusoutput("sudo rfkill unblock all")
|
||||
self._Screen._TitleBar._InAirPlaneMode = False
|
||||
|
||||
else:
|
||||
self._Screen._MsgBox.SetText("TurningOff")
|
||||
self._Screen._MsgBox.Draw()
|
||||
commands.getstatusoutput("sudo rfkill block all")
|
||||
self._Screen._TitleBar._InAirPlaneMode = True
|
||||
|
||||
def UnBlockAll(self):
|
||||
self._Screen._MsgBox.SetText("TurningOn")
|
||||
self._Screen._MsgBox.Draw()
|
||||
commands.getstatusoutput("sudo rfkill unblock all")
|
||||
self._Screen._TitleBar._InAirPlaneMode = False
|
||||
|
||||
|
||||
def OnLoadCb(self):
|
||||
self._Scrolled = 0
|
||||
self._PosY = 0
|
||||
self._DrawOnce = False
|
||||
out = commands.getstatusoutput('sudo rfkill list | grep yes | cut -d " " -f3')
|
||||
if "yes" in out[1]:
|
||||
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
|
||||
|
||||
|
||||
def OnReturnBackCb(self):
|
||||
self.ReturnToUpLevelPage()
|
||||
self._Screen.Draw()
|
||||
self._Screen.SwapAndShow()
|
||||
|
||||
def KeyDown(self,event):
|
||||
if IsKeyMenuOrB(event.key):
|
||||
self.ReturnToUpLevelPage()
|
||||
self._Screen.Draw()
|
||||
self._Screen.SwapAndShow()
|
||||
|
||||
if IsKeyStartOrA(event.key):
|
||||
self.ToggleModeAni()
|
||||
"""
|
||||
self.ToggleMode()
|
||||
self._Screen.SwapAndShow()
|
||||
|
||||
pygame.time.delay(1000)
|
||||
|
||||
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()
|
||||
"""
|
||||
|
||||
if event.key == CurKeys["X"]:
|
||||
self.UnBlockAll()
|
||||
self._Screen.SwapAndShow()
|
||||
pygame.time.delay(1000)
|
||||
self._Screen.Draw()
|
||||
self._Screen.SwapAndShow()
|
||||
|
||||
|
||||
def Draw(self):
|
||||
self.ClearCanvas()
|
||||
|
||||
self._Icons["DialogBoxs"].NewCoord(70,58)
|
||||
#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()
|
||||
|
||||
self.DrawCross(10,10)
|
||||
self.DrawCross(self._Screen._Width-20,10)
|
||||
self.DrawCross(10,self._Screen._Height-20)
|
||||
self.DrawCross(self._Screen._Width-20,self._Screen._Height-20)
|
||||
|
||||
if self._HWND != None:
|
||||
self._HWND.fill(MySkinManager.GiveColor("White"))
|
||||
|
||||
self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width, self._Height ) )
|
||||
|
||||
# self._Scroller.UpdateSize(self._BGheight,abs(self._Scrolled)*3)
|
||||
# self._Scroller.Draw()
|
||||
|
||||
|
||||
|
||||
|
||||
class APIOBJ(object):
|
||||
|
||||
_Page = None
|
||||
def __init__(self):
|
||||
pass
|
||||
def Init(self,main_screen):
|
||||
self._Page = AirplanePage()
|
||||
self._Page._Screen = main_screen
|
||||
self._Page._Name ="Airplane Mode"
|
||||
self._Page.Init()
|
||||
|
||||
def API(self,main_screen):
|
||||
if main_screen !=None:
|
||||
main_screen.PushPage(self._Page)
|
||||
main_screen.Draw()
|
||||
main_screen.SwapAndShow()
|
||||
|
||||
OBJ = APIOBJ()
|
||||
def Init(main_screen):
|
||||
OBJ.Init(main_screen)
|
||||
def API(main_screen):
|
||||
OBJ.API(main_screen)
|
||||
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
## local UI import
|
||||
import pages
|
||||
import myvars
|
||||
|
||||
def Init(main_screen):
|
||||
pages.InitBrightnessPage(main_screen)
|
||||
|
||||
def API(main_screen):
|
||||
|
||||
if main_screen !=None:
|
||||
main_screen.PushCurPage()
|
||||
main_screen.SetCurPage(myvars.BrightnessPage)
|
||||
main_screen.Draw()
|
||||
main_screen.SwapAndShow()
|
||||
|
||||
@ -1,186 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import pygame
|
||||
|
||||
|
||||
#import math
|
||||
|
||||
## local UI import
|
||||
from UI.constants import Width,Height,ICON_TYPES
|
||||
from UI.page import Page,PageSelector
|
||||
from UI.label import Label
|
||||
from UI.icon_item import IconItem
|
||||
from UI.util_funcs import midRect
|
||||
from UI.keys_def import CurKeys, IsKeyMenuOrB
|
||||
from UI.slider import Slider
|
||||
from UI.icon_pool import MyIconPool
|
||||
from UI.multi_icon_item import MultiIconItem
|
||||
from config import BackLight
|
||||
import myvars
|
||||
|
||||
class BSlider(Slider):
|
||||
|
||||
|
||||
OnChangeCB = None
|
||||
_BGpng = None
|
||||
_BGwidth = 179
|
||||
_BGheight = 153
|
||||
|
||||
_NeedleSurf = None
|
||||
_Scale = None
|
||||
_Parent = None
|
||||
_Icons = {}
|
||||
|
||||
def __init__(self):
|
||||
Slider.__init__(self)
|
||||
self._Icons = {}
|
||||
def Init(self):
|
||||
self._Width = self._Parent._Width
|
||||
self._Height = self._Parent._Height
|
||||
|
||||
bgpng = IconItem()
|
||||
bgpng._ImgSurf = MyIconPool.GiveIconSurface("light")
|
||||
bgpng._MyType = ICON_TYPES["STAT"]
|
||||
bgpng._Parent = self
|
||||
bgpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
|
||||
self._Icons["bg"] = bgpng
|
||||
##self._NeedleSurf = pygame.Surface( (38,12),pygame.SRCALPHA )
|
||||
|
||||
scale = MultiIconItem()
|
||||
scale._MyType = ICON_TYPES["STAT"]
|
||||
scale._Parent = self
|
||||
scale._ImgSurf = MyIconPool.GiveIconSurface("scale")
|
||||
scale._IconWidth = 82
|
||||
scale._IconHeight = 63
|
||||
scale.Adjust(0,0,82,63,0)
|
||||
self._Icons["scale"] = scale
|
||||
|
||||
def SetValue(self,brt):
|
||||
self._Value = brt
|
||||
|
||||
def Further(self):
|
||||
self._Value+=1
|
||||
if self._Value > 9:
|
||||
self._Value = 9
|
||||
|
||||
if self.OnChangeCB != None:
|
||||
if callable(self.OnChangeCB):
|
||||
self.OnChangeCB(self._Value)
|
||||
|
||||
def StepBack(self):
|
||||
self._Value-=1
|
||||
|
||||
if self._Value < 1:
|
||||
self._Value = 1
|
||||
|
||||
if self.OnChangeCB != None:
|
||||
if callable(self.OnChangeCB):
|
||||
self.OnChangeCB(self._Value)
|
||||
|
||||
def Draw(self):
|
||||
|
||||
self._Icons["bg"].NewCoord(self._Width/2,self._Height/2 +11 )
|
||||
self._Icons["bg"].Draw()
|
||||
|
||||
self._Icons["scale"].NewCoord(self._Width/2,self._Height/2 )
|
||||
|
||||
icon_idx = self._Value - 1
|
||||
if icon_idx < 0:
|
||||
icon_idx = 0
|
||||
|
||||
self._Icons["scale"]._IconIndex = icon_idx
|
||||
self._Icons["scale"].Draw()
|
||||
"""
|
||||
pygame.draw.line(self._CanvasHWND,(255,0,0), (posx,self._PosY),(self._Width,self._PosY),3) ## range line
|
||||
pygame.draw.line(self._CanvasHWND,(0,0,255), (self._PosX,self._PosY),(posx,self._PosY),3) ## range line
|
||||
|
||||
pygame.draw.circle(self._CanvasHWND,(255,255,255),( posx, self._PosY),7,0)
|
||||
pygame.draw.circle(self._CanvasHWND,(0,0,0) ,( posx, self._PosY),7,1)## outer border
|
||||
"""
|
||||
|
||||
|
||||
|
||||
class BrightnessPage(Page):
|
||||
|
||||
_MySlider = None
|
||||
_FootMsg = ["Nav","","","Back","Enter"]
|
||||
|
||||
|
||||
def Init(self):
|
||||
self._CanvasHWND = self._Screen._CanvasHWND
|
||||
self._Width = self._Screen._Width
|
||||
self._Height = self._Screen._Height
|
||||
|
||||
self._MySlider = BSlider()
|
||||
# self._MySlider._Width = Width - 20
|
||||
# self._MySlider._Height = 30
|
||||
# self._MySlider._PosX = (self._Width - self._MySlider._Width)/2
|
||||
# self._MySlider._PosY = 40
|
||||
self._MySlider._Parent = self
|
||||
self._MySlider.SetCanvasHWND(self._CanvasHWND)
|
||||
self._MySlider.OnChangeCB = self.WhenSliderDrag
|
||||
self._MySlider.Init()
|
||||
|
||||
brt = self.ReadBackLight()
|
||||
|
||||
self._MySlider.SetValue( brt)
|
||||
|
||||
|
||||
def ReadBackLight(self):
|
||||
try:
|
||||
f = open(BackLight)
|
||||
except IOError:
|
||||
return 0
|
||||
else:
|
||||
with f:
|
||||
content = f.readlines()
|
||||
content = [x.strip() for x in content]
|
||||
return int(content[0])
|
||||
|
||||
return 0
|
||||
|
||||
def OnLoadCb(self):
|
||||
brt = self.ReadBackLight()
|
||||
|
||||
self._MySlider.SetValue( brt)
|
||||
|
||||
def SetBackLight(self,newbrt):
|
||||
try:
|
||||
f = open(BackLight,'w')
|
||||
except IOError:
|
||||
print("Open write %s failed %d" % (BackLight,newbrt))
|
||||
return False
|
||||
else:
|
||||
with f:
|
||||
f.write(str(newbrt))
|
||||
return True
|
||||
|
||||
def WhenSliderDrag(self,value): ##value
|
||||
self.SetBackLight(value)
|
||||
|
||||
def KeyDown(self,event):
|
||||
|
||||
if IsKeyMenuOrB(event.key):
|
||||
self.ReturnToUpLevelPage()
|
||||
self._Screen.Draw()
|
||||
self._Screen.SwapAndShow()
|
||||
|
||||
if event.key == CurKeys["Right"]:
|
||||
self._MySlider.Further()
|
||||
self._Screen.Draw()
|
||||
self._Screen.SwapAndShow()
|
||||
|
||||
if event.key == CurKeys["Left"]:
|
||||
self._MySlider.StepBack()
|
||||
self._Screen.Draw()
|
||||
self._Screen.SwapAndShow()
|
||||
|
||||
def Draw(self):
|
||||
self.ClearCanvas()
|
||||
|
||||
self._MySlider.Draw()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,6 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
SoundPage = None
|
||||
@ -1,13 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from brightness_page import BrightnessPage
|
||||
|
||||
import myvars
|
||||
|
||||
def InitBrightnessPage(main_screen):
|
||||
|
||||
myvars.BrightnessPage = BrightnessPage()
|
||||
|
||||
myvars.BrightnessPage._Screen = main_screen
|
||||
myvars.BrightnessPage._Name = "Brightness"
|
||||
myvars.BrightnessPage.Init()
|
||||
@ -1,55 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import os
|
||||
import pygame
|
||||
#import math
|
||||
#mport subprocess
|
||||
#from beeprint import pp
|
||||
from libs.roundrects import aa_round_rect
|
||||
|
||||
## local UI import
|
||||
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
|
||||
from UI.util_funcs import ArmSystem
|
||||
from UI.lang_manager import MyLangManager
|
||||
from UI.confirm_page import ConfirmPage
|
||||
|
||||
class SwitchToLauncherGoConfirmPage(ConfirmPage):
|
||||
|
||||
def KeyDown(self,event):
|
||||
|
||||
if IsKeyMenuOrB(event.key):
|
||||
self.ReturnToUpLevelPage()
|
||||
self._Screen.Draw()
|
||||
self._Screen.SwapAndShow()
|
||||
|
||||
if IsKeyStartOrA(event.key):
|
||||
self._Screen._MsgBox.SetText("Rebooting to LauncherGo")
|
||||
self._Screen._MsgBox.Draw()
|
||||
self._Screen.SwapAndShow()
|
||||
pygame.time.delay(300)
|
||||
ArmSystem("sed -i s/launcher/launchergo/g ~/.bashrc" )
|
||||
ArmSystem("sudo reboot")
|
||||
|
||||
|
||||
class APIOBJ(object):
|
||||
|
||||
_Page = None
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
def Init(self,main_screen):
|
||||
self._Page = SwitchToLauncherGoConfirmPage()
|
||||
self._Page._Screen = main_screen
|
||||
self._Page._Name ="Switch To LauncherGo"
|
||||
self._Page.Init()
|
||||
|
||||
def API(self,main_screen):
|
||||
if main_screen !=None:
|
||||
main_screen.PushPage(self._Page)
|
||||
main_screen.Draw()
|
||||
main_screen.SwapAndShow()
|
||||
|
||||
OBJ = APIOBJ()
|
||||
def Init(main_screen):
|
||||
OBJ.Init(main_screen)
|
||||
def API(main_screen):
|
||||
OBJ.API(main_screen)
|
||||
@ -1,17 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
## local UI import
|
||||
import pages
|
||||
import myvars
|
||||
|
||||
def Init(main_screen):
|
||||
pages.InitSoundPage(main_screen)
|
||||
|
||||
def API(main_screen):
|
||||
|
||||
if main_screen !=None:
|
||||
main_screen.PushCurPage()
|
||||
main_screen.SetCurPage(myvars.SoundPage)
|
||||
main_screen.Draw()
|
||||
main_screen.SwapAndShow()
|
||||
|
||||
@ -1,6 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
SoundPage = None
|
||||
@ -1,13 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from sound_page import SoundPage
|
||||
|
||||
import myvars
|
||||
|
||||
def InitSoundPage(main_screen):
|
||||
|
||||
myvars.SoundPage = SoundPage()
|
||||
|
||||
myvars.SoundPage._Screen = main_screen
|
||||
myvars.SoundPage._Name = "Sound Volume"
|
||||
myvars.SoundPage.Init()
|
||||
@ -1,170 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import pygame
|
||||
|
||||
#from libs.roundrects import aa_round_rect
|
||||
|
||||
import alsaaudio
|
||||
|
||||
## local UI import
|
||||
from UI.constants import Width,Height,ICON_TYPES
|
||||
from UI.page import Page,PageSelector
|
||||
from UI.icon_item import IconItem
|
||||
from UI.label import Label
|
||||
from UI.util_funcs import midRect
|
||||
from UI.keys_def import CurKeys, IsKeyMenuOrB
|
||||
from UI.slider import Slider
|
||||
from UI.multi_icon_item import MultiIconItem
|
||||
|
||||
|
||||
from UI.icon_pool import MyIconPool
|
||||
|
||||
import myvars
|
||||
|
||||
class SoundSlider(Slider):
|
||||
OnChangeCB = None
|
||||
|
||||
_BGpng = None
|
||||
_BGwidth = 192
|
||||
_BGheight = 173
|
||||
|
||||
_NeedleSurf = None
|
||||
_Scale = None
|
||||
_Parent = None
|
||||
|
||||
snd_segs = [ [0,20],[21,40],[41,50],[51,60],[61,70],[71,85],[86,90],[91,95],[96,100] ]
|
||||
|
||||
|
||||
def __init__(self):
|
||||
Slider.__init__(self)
|
||||
|
||||
def Init(self):
|
||||
self._Width = self._Parent._Width
|
||||
self._Height = self._Parent._Height
|
||||
|
||||
self._BGpng = IconItem()
|
||||
self._BGpng._ImgSurf = MyIconPool.GiveIconSurface("vol")
|
||||
self._BGpng._MyType = ICON_TYPES["STAT"]
|
||||
self._BGpng._Parent = self
|
||||
self._BGpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
|
||||
|
||||
##self._NeedleSurf = pygame.Surface( (38,12),pygame.SRCALPHA )
|
||||
|
||||
self._Scale = MultiIconItem()
|
||||
self._Scale._MyType = ICON_TYPES["STAT"]
|
||||
self._Scale._Parent = self
|
||||
self._Scale._ImgSurf = MyIconPool.GiveIconSurface("scale")
|
||||
self._Scale._IconWidth = 82
|
||||
self._Scale._IconHeight = 63
|
||||
self._Scale.Adjust(0,0,82,63,0)
|
||||
|
||||
def SetValue(self,vol):#pct 0-100
|
||||
for i,v in enumerate(self.snd_segs):
|
||||
if vol >= v[0] and vol <= v[1]:
|
||||
self._Value = i # self._Value : 0 - 8
|
||||
break
|
||||
|
||||
def Further(self):
|
||||
self._Value+=1
|
||||
|
||||
if self._Value > len(self.snd_segs)-1:
|
||||
self._Value = len(self.snd_segs) -1
|
||||
|
||||
vol = self.snd_segs[self._Value][0] + (self.snd_segs[self._Value][1] - self.snd_segs[self._Value][0])/2
|
||||
|
||||
if self.OnChangeCB != None:
|
||||
if callable(self.OnChangeCB):
|
||||
self.OnChangeCB( vol )
|
||||
|
||||
def StepBack(self):
|
||||
self._Value-=1
|
||||
|
||||
if self._Value < 0:
|
||||
self._Value = 0
|
||||
|
||||
vol = self.snd_segs[self._Value][0] + (self.snd_segs[self._Value][1] - self.snd_segs[self._Value][0])/2
|
||||
|
||||
if self.OnChangeCB != None:
|
||||
if callable(self.OnChangeCB):
|
||||
self.OnChangeCB( vol )
|
||||
|
||||
def Draw(self):
|
||||
|
||||
self._BGpng.NewCoord(self._Width/2,self._Height/2 )
|
||||
self._BGpng.Draw()
|
||||
|
||||
self._Scale.NewCoord(self._Width/2,self._Height/2)
|
||||
|
||||
self._Scale._IconIndex = self._Value
|
||||
|
||||
self._Scale.Draw()
|
||||
|
||||
|
||||
|
||||
class SoundPage(Page):
|
||||
|
||||
_MySlider = None
|
||||
_FootMsg = ["Nav","","","Back","Enter"]
|
||||
|
||||
def Init(self):
|
||||
self._CanvasHWND = self._Screen._CanvasHWND
|
||||
self._Width = self._Screen._Width
|
||||
self._Height = self._Screen._Height
|
||||
|
||||
self._MySlider = SoundSlider()
|
||||
|
||||
self._MySlider._Parent = self
|
||||
self._MySlider.SetCanvasHWND(self._CanvasHWND)
|
||||
|
||||
self._MySlider.OnChangeCB = self.WhenSliderDrag
|
||||
|
||||
self._MySlider.Init()
|
||||
|
||||
try:
|
||||
m = alsaaudio.Mixer()
|
||||
self._MySlider.SetValue(m.getvolume()[0])
|
||||
except Exception,e:
|
||||
print(str(e))
|
||||
self._MySlider.SetValue(0)
|
||||
|
||||
|
||||
def OnLoadCb(self):
|
||||
try:
|
||||
m = alsaaudio.Mixer()
|
||||
self._MySlider.SetValue(m.getvolume()[0])
|
||||
except Exception,e:
|
||||
print(str(e))
|
||||
|
||||
def WhenSliderDrag(self,value): ##value 0-100
|
||||
if value < 0 or value > 100:
|
||||
return
|
||||
|
||||
m = alsaaudio.Mixer()
|
||||
m.setvolume(int(value))
|
||||
|
||||
def KeyDown(self,event):
|
||||
|
||||
if IsKeyMenuOrB(event.key):
|
||||
self.ReturnToUpLevelPage()
|
||||
self._Screen.Draw()
|
||||
self._Screen.SwapAndShow()
|
||||
|
||||
if event.key == CurKeys["Right"]:
|
||||
self._MySlider.Further()
|
||||
self._Screen.Draw()
|
||||
self._Screen.SwapAndShow()
|
||||
|
||||
if event.key == CurKeys["Left"]:
|
||||
self._MySlider.StepBack()
|
||||
self._Screen.Draw()
|
||||
self._Screen.SwapAndShow()
|
||||
|
||||
def Draw(self):
|
||||
self.ClearCanvas()
|
||||
|
||||
self._MySlider.Draw()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,145 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import pygame
|
||||
import os
|
||||
|
||||
|
||||
## local UI import
|
||||
from UI.page import Page
|
||||
from UI.skin_manager import MySkinManager
|
||||
from UI.constants import ICON_TYPES,Width,Height
|
||||
from UI.icon_item import IconItem
|
||||
from UI.icon_pool import MyIconPool
|
||||
from UI.label import Label
|
||||
from UI.util_funcs import midRect
|
||||
|
||||
class StoragePage(Page):
|
||||
|
||||
_Icons = {}
|
||||
_BGpng = None
|
||||
_BGwidth = 96
|
||||
_BGheight = 73
|
||||
_BGlabel = None
|
||||
_FreeLabel = None
|
||||
|
||||
_GBmsg = "%.1fGB of %.1fGB Used"
|
||||
_DskUsg = None
|
||||
|
||||
_TextColor = MySkinManager.GiveColor('Text')
|
||||
_FootMsg = ["Nav.","","","Back",""]
|
||||
|
||||
def __init__(self):
|
||||
Page.__init__(self)
|
||||
|
||||
self._Icons = {}
|
||||
|
||||
|
||||
def DiskUsage(self):
|
||||
statvfs = os.statvfs('/')
|
||||
|
||||
total_space = (statvfs.f_frsize * statvfs.f_blocks)/1024.0/1024.0/1024.0
|
||||
|
||||
avail_space = ( statvfs.f_frsize * statvfs.f_bavail) / 1024.0 / 1024.0/ 1024.0
|
||||
|
||||
return avail_space,total_space
|
||||
|
||||
def Init(self):
|
||||
|
||||
self._DskUsg = self.DiskUsage()
|
||||
|
||||
self._CanvasHWND = self._Screen._CanvasHWND
|
||||
self._Width = self._Screen._Width
|
||||
self._Height = self._Screen._Height
|
||||
|
||||
self._GBLabel = Label()
|
||||
self._GBLabel.SetCanvasHWND(self._CanvasHWND)
|
||||
self._GBLabel.Init(self._GBmsg % (self._DskUsg[1]-self._DskUsg[0], self._DskUsg[1]),MySkinManager.GiveFont("varela11") )
|
||||
self._GBLabel.SetColor(self._TextColor)
|
||||
|
||||
self._PctLabel = Label()
|
||||
self._PctLabel.SetCanvasHWND(self._CanvasHWND)
|
||||
|
||||
usage_percent = (self._DskUsg[0]/self._DskUsg[1] )*100.0
|
||||
|
||||
|
||||
self._PctLabel.Init("%d%%"% int(usage_percent),MySkinManager.GiveFont("EurostileBold30"))
|
||||
self._PctLabel.SetColor( self._TextColor )
|
||||
|
||||
self._FreeLabel = Label()
|
||||
self._FreeLabel.SetCanvasHWND(self._CanvasHWND)
|
||||
self._FreeLabel.Init("FREE",MySkinManager.GiveFont("varela12"))
|
||||
self._FreeLabel.SetColor(self._PctLabel._Color)
|
||||
|
||||
|
||||
def OnLoadCb(self):
|
||||
pass
|
||||
|
||||
def Draw(self):
|
||||
self.ClearCanvas()
|
||||
|
||||
self._PctLabel.NewCoord(32,102- 33)
|
||||
self._PctLabel.Draw()
|
||||
|
||||
self._FreeLabel.NewCoord(33 ,130-25)
|
||||
self._FreeLabel.Draw()
|
||||
|
||||
self._GBLabel.NewCoord(145,103-29)
|
||||
self._GBLabel.Draw()
|
||||
|
||||
#bgcolor = (238,238,238), fgcolor = (126,206,244)
|
||||
|
||||
usage_percent = (self._DskUsg[0]/self._DskUsg[1] )
|
||||
if usage_percent < 0.1:
|
||||
usage_percent = 0.1
|
||||
|
||||
rect_ = pygame.Rect(144,118-25, 283-144,139-117)
|
||||
|
||||
pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('Text'), rect_, 1)
|
||||
|
||||
|
||||
rect2 = pygame.Rect(144,118-25,int((283-144)*(1.0-usage_percent)),139-117)
|
||||
|
||||
rect2.left = rect_.left
|
||||
rect2.top = rect_.top
|
||||
|
||||
pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('Text'),rect2, 0)
|
||||
|
||||
sep_rect = pygame.Rect(129,99-25,2,42)
|
||||
|
||||
pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('Inactive'),sep_rect, 0)
|
||||
|
||||
##4 cross
|
||||
self.DrawCross(10,10)
|
||||
self.DrawCross(self._Screen._Width-20,10)
|
||||
self.DrawCross(10,self._Screen._Height-20)
|
||||
self.DrawCross(self._Screen._Width-20,self._Screen._Height-20)
|
||||
|
||||
|
||||
class APIOBJ(object):
|
||||
|
||||
_StoragePage = None
|
||||
def __init__(self):
|
||||
pass
|
||||
def Init(self,main_screen):
|
||||
self._StoragePage = StoragePage()
|
||||
|
||||
self._StoragePage._Screen = main_screen
|
||||
self._StoragePage._Name ="Storage"
|
||||
self._StoragePage.Init()
|
||||
|
||||
|
||||
def API(self,main_screen):
|
||||
if main_screen !=None:
|
||||
main_screen.PushPage(self._StoragePage)
|
||||
main_screen.Draw()
|
||||
main_screen.SwapAndShow()
|
||||
|
||||
|
||||
|
||||
OBJ = APIOBJ()
|
||||
def Init(main_screen):
|
||||
OBJ.Init(main_screen)
|
||||
def API(main_screen):
|
||||
OBJ.API(main_screen)
|
||||
|
||||
|
||||
@ -1,155 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import pygame
|
||||
import sys
|
||||
|
||||
from libs.roundrects import aa_round_rect
|
||||
|
||||
## local UI import
|
||||
from UI.constants import Width,Height
|
||||
from UI.page import Page,PageSelector
|
||||
from UI.label import Label
|
||||
from UI.util_funcs import midRect,FileExists
|
||||
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
|
||||
from UI.scroller import ListScroller
|
||||
from UI.skin_manager import MySkinManager
|
||||
from UI.lang_manager import MyLangManager
|
||||
from UI.info_page_selector import InfoPageSelector
|
||||
|
||||
from list_item import ListItem
|
||||
|
||||
import myvars
|
||||
|
||||
class ListPage(Page):
|
||||
|
||||
_Icons = {}
|
||||
_Selector=None
|
||||
|
||||
_FootMsg = ["Nav","","","Back","Enter"]
|
||||
_MyList = []
|
||||
_ListFontObj = MyLangManager.TrFont("varela15")
|
||||
|
||||
_Scroller = None
|
||||
|
||||
def __init__(self):
|
||||
Page.__init__(self)
|
||||
self._Icons = {}
|
||||
self._CanvasHWND = None
|
||||
self._MyList = []
|
||||
|
||||
def Init(self):
|
||||
self._PosX = self._Index * self._Screen._Width
|
||||
self._Width = self._Screen._Width
|
||||
self._Height = self._Screen._Height
|
||||
|
||||
self._CanvasHWND = self._Screen._CanvasHWND
|
||||
|
||||
ps = InfoPageSelector()
|
||||
ps._Parent = self
|
||||
ps._PosX = 2
|
||||
self._Ps = ps
|
||||
self._PsIndex = 0
|
||||
|
||||
# "" pkgname, label
|
||||
alist = [["","Airplane","Airplane Mode"],
|
||||
["","PowerOptions","Power Options"],
|
||||
["","Wifi","Wi-Fi"],
|
||||
["","Bluetooth","Bluetooth"],
|
||||
["","Sound","Sound Volume"],
|
||||
["","Brightness","BackLight Brightness"],
|
||||
["","Storage",""],
|
||||
["","Time","Timezone"],
|
||||
["","Languages","Languages"],
|
||||
["","Notification","Notification"],
|
||||
["","Update", "Update Launcher"],
|
||||
["","Cores", "Retroarch cores manager"],
|
||||
["","About", "About"],
|
||||
["","PowerOFF","Power OFF"],
|
||||
["","ButtonsLayout","Buttons Layout"],
|
||||
["","Skins","Theme Manager"],
|
||||
#["","LauncherGo","Switch to LauncherGo"],
|
||||
["","Lima","GPU Driver Switch"],
|
||||
["","GateWay","Network Gateway Switch"]]
|
||||
|
||||
start_x = 0
|
||||
start_y = 0
|
||||
|
||||
|
||||
sys.path.append(myvars.basepath)# add self as import path
|
||||
for i,v in enumerate(alist):
|
||||
li = ListItem()
|
||||
li._Parent = self
|
||||
li._PosX = start_x
|
||||
li._PosY = start_y + i*ListItem._Height
|
||||
li._Width = Width
|
||||
li._Fonts["normal"] = self._ListFontObj
|
||||
|
||||
if v[2] != "":
|
||||
li.Init(v[2])
|
||||
else:
|
||||
li.Init(v[1])
|
||||
|
||||
#if v[1] == "Wifi" or v[1] == "Sound" or v[1] == "Brightness" or v[1] == "Storage" or v[1] == "Update" or v[1] == "About" or v[1] == "PowerOFF" or v[1] == "HelloWorld":
|
||||
if FileExists(myvars.basepath+"/"+ v[1]):
|
||||
li._LinkObj = __import__(v[1])
|
||||
init_cb = getattr(li._LinkObj,"Init",None)
|
||||
if init_cb != None:
|
||||
if callable(init_cb):
|
||||
li._LinkObj.Init(self._Screen)
|
||||
|
||||
self._MyList.append(li)
|
||||
|
||||
self._Scroller = ListScroller()
|
||||
self._Scroller._Parent = self
|
||||
self._Scroller._PosX = self._Width - 10
|
||||
self._Scroller._PosY = 2
|
||||
self._Scroller.Init()
|
||||
|
||||
def Click(self):
|
||||
cur_li = self._MyList[self._PsIndex]
|
||||
if cur_li._LinkObj != None:
|
||||
api_cb = getattr(cur_li._LinkObj,"API",None)
|
||||
if api_cb != None:
|
||||
if callable(api_cb):
|
||||
cur_li._LinkObj.API(self._Screen)
|
||||
|
||||
|
||||
def KeyDown(self,event):
|
||||
if IsKeyMenuOrB(event.key):
|
||||
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()
|
||||
|
||||
|
||||
if IsKeyStartOrA(event.key):
|
||||
self.Click()
|
||||
|
||||
def Draw(self):
|
||||
self.ClearCanvas()
|
||||
|
||||
if len(self._MyList) * ListItem._Height > self._Height:
|
||||
self._Ps._Width = self._Width - 11
|
||||
|
||||
self._Ps.Draw()
|
||||
|
||||
for i in self._MyList:
|
||||
i.Draw()
|
||||
|
||||
self._Scroller.UpdateSize( len(self._MyList)*ListItem._Height, self._PsIndex*ListItem._Height)
|
||||
self._Scroller.Draw()
|
||||
else:
|
||||
self._Ps._Width = self._Width
|
||||
self._Ps.Draw()
|
||||
for i in self._MyList:
|
||||
i.Draw()
|
||||
|
||||
|
||||
@ -41,7 +41,6 @@ class InfoPageListItem(object):
|
||||
self._Fonts = {}
|
||||
|
||||
def SetSmallText(self,text):
|
||||
|
||||
l = MultiLabel()
|
||||
l.SetCanvasHWND(self._Parent._CanvasHWND)
|
||||
l.Init(text,self._Fonts["small"])
|
||||
@ -80,8 +79,9 @@ class InfoPageListItem(object):
|
||||
class AboutPage(Page):
|
||||
_FootMsg = ["Nav.","","","Back",""]
|
||||
_MyList = []
|
||||
_ListFontObj = MyLangManager.TrFont("varela13")
|
||||
|
||||
#_ListFontObj = MyLangManager.TrFont("Eurostile13")
|
||||
_ListFontObj = MySkinManager.GiveFont("Eurostile13")
|
||||
|
||||
_AList = {}
|
||||
|
||||
_Scrolled = 0
|
||||
@ -89,7 +89,7 @@ class AboutPage(Page):
|
||||
_BGwidth = 320
|
||||
_BGheight = 300
|
||||
|
||||
_DrawOnce = False
|
||||
#_DrawOnce = False
|
||||
_Scroller = None
|
||||
|
||||
def __init__(self):
|
||||
@ -106,7 +106,7 @@ class AboutPage(Page):
|
||||
st = st.strip("\t")
|
||||
out["value"] = st
|
||||
self._AList["uname"] = out
|
||||
|
||||
|
||||
return
|
||||
|
||||
def CpuMhz(self):
|
||||
@ -142,7 +142,7 @@ class AboutPage(Page):
|
||||
|
||||
if line.startswith("model name"):
|
||||
parts = line.split(":")
|
||||
# print( parts[1].strip() )
|
||||
#print( parts[1].strip() )
|
||||
processor = {}
|
||||
processor["key"]="processor"
|
||||
processor["label"] = "Processor:"
|
||||
@ -152,7 +152,7 @@ class AboutPage(Page):
|
||||
|
||||
if line.startswith("cpu MHz"):
|
||||
parts = line.split(":")
|
||||
# print(parts[1].strip() )
|
||||
#print(parts[1].strip() )
|
||||
cpumhz = {}
|
||||
cpumhz["key"] = "cpumhz"
|
||||
cpumhz["label"] = "CPU MHz:"
|
||||
@ -161,7 +161,7 @@ class AboutPage(Page):
|
||||
self._AList["cpumhz"] = cpumhz
|
||||
if line.startswith("cpu cores"):
|
||||
parts = line.split(":")
|
||||
# print(parts[1].strip() )
|
||||
#print(parts[1].strip() )
|
||||
cpucores = {}
|
||||
cpucores["key"] = "cpucores"
|
||||
cpucores["label"] = "CPU cores:"
|
||||
@ -169,7 +169,7 @@ class AboutPage(Page):
|
||||
self._AList["cpucores"] = cpucores
|
||||
if line.startswith("Features"):
|
||||
parts = line.split(":")
|
||||
# print(parts[1].strip() )
|
||||
#print(parts[1].strip() )
|
||||
f_ = {}
|
||||
f_["key"] = "features"
|
||||
f_["label"] = "Features:"
|
||||
@ -178,7 +178,7 @@ class AboutPage(Page):
|
||||
|
||||
if line.startswith("flags"):
|
||||
parts = line.split(":")
|
||||
# print(parts[1].strip() )
|
||||
#print(parts[1].strip() )
|
||||
flags = {}
|
||||
flags["key"] = "flags"
|
||||
flags["label"] = "Flags:"
|
||||
@ -200,7 +200,7 @@ class AboutPage(Page):
|
||||
if line.startswith("MemTotal"):
|
||||
parts = line.split(":")
|
||||
parts[1] = parts[1].replace("kB","")
|
||||
print( parts[1].strip() )
|
||||
#print( parts[1].strip() )
|
||||
|
||||
memory = {}
|
||||
memory["key"] = "memory"
|
||||
@ -275,8 +275,7 @@ class AboutPage(Page):
|
||||
if self._Screen._CanvasHWND != None and self._CanvasHWND == None:
|
||||
self._HWND = self._Screen._CanvasHWND
|
||||
self._CanvasHWND = pygame.Surface( (self._Screen._Width,self._BGheight+50) )
|
||||
self._CanvasHWND_Wallpaper = pygame.Surface( (self._Screen._Width,self._Screen._Height) )
|
||||
|
||||
|
||||
self._PosX = self._Index*self._Screen._Width
|
||||
self._Width = self._Screen._Width ## equal to screen width
|
||||
self._Height = self._Screen._Height
|
||||
@ -317,12 +316,11 @@ class AboutPage(Page):
|
||||
if self._PosY < 0:
|
||||
self._PosY += dis
|
||||
self._Scrolled += dis
|
||||
|
||||
|
||||
def OnLoadCb(self):
|
||||
self._Scrolled = 0
|
||||
self._PosY = 0
|
||||
self._DrawOnce = False
|
||||
#self._DrawOnce = False
|
||||
|
||||
def OnReturnBackCb(self):
|
||||
self.ReturnToUpLevelPage()
|
||||
@ -346,42 +344,44 @@ class AboutPage(Page):
|
||||
|
||||
|
||||
def Draw(self):
|
||||
# if self._DrawOnce == False:
|
||||
|
||||
# self.ClearCanvas()
|
||||
##self._Ps.Draw()
|
||||
|
||||
if self._DrawOnce == False:
|
||||
if self._Wallpaper:
|
||||
self._CanvasHWND.fill((0,0,0,))
|
||||
self._CanvasHWND.set_colorkey((0,0,0))
|
||||
else:
|
||||
self._CanvasHWND.fill(MySkinManager.GiveColor("White"))
|
||||
# for i in self._MyList:
|
||||
# i.Draw()
|
||||
|
||||
# self._DrawOnce = True
|
||||
|
||||
#self._Ps.Draw()
|
||||
# self._Icons["bg"].DrawRect((230,0,82,184),(228,0,82,184))
|
||||
|
||||
# y = self._MyList[len(self._MyList)-1]._PosY+30
|
||||
|
||||
# self._Icons["bg"].DrawRect(( (self._Width-191)/2,y,191,68),(65,232,191,68))
|
||||
|
||||
# always redraw
|
||||
if self._Wallpaper:
|
||||
self._CanvasHWND.blit(self._Wallpaper,(0, self._PosY * -1))
|
||||
else:
|
||||
self.ClearCanvas()
|
||||
|
||||
for i in self._MyList:
|
||||
i.Draw()
|
||||
|
||||
self._DrawOnce = True
|
||||
|
||||
self._Icons["bg"].DrawRect((230,0,82,184),(228,0,82,184))
|
||||
|
||||
y = self._MyList[len(self._MyList)-1]._PosY+30
|
||||
|
||||
self._Icons["bg"].DrawRect(( (self._Width-191)/2,y,191,68),(65,232,191,68))
|
||||
for i in self._MyList:
|
||||
i.Draw()
|
||||
|
||||
self._Icons["bg"].DrawRect((230,0,82,184),(228,0,82,184))
|
||||
|
||||
y = self._MyList[len(self._MyList)-1]._PosY+30
|
||||
|
||||
self._Icons["bg"].DrawRect(( (self._Width-191)/2,y,191,68),(65,232,191,68))
|
||||
|
||||
if self._HWND != None:
|
||||
self._HWND.fill(MySkinManager.GiveColor("White"))
|
||||
|
||||
if self._Wallpaper:
|
||||
self._CanvasHWND_Wallpaper.blit(self._Wallpaper,(0,0))
|
||||
self._CanvasHWND_Wallpaper.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width, self._Height ))
|
||||
self._HWND.blit(self._CanvasHWND_Wallpaper,(0,0,self._Width, self._Height ) )
|
||||
else:
|
||||
self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width, self._Height ))
|
||||
|
||||
self._HWND.blit(self._CanvasHWND, (self._PosX, self._PosY, self._Width, self._Height ))
|
||||
|
||||
self._Scroller.UpdateSize(self._BGheight,abs(self._Scrolled)*3)
|
||||
self._Scroller.Draw()
|
||||
|
||||
|
||||
|
||||
|
||||
class APIOBJ(object):
|
||||
|
||||
@ -405,5 +405,3 @@ def Init(main_screen):
|
||||
OBJ.Init(main_screen)
|
||||
def API(main_screen):
|
||||
OBJ.API(main_screen)
|
||||
|
||||
|
||||
|
||||
@ -19,7 +19,7 @@ from UI.icon_pool import MyIconPool
|
||||
from UI.icon_item import IconItem
|
||||
from UI.multi_icon_item import MultiIconItem
|
||||
from UI.lang_manager import MyLangManager
|
||||
|
||||
from UI.skin_manager import MySkinManager
|
||||
from UI.multilabel import MultiLabel
|
||||
|
||||
class AirplanePage(Page):
|
||||
@ -63,23 +63,24 @@ class AirplanePage(Page):
|
||||
self._Height = self._Screen._Height
|
||||
|
||||
|
||||
|
||||
"""
|
||||
airwire = IconItem()
|
||||
airwire._ImgSurf = MyIconPool.GiveIconSurface("airwire")
|
||||
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.GiveIconSurface("GS")
|
||||
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.GiveIconSurface("DialogBoxs")
|
||||
DialogBoxs._ImgSurf = MyIconPool._Icons["DialogBoxs"]
|
||||
DialogBoxs._MyType = ICON_TYPES["STAT"]
|
||||
DialogBoxs._Parent = self
|
||||
DialogBoxs._IconWidth = 180
|
||||
@ -90,7 +91,7 @@ class AirplanePage(Page):
|
||||
|
||||
"""
|
||||
bgpng = MultiIconItem()
|
||||
bgpng._ImgSurf = MyIconPool.GiveIconSurface("about_bg")
|
||||
bgpng._ImgSurf = MyIconPool._Icons["about_bg"]
|
||||
bgpng._MyType = ICON_TYPES["STAT"]
|
||||
bgpng._Parent = self
|
||||
bgpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
|
||||
@ -231,19 +232,24 @@ 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"].NewCoord(70,58)
|
||||
#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["airwire"].Draw()
|
||||
|
||||
self._Icons["GS"].NewCoord(98,118)
|
||||
self._Icons["GS"].Draw()
|
||||
#self._Icons["GS"].NewCoord(98,118)
|
||||
#self._Icons["GS"].Draw()
|
||||
|
||||
self.DrawCross(10,10)
|
||||
self.DrawCross(self._Screen._Width-20,10)
|
||||
self.DrawCross(10,self._Screen._Height-20)
|
||||
self.DrawCross(self._Screen._Width-20,self._Screen._Height-20)
|
||||
|
||||
if self._HWND != None:
|
||||
self._HWND.fill((255,255,255))
|
||||
self._HWND.fill(MySkinManager.GiveColor("White"))
|
||||
|
||||
self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width, self._Height ) )
|
||||
|
||||
@ -275,5 +281,3 @@ def Init(main_screen):
|
||||
OBJ.Init(main_screen)
|
||||
def API(main_screen):
|
||||
OBJ.API(main_screen)
|
||||
|
||||
|
||||
|
||||
@ -253,9 +253,9 @@ class BleInfoPage(Page):
|
||||
if self._AList != None:
|
||||
if "Connected" in self._AList:
|
||||
if self._AList["Connected"] == 1:
|
||||
self._FootMsg[1] = "Disconnect"
|
||||
self._FootMsg[2] = "Disconnect"
|
||||
else:
|
||||
self._FootMsg[1] = ""
|
||||
self._FootMsg[2] = ""
|
||||
|
||||
self.GenList()
|
||||
|
||||
@ -425,7 +425,7 @@ class BluetoothPage(Page):
|
||||
|
||||
msgbox = BleListMessageBox()
|
||||
msgbox._CanvasHWND = self._CanvasHWND
|
||||
msgbox.Init(" ",MyLangManager.TrFont("veramono12"))
|
||||
msgbox.Init(" ",MyLangManager.TrFont("veramono15"))
|
||||
msgbox._Parent = self
|
||||
|
||||
self._MsgBox = msgbox
|
||||
|
||||
275
Menu/GameShell/10_Settings/BranchSelect/__init__.py
Normal file
@ -0,0 +1,275 @@
|
||||
import git
|
||||
|
||||
from libs.roundrects import aa_round_rect
|
||||
|
||||
from UI.constants import Width
|
||||
from UI.page import Page, PageSelector
|
||||
from UI.scroller import ListScroller
|
||||
from UI.info_page_list_item import InfoPageListItem
|
||||
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
|
||||
from UI.skin_manager import MySkinManager
|
||||
from UI.lang_manager import MyLangManager
|
||||
|
||||
class SelectPage(Page):
|
||||
_MyList = []
|
||||
|
||||
def __init__(self):
|
||||
Page.__init__(self)
|
||||
self._Icons = {}
|
||||
|
||||
def Init(self):
|
||||
self._ListFontObj = MyLangManager.TrFont("varela15")
|
||||
self._ListSmFontObj = MySkinManager.GiveFont("varela12")
|
||||
if self._Screen != None:
|
||||
if self._Screen._CanvasHWND != None and self._CanvasHWND == None:
|
||||
self._HWND = self._Screen._CanvasHWND
|
||||
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 = GamePageSelector()
|
||||
ps._Parent = self
|
||||
|
||||
self._Ps = ps
|
||||
self._PsIndex = 0
|
||||
|
||||
self._Scroller = ListScroller()
|
||||
self._Scroller._Parent = self
|
||||
self._Scroller._PosX = 2
|
||||
self._Scroller._PosY = 2
|
||||
self._Scroller.Init()
|
||||
|
||||
def Generate(self, game, branches, current):
|
||||
start_x = 0
|
||||
start_y = 0
|
||||
i = 0
|
||||
self._Game = game
|
||||
|
||||
for branch in branches:
|
||||
li = InfoPageListItem()
|
||||
li._Parent = self
|
||||
li._PosX = start_x
|
||||
li._PosY = start_y + i*InfoPageListItem._Height
|
||||
|
||||
li._Width = Width
|
||||
li._Fonts["normal"] = self._ListFontObj
|
||||
|
||||
li._Fonts["small"] = self._ListSmFontObj
|
||||
|
||||
li._LinkObj = branch
|
||||
|
||||
li.Init(branch)
|
||||
|
||||
if branch == current:
|
||||
self._PsIndex = i
|
||||
|
||||
li._PosX = 2
|
||||
self._MyList.append(li)
|
||||
|
||||
i = i + 1
|
||||
|
||||
def Draw(self):
|
||||
self.ClearCanvas()
|
||||
if len(self._MyList) * InfoPageListItem._Height > self._Height:
|
||||
self._Ps._Width = self._Width - 10
|
||||
self._Ps._PosX = 9
|
||||
self._Ps.Draw()
|
||||
for i in self._MyList:
|
||||
i.Draw()
|
||||
|
||||
self._Scroller.UpdateSize(len(self._MyList)*InfoPageListItem._Height, self._PsIndex*InfoPageListItem._Height)
|
||||
self._Scroller.Draw()
|
||||
|
||||
else:
|
||||
self._Ps._Width = self._Width
|
||||
self._Ps.Draw()
|
||||
for i in self._MyList:
|
||||
i.Draw()
|
||||
|
||||
def KeyDown(self, event):
|
||||
if IsKeyMenuOrB(event.key):
|
||||
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()
|
||||
|
||||
if IsKeyStartOrA(event.key):
|
||||
self.Click()
|
||||
|
||||
def Click(self):
|
||||
if self._PsIndex >= len(self._MyList):
|
||||
return
|
||||
|
||||
cur_li = self._MyList[self._PsIndex]
|
||||
git.checkout_branch(self._Game, cur_li._LinkObj)
|
||||
|
||||
|
||||
class GamePageSelector(PageSelector):
|
||||
_BackgroundColor = MySkinManager.GiveColor('Front')
|
||||
|
||||
def __init__(self):
|
||||
self._PosX = 0
|
||||
self._PosY = 0
|
||||
self._Height = 0
|
||||
|
||||
def AnimateDraw(self, x2, y2):
|
||||
pass
|
||||
|
||||
def Draw(self):
|
||||
idx = self._Parent._PsIndex
|
||||
if idx < len( self._Parent._MyList):
|
||||
x = self._PosX+2
|
||||
y = self._Parent._MyList[idx]._PosY+1
|
||||
h = self._Parent._MyList[idx]._Height -3
|
||||
|
||||
self._PosX = x
|
||||
self._PosY = y
|
||||
self._Height = h
|
||||
|
||||
aa_round_rect(self._Parent._CanvasHWND,
|
||||
(x,y,self._Width-4,h),self._BackgroundColor,4,0,self._BackgroundColor)
|
||||
|
||||
class BranchSelectPage(Page):
|
||||
_MyList = []
|
||||
|
||||
def __init__(self):
|
||||
Page.__init__(self)
|
||||
self._Icons = {}
|
||||
|
||||
def Init(self):
|
||||
self._SubPage = SelectPage()
|
||||
self._SubPage._Screen = self._Screen
|
||||
self._SubPage._Name = "Select Branch"
|
||||
self._SubPage.Init()
|
||||
|
||||
self._ListFontObj = MyLangManager.TrFont("varela15")
|
||||
self._ListSmFontObj = MySkinManager.GiveFont("varela12")
|
||||
if self._Screen != None:
|
||||
if self._Screen._CanvasHWND != None and self._CanvasHWND == None:
|
||||
self._HWND = self._Screen._CanvasHWND
|
||||
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 = GamePageSelector()
|
||||
ps._Parent = self
|
||||
|
||||
self._Ps = ps
|
||||
self._PsIndex = 0
|
||||
|
||||
self._Scroller = ListScroller()
|
||||
self._Scroller._Parent = self
|
||||
self._Scroller._PosX = 2
|
||||
self._Scroller._PosY = 2
|
||||
self._Scroller.Init()
|
||||
|
||||
start_x = 0
|
||||
start_y = 0
|
||||
i = 0
|
||||
games = git.get_games()
|
||||
for game in games:
|
||||
li = InfoPageListItem()
|
||||
li._Parent = self
|
||||
li._PosX = start_x
|
||||
li._PosY = start_y + i*InfoPageListItem._Height
|
||||
|
||||
li._Width = Width
|
||||
li._Fonts["normal"] = self._ListFontObj
|
||||
|
||||
li._Fonts["small"] = self._ListSmFontObj
|
||||
|
||||
li._LinkObj = game
|
||||
|
||||
li.Init( game.split("/")[-1] )
|
||||
|
||||
sm_text = str(len(git.get_branches(game)[0]))
|
||||
li.SetSmallText(sm_text)
|
||||
|
||||
li._PosX = 2
|
||||
self._MyList.append(li)
|
||||
|
||||
i = i + 1
|
||||
|
||||
def Draw(self):
|
||||
self.ClearCanvas()
|
||||
if len(self._MyList) * InfoPageListItem._Height > self._Height:
|
||||
self._Ps._Width = self._Width - 10
|
||||
self._Ps._PosX = 9
|
||||
self._Ps.Draw()
|
||||
for i in self._MyList:
|
||||
i.Draw()
|
||||
|
||||
self._Scroller.UpdateSize(len(self._MyList)*InfoPageListItem._Height, self._PsIndex*InfoPageListItem._Height)
|
||||
self._Scroller.Draw()
|
||||
|
||||
else:
|
||||
self._Ps._Width = self._Width
|
||||
self._Ps.Draw()
|
||||
for i in self._MyList:
|
||||
i.Draw()
|
||||
|
||||
def KeyDown(self, event):
|
||||
if IsKeyMenuOrB(event.key):
|
||||
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()
|
||||
|
||||
if IsKeyStartOrA(event.key):
|
||||
self.Click()
|
||||
|
||||
def Click(self):
|
||||
if self._PsIndex >= len(self._MyList):
|
||||
return
|
||||
|
||||
cur_li = self._MyList[self._PsIndex]
|
||||
branches, current = git.get_branches(cur_li._LinkObj)
|
||||
|
||||
self._SubPage.Generate(cur_li._LinkObj, branches, current)
|
||||
self._Screen.PushPage(self._SubPage)
|
||||
self._Screen.Draw()
|
||||
self._Screen.SwapAndShow()
|
||||
|
||||
|
||||
class APIOBJ(object):
|
||||
|
||||
_Page = None
|
||||
def __init__(self):
|
||||
pass
|
||||
def Init(self,main_screen):
|
||||
self._Page = BranchSelectPage()
|
||||
self._Page._Screen = main_screen
|
||||
self._Page._Name ="Branch Select"
|
||||
self._Page.Init()
|
||||
|
||||
def API(self,main_screen):
|
||||
if main_screen !=None:
|
||||
main_screen.PushPage(self._Page)
|
||||
main_screen.Draw()
|
||||
main_screen.SwapAndShow()
|
||||
|
||||
OBJ = APIOBJ()
|
||||
def Init(main_screen):
|
||||
OBJ.Init(main_screen)
|
||||
def API(main_screen):
|
||||
OBJ.API(main_screen)
|
||||
26
Menu/GameShell/10_Settings/BranchSelect/git.py
Normal file
@ -0,0 +1,26 @@
|
||||
import subprocess
|
||||
import os
|
||||
|
||||
def get_branches(path):
|
||||
branches = subprocess.check_output(["git", "branch"], cwd=path).decode("utf-8").split("\n")[0:-1]
|
||||
current = ""
|
||||
result = []
|
||||
for branch in branches:
|
||||
if branch[0] == "*":
|
||||
current = branch
|
||||
result.append(branch[2:])
|
||||
return result, current
|
||||
|
||||
def checkout_branch(path, branch):
|
||||
return subprocess.check_call(["git", "checkout", branch], cwd=path)
|
||||
|
||||
def get_games():
|
||||
result = []
|
||||
for filename in os.listdir("/home/cpi/games"):
|
||||
filename = os.path.join("/home/cpi/games", filename)
|
||||
if os.path.isdir(filename) and is_git(filename):
|
||||
result.append(filename)
|
||||
return result
|
||||
|
||||
def is_git(path):
|
||||
return os.path.join(path, ".git")
|
||||
@ -102,7 +102,7 @@ class GPUDriverPage(Page):
|
||||
last_height = 0
|
||||
|
||||
drivers = [["fbturbo","FBTURBO driver (Software Rendering)"],
|
||||
["modesetting","LIMA driver (Experimental GPU Rendering)"]]
|
||||
["modesetting","LIMA driver (GPU Rendering)"]]
|
||||
|
||||
|
||||
for i,u in enumerate( drivers ):
|
||||
|
||||
@ -13,8 +13,6 @@ from UI.icon_pool import MyIconPool
|
||||
from UI.label import Label
|
||||
from UI.util_funcs import midRect
|
||||
|
||||
from libs.roundrects import aa_round_rect
|
||||
|
||||
class StoragePage(Page):
|
||||
|
||||
_Icons = {}
|
||||
@ -24,10 +22,10 @@ class StoragePage(Page):
|
||||
_BGlabel = None
|
||||
_FreeLabel = None
|
||||
|
||||
_BGmsg = "%.1fGB of %.1fGB Used"
|
||||
_GBmsg = "%.1fGB of %.1fGB Used"
|
||||
_DskUsg = None
|
||||
|
||||
_HighColor = MySkinManager.GiveColor('High')
|
||||
_TextColor = MySkinManager.GiveColor('Text')
|
||||
_FootMsg = ["Nav.","","","Back",""]
|
||||
|
||||
def __init__(self):
|
||||
@ -53,27 +51,24 @@ class StoragePage(Page):
|
||||
self._Width = self._Screen._Width
|
||||
self._Height = self._Screen._Height
|
||||
|
||||
self._BGpng = IconItem()
|
||||
self._BGpng._ImgSurf = MyIconPool.GiveIconSurface("icon_sd")
|
||||
self._BGpng._MyType = ICON_TYPES["STAT"]
|
||||
self._BGpng._Parent = self
|
||||
self._GBLabel = Label()
|
||||
self._GBLabel.SetCanvasHWND(self._CanvasHWND)
|
||||
self._GBLabel.Init(self._GBmsg % (self._DskUsg[1]-self._DskUsg[0], self._DskUsg[1]),MySkinManager.GiveFont("varela11") )
|
||||
self._GBLabel.SetColor(self._TextColor)
|
||||
|
||||
self._BGpng.AddLabel(self._BGmsg % (self._DskUsg[1]-self._DskUsg[0], self._DskUsg[1]), MySkinManager.GiveFont("varela15"))
|
||||
self._BGpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
|
||||
|
||||
|
||||
self._BGlabel = Label()
|
||||
self._BGlabel.SetCanvasHWND(self._CanvasHWND)
|
||||
self._PctLabel = Label()
|
||||
self._PctLabel.SetCanvasHWND(self._CanvasHWND)
|
||||
|
||||
usage_percent = (self._DskUsg[0]/self._DskUsg[1] )*100.0
|
||||
|
||||
self._BGlabel.Init("%d%%"% int(usage_percent),MySkinManager.GiveFont("varela21"))
|
||||
self._BGlabel.SetColor( self._HighColor )
|
||||
|
||||
self._PctLabel.Init("%d%%"% int(usage_percent),MySkinManager.GiveFont("EurostileBold30"))
|
||||
self._PctLabel.SetColor( self._TextColor )
|
||||
|
||||
self._FreeLabel = Label()
|
||||
self._FreeLabel.SetCanvasHWND(self._CanvasHWND)
|
||||
self._FreeLabel.Init("Free",MySkinManager.GiveFont("varela13"))
|
||||
self._FreeLabel.SetColor(self._BGlabel._Color)
|
||||
self._FreeLabel.Init("FREE",MySkinManager.GiveFont("varela12"))
|
||||
self._FreeLabel.SetColor(self._PctLabel._Color)
|
||||
|
||||
|
||||
def OnLoadCb(self):
|
||||
@ -82,31 +77,43 @@ class StoragePage(Page):
|
||||
def Draw(self):
|
||||
self.ClearCanvas()
|
||||
|
||||
self._BGpng.NewCoord(self._Width/2,self._Height/2-10)
|
||||
self._BGpng.Draw()
|
||||
self._BGlabel.NewCoord(self._Width/2-28,self._Height/2-30)
|
||||
self._BGlabel.Draw()
|
||||
self._PctLabel.NewCoord(32,102- 33)
|
||||
self._PctLabel.Draw()
|
||||
|
||||
self._FreeLabel.NewCoord(self._BGlabel._PosX+10 ,self._Height/2)
|
||||
self._FreeLabel.NewCoord(33 ,130-25)
|
||||
self._FreeLabel.Draw()
|
||||
|
||||
self._GBLabel.NewCoord(145,103-29)
|
||||
self._GBLabel.Draw()
|
||||
|
||||
#bgcolor = (238,238,238), fgcolor = (126,206,244)
|
||||
#aa_round_rect
|
||||
|
||||
usage_percent = (self._DskUsg[0]/self._DskUsg[1] )
|
||||
if usage_percent < 0.1:
|
||||
usage_percent = 0.1
|
||||
|
||||
rect_ = midRect(self._Width/2,self._Height-30,170,17, Width,Height)
|
||||
rect_ = pygame.Rect(144,118-25, 283-144,139-117)
|
||||
|
||||
aa_round_rect(self._CanvasHWND, rect_, MySkinManager.GiveColor('Line'), 5, 0, MySkinManager.GiveColor('Line'))
|
||||
pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('Text'), rect_, 1)
|
||||
|
||||
|
||||
rect2 = midRect(self._Width/2,self._Height-30,int(170*(1.0-usage_percent)),17, Width,Height)
|
||||
rect2 = pygame.Rect(144,118-25,int((283-144)*(1.0-usage_percent)),139-117)
|
||||
|
||||
rect2.left = rect_.left
|
||||
rect2.top = rect_.top
|
||||
|
||||
aa_round_rect(self._CanvasHWND,rect2, MySkinManager.GiveColor('High'),5,0,MySkinManager.GiveColor('High'))
|
||||
pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('Text'),rect2, 0)
|
||||
|
||||
sep_rect = pygame.Rect(129,99-25,2,42)
|
||||
|
||||
pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('Text'),sep_rect, 0)
|
||||
|
||||
##4 cross
|
||||
self.DrawCross(10,10)
|
||||
self.DrawCross(self._Screen._Width-20,10)
|
||||
self.DrawCross(10,self._Screen._Height-20)
|
||||
self.DrawCross(self._Screen._Width-20,self._Screen._Height-20)
|
||||
|
||||
|
||||
class APIOBJ(object):
|
||||
|
||||
@ -134,5 +141,3 @@ def Init(main_screen):
|
||||
OBJ.Init(main_screen)
|
||||
def API(main_screen):
|
||||
OBJ.API(main_screen)
|
||||
|
||||
|
||||
|
||||
@ -253,7 +253,11 @@ class UpdatePage(Page):
|
||||
self._Screen.PushPage(self._ConfirmPage)
|
||||
|
||||
self._Screen.Draw()
|
||||
self._ConfirmPage.SnapMsg(MyLangManager.Tr("UpdateToFQ") % json_["gitversion"] )
|
||||
|
||||
if "version" in json_:
|
||||
self._ConfirmPage.SnapMsg(MyLangManager.Tr("ConfirmUpdateToFQ") % json_["version"] )
|
||||
else:
|
||||
self._ConfirmPage.SnapMsg(MyLangManager.Tr("UpdateToFQ") % json_["gitversion"] )
|
||||
self._Screen.SwapAndShow()
|
||||
else:
|
||||
self._Screen.Draw()
|
||||
@ -330,5 +334,3 @@ def Init(main_screen):
|
||||
OBJ.Init(main_screen)
|
||||
def API(main_screen):
|
||||
OBJ.API(main_screen)
|
||||
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ from wicd import misc
|
||||
from UI.constants import Width,Height
|
||||
from UI.page import Page,PageSelector
|
||||
from UI.label import Label
|
||||
from UI.util_funcs import midRect,SwapAndShow
|
||||
from UI.util_funcs import midRect,SwapAndShow,FileExists,ReadTheFileContent
|
||||
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
|
||||
from UI.scroller import ListScroller
|
||||
from UI.confirm_page import ConfirmPage
|
||||
@ -82,7 +82,11 @@ class WifiInfoPage(Page):
|
||||
self._AList["ip"]["value"] = ip
|
||||
|
||||
self._AList["bssid"]["value"] = self._Wireless.GetWirelessProperty(self._NetworkId,"bssid")
|
||||
|
||||
if FileExists("/sys/class/net/wlan0/address"):
|
||||
self._AList["mac_addr"]["value"] = ReadTheFileContent("/sys/class/net/wlan0/address").strip().upper()
|
||||
else:
|
||||
self._AList["mac_addr"]["value"] = ""
|
||||
|
||||
start_x = 0
|
||||
start_y = 0
|
||||
|
||||
@ -130,10 +134,16 @@ class WifiInfoPage(Page):
|
||||
bssid["key"] = "bssid"
|
||||
bssid["label"] = "BSSID"
|
||||
bssid["value"] = ""
|
||||
|
||||
|
||||
mac_addr = {}
|
||||
mac_addr["key"] = "mac_addr"
|
||||
mac_addr["label"] = "MAC ADDR"
|
||||
mac_addr["value"] = ""
|
||||
|
||||
self._AList["ip"] = ip
|
||||
self._AList["bssid"] = bssid
|
||||
|
||||
self._AList["mac_addr"] = mac_addr
|
||||
|
||||
self.GenList()
|
||||
|
||||
self._DisconnectConfirmPage = WifiDisconnectConfirmPage()
|
||||
@ -453,7 +463,6 @@ class WifiList(Page):
|
||||
in DbusConnectResultsSent
|
||||
'dhcp_failed'
|
||||
dbus says start scan...
|
||||
|
||||
"""
|
||||
if result != None:
|
||||
print(result)
|
||||
@ -550,10 +559,8 @@ class WifiList(Page):
|
||||
results.append({text:value})
|
||||
"""
|
||||
[{'preshared_key': 'blah blah blah',},]
|
||||
|
||||
or nothing
|
||||
[{'identity': None,},{'password': None,},]
|
||||
|
||||
"""
|
||||
return results
|
||||
|
||||
|
||||
@ -1 +1,3 @@
|
||||
retroarch
|
||||
#!/bin/bash
|
||||
|
||||
retroarch
|
||||
|
||||
@ -1 +1,4 @@
|
||||
#!/bin/bash
|
||||
#retroarch -L /home/cpi/.config/retroarch/cores/nxengine_libretro.so /home/cpi/games/nxengine/cavestory/data
|
||||
|
||||
retroarch -L /home/cpi/apps/emulators/nxengine_libretro.so /home/cpi/games/nxengine/cavestory/data
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
#SDL_VIDEODRIVER=x11 DISPLAY=:0 ./pico-8/pico8_dyn -splore -draw_rect 32,0,256,240
|
||||
cd /home/cpi/games/PICO-8/pico-8
|
||||
cd /home/cpi/games/PICO-8/pico-8 || exit
|
||||
SDL_VIDEODRIVER=x11 DISPLAY=:0 ./pico8_dyn -splore -draw_rect 32,0,256,240
|
||||
|
||||
@ -9,4 +9,3 @@ mkdir ~/.lexaloffle/pico-8/carts
|
||||
ln -s ~/.lexaloffle/pico-8/carts/ ~/games/PICO-8/carts
|
||||
|
||||
touch .done
|
||||
|
||||
|
||||
@ -3,7 +3,8 @@
|
||||
"InstallDir":"pico-8",
|
||||
"NotFoundMsg":["Please purchase the PICO-8 \n|None|varela16",
|
||||
"and copy it to the \"~/games/PICO-8\"|None|varela16"],
|
||||
"MD5":{"pico-8_0.1.11g_raspi.zip":"a3f2995cf117499f880bd964d6a0e1f2",
|
||||
"MD5":{"pico-8_0.2.0i_raspi.zip":"be0c708d707fa967c77455512bd456c7",
|
||||
"pico-8_0.1.11g_raspi.zip":"a3f2995cf117499f880bd964d6a0e1f2",
|
||||
"pico-8_0.1.11g_amd64.zip":"6726141c784afd4a41be6b7414c1b932",
|
||||
"pico-8_0.1.12_raspi.zip":"08eda95570e63089a2b9f5531503431e",
|
||||
"pico-8_0.1.12c_raspi.zip":"1a62b0d7d4e4be65f89f23ec9757cb66",
|
||||
|
||||
@ -127,7 +127,7 @@ class ListItem(object):
|
||||
|
||||
if self._PlayingProcess > 0:
|
||||
seek_posx = int(self._Width * self._PlayingProcess/100.0)
|
||||
pygame.draw.line(self._Parent._CanvasHWND,MySkinManager.GiveColor('Active'),(self._PosX,self._PosY+self._Height-2),(self._PosX+seek_posx,self._PosY+self._Height-2),2)
|
||||
pygame.draw.line(self._Parent._CanvasHWND,MySkinManager.GiveColor('Text'),(self._PosX,self._PosY+self._Height-2),(self._PosX+seek_posx,self._PosY+self._Height-2),2)
|
||||
|
||||
else:
|
||||
self._Labels["Text"].Draw()
|
||||
@ -163,22 +163,22 @@ class MPDSpectrumPage(Page):
|
||||
|
||||
self._song_title = Label()
|
||||
self._song_title.SetCanvasHWND(self._RollCanvas)
|
||||
self._song_title.Init("Untitled",self._SongFont,MySkinManager.GiveColor('White'))
|
||||
self._song_title.Init("Untitled",self._SongFont,MySkinManager.GiveColor('Text'))
|
||||
|
||||
|
||||
self._title = Label()
|
||||
self._title.SetCanvasHWND(self._CanvasHWND)
|
||||
self._title.Init("Title:",self._ListFont,MySkinManager.GiveColor('White'))
|
||||
self._title.Init("Title:",self._ListFont,MySkinManager.GiveColor('Text'))
|
||||
|
||||
self._time = Label()
|
||||
self._time.SetCanvasHWND(self._CanvasHWND)
|
||||
self._time.Init("Time:",self._ListFont,MySkinManager.GiveColor('White'))
|
||||
self._time.Init("Time:",self._ListFont,MySkinManager.GiveColor('Text'))
|
||||
|
||||
|
||||
self._time2 = Label()
|
||||
self._time2.SetCanvasHWND(self._CanvasHWND)
|
||||
self._time2.Init("00:00-00:00", self._ListFont,
|
||||
MySkinManager.GiveColor('White'))
|
||||
MySkinManager.GiveColor('Text'))
|
||||
|
||||
|
||||
self.Start()
|
||||
@ -410,11 +410,8 @@ class MPDSpectrumPage(Page):
|
||||
else:
|
||||
self._capYPositionArray[i] = value
|
||||
|
||||
pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('White'),(i*(bw+gap)+margin_left,self._Height-gap-self._capYPositionArray[i]-margin_bottom,bw,gap),0)
|
||||
pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('Text'),(i*(bw+gap)+margin_left,self._Height-gap-self._capYPositionArray[i]-margin_bottom,bw,gap),0)
|
||||
|
||||
pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('White'),(i*(bw+gap)+margin_left,self._Height-value-gap-margin_bottom,bw,value+gap),0)
|
||||
pygame.draw.rect(self._CanvasHWND,MySkinManager.GiveColor('Text'),(i*(bw+gap)+margin_left,self._Height-value-gap-margin_bottom,bw,value+gap),0)
|
||||
|
||||
self._vis_values[i] -= 2
|
||||
|
||||
|
||||
|
||||
self._vis_values[i] -= 2
|
||||
@ -325,4 +325,4 @@ class MusicLibListPage(Page):
|
||||
if i._PosY < 0:
|
||||
continue
|
||||
|
||||
i.Draw()
|
||||
i.Draw()
|
||||
@ -1,8 +1,5 @@
|
||||
|
||||
|
||||
Poller = None # MPD Poller
|
||||
PlayListPage = None
|
||||
MusicLibListPage = None
|
||||
|
||||
SpectrumPage = None
|
||||
|
||||
@ -235,7 +235,7 @@ class PlayListPage(Page):
|
||||
self._MyList[i]._PosY += self._Scrolled * self._MyList[i]._Height
|
||||
|
||||
def Click(self):
|
||||
self.RefreshPsIndex()
|
||||
#self.RefreshPsIndex()
|
||||
if len(self._MyList) == 0:
|
||||
return
|
||||
|
||||
@ -325,4 +325,3 @@ class PlayListPage(Page):
|
||||
continue
|
||||
|
||||
i.Draw()
|
||||
|
||||
@ -243,5 +243,3 @@ def Init(main_screen):
|
||||
OBJ.Init(main_screen)
|
||||
def API(main_screen):
|
||||
OBJ.API(main_screen)
|
||||
|
||||
|
||||
8
Menu/GameShell/98_Sleep.sh
Normal file
@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
kernel=$(uname -r)
|
||||
if [[ $kernel == *"5.7"* ]]; then
|
||||
systemctl suspend
|
||||
fi
|
||||
|
||||
exit 0
|
||||
@ -1,6 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import pygame
|
||||
import subprocess
|
||||
|
||||
#UI lib
|
||||
from UI.constants import RUNSYS
|
||||
@ -14,7 +15,16 @@ import config
|
||||
class PowerOffConfirmPage(ConfirmPage):
|
||||
|
||||
_ConfirmText = MyLangManager.Tr("Awaiting Input")
|
||||
#_FootMsg = ["Nav","Suspend","Reboot","Cancel","Shutdown"]
|
||||
_FootMsg = ["Nav","","Reboot","Cancel","Shutdown"]
|
||||
|
||||
# uname -r
|
||||
st = subprocess.check_output(["uname","-r"])
|
||||
st = st.strip("\n")
|
||||
st = st.strip("\t")
|
||||
|
||||
if "5.7" in st:
|
||||
_FootMsg[1] = "Sleep"
|
||||
|
||||
def CheckBattery(self):
|
||||
try:
|
||||
@ -67,6 +77,12 @@ class PowerOffConfirmPage(ConfirmPage):
|
||||
cmdpath += "sudo reboot"
|
||||
pygame.event.post( pygame.event.Event(RUNSYS, message=cmdpath))
|
||||
|
||||
if event.key == CurKeys["Y"]:
|
||||
if self._FootMsg[1] != "":
|
||||
cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper("seeyou.png")
|
||||
cmdpath += "sleep 3;"
|
||||
cmdpath += "sudo pm-suspend"
|
||||
pygame.event.post( pygame.event.Event(RUNSYS, message=cmdpath))
|
||||
|
||||
class APIOBJ(object):
|
||||
|
||||
@ -92,4 +108,3 @@ def Init(main_screen):
|
||||
OBJ.Init(main_screen)
|
||||
def API(main_screen):
|
||||
OBJ.API(main_screen)
|
||||
|
||||
|
||||
122
README.md
@ -1,6 +1,8 @@
|
||||
# GameShell launcher
|
||||
This is the launcher for GameShell based on 320x240 resolution and D-Pad layout.
|
||||

|
||||
# GameShell DEOT launcher
|
||||
This is the DEOT UI launcher for GameShell based on 320x240 resolution and D-Pad layout.
|
||||

|
||||
|
||||
Screenshot Source: https://alioss.gcores.com/site/deot/index.html
|
||||
|
||||
# Create the necessary user and group
|
||||
* User name: cpi
|
||||
@ -13,19 +15,40 @@ sudo groupadd cpifav -g 31415
|
||||
sudo adduser cpi cpifav
|
||||
```
|
||||
|
||||
# Clone the GitHub repository
|
||||
* Login as: cpi
|
||||
* Get launcher (System Apps)
|
||||
```
|
||||
cd
|
||||
git clone https://github.com/your_launcher.git ~/launcher
|
||||
```
|
||||
|
||||
* Get Menu (Custom Apps)
|
||||
```
|
||||
cd
|
||||
git clone https://github.com/your_menu.git ~/apps/Menu
|
||||
```
|
||||
|
||||
# Directory structure
|
||||
```
|
||||
/home/cpi/
|
||||
├── apps
|
||||
│ ├── Menu <-Custom Apps
|
||||
│ ├── emulators
|
||||
│ └── launcher <-Here we are
|
||||
│ ├── Menu
|
||||
│ ├── sys.py
|
||||
│ └── truetype
|
||||
│ └── ...
|
||||
│
|
||||
├── launcher <-Here we are
|
||||
│ ├── Menu <-System apps
|
||||
│ ├── sys.py
|
||||
│ ├── skin
|
||||
│ └── ...
|
||||
│
|
||||
├── games
|
||||
│ ├── FreeDM
|
||||
│ ├── MAME
|
||||
│ └── nxengine
|
||||
│ ├── nxengine
|
||||
│ └── ...
|
||||
│
|
||||
└── music
|
||||
```
|
||||
## Create the necessary directories
|
||||
@ -46,7 +69,7 @@ sudo apt-get -y install mpd ncmpcpp git libuser
|
||||
sudo apt-get -y install python-wicd wicd wicd-curses python-pycurl python-alsaaudio python-pygame python-gobject python-xlib
|
||||
|
||||
sudo apt-get -y install python-pip
|
||||
sudo pip install validators numpy requests python-mpd2 beeprint
|
||||
sudo pip install validators numpy requests python-mpd2
|
||||
```
|
||||
|
||||
### With pip install and virtualenv
|
||||
@ -56,39 +79,78 @@ mkvirtualenv launcher
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
# Create “.mpd_cpi.conf” config
|
||||
# Create “.mpd.conf” config
|
||||
|
||||
vim ~/.mpd_cpi.conf
|
||||
vim ~/.mpd.conf
|
||||
|
||||
```
|
||||
music_directory "/home/cpi/music"
|
||||
playlist_directory "/home/cpi/music/playlists"
|
||||
db_file "/home/cpi/music/tag_cache"
|
||||
log_file "/tmp/mpd.log"
|
||||
pid_file "/tmp/mpd.pid"
|
||||
state_file "/home/cpi/music/mpd_state"
|
||||
sticker_file "/home/cpi/music/sticker.sql"
|
||||
user "cpi"
|
||||
bind_to_address "/tmp/mpd.socket"
|
||||
auto_update "yes"
|
||||
auto_update_depth "3"
|
||||
music_directory "/home/cpi/music"
|
||||
playlist_directory "/home/cpi/.mpd/playlists"
|
||||
db_file "/home/cpi/.mpd/tag_cache"
|
||||
log_file "/home/cpi/.mpd/mpd.log"
|
||||
pid_file "/home/cpi/.mpd/pid"
|
||||
state_file "/home/cpi/.mpd/state"
|
||||
sticker_file "/home/cpi/.mpd/sticker.sql"
|
||||
user "cpi"
|
||||
bind_to_address "/tmp/mpd.socket"
|
||||
|
||||
auto_update "yes"
|
||||
auto_update_depth "2"
|
||||
|
||||
input {
|
||||
plugin "curl"
|
||||
plugin "curl"
|
||||
}
|
||||
|
||||
audio_output {
|
||||
type "alsa"
|
||||
name "My ALSA Device"
|
||||
type "alsa"
|
||||
name "ALSA Device"
|
||||
}
|
||||
|
||||
audio_output {
|
||||
type "fifo"
|
||||
name "my_fifo"
|
||||
path "/tmp/mpd.fifo"
|
||||
format "44100:16:2"
|
||||
type "fifo"
|
||||
name "my_fifo"
|
||||
path "/tmp/mpd.fifo"
|
||||
format "44100:16:2"
|
||||
}
|
||||
|
||||
filesystem_charset "UTF-8"
|
||||
filesystem_charset "UTF-8"
|
||||
# id3v1_encoding "UTF-8"
|
||||
|
||||
# QOBUZ input plugin
|
||||
input {
|
||||
enabled "no"
|
||||
plugin "qobuz"
|
||||
# app_id "ID"
|
||||
# app_secret "SECRET"
|
||||
# username "USERNAME"
|
||||
# password "PASSWORD"
|
||||
# format_id "N"
|
||||
}
|
||||
|
||||
# TIDAL input plugin
|
||||
input {
|
||||
enabled "no"
|
||||
plugin "tidal"
|
||||
# token "TOKEN"
|
||||
# username "USERNAME"
|
||||
# password "PASSWORD"
|
||||
# audioquality "Q"
|
||||
}
|
||||
|
||||
# Decoder #####################################################################
|
||||
#
|
||||
|
||||
decoder {
|
||||
plugin "hybrid_dsd"
|
||||
enabled "no"
|
||||
# gapless "no"
|
||||
}
|
||||
```
|
||||
|
||||
# Create “.gameshell_skin” config
|
||||
|
||||
vim ~/.gameshell_skin
|
||||
|
||||
```
|
||||
/home/cpi/launcher/skin/DEOT
|
||||
```
|
||||
|
||||
|
Before Width: | Height: | Size: 403 KiB After Width: | Height: | Size: 403 KiB |
|
Before Width: | Height: | Size: 403 KiB After Width: | Height: | Size: 403 KiB |
|
Before Width: | Height: | Size: 451 B After Width: | Height: | Size: 519 B |
|
Before Width: | Height: | Size: 409 B After Width: | Height: | Size: 521 B |
|
Before Width: | Height: | Size: 439 B After Width: | Height: | Size: 525 B |
|
Before Width: | Height: | Size: 381 B After Width: | Height: | Size: 497 B |
|
Before Width: | Height: | Size: 424 B After Width: | Height: | Size: 516 B |
|
Before Width: | Height: | Size: 411 B After Width: | Height: | Size: 517 B |
|
Before Width: | Height: | Size: 424 B After Width: | Height: | Size: 509 B |
|
Before Width: | Height: | Size: 423 B After Width: | Height: | Size: 509 B |
|
Before Width: | Height: | Size: 425 B After Width: | Height: | Size: 574 B |
|
Before Width: | Height: | Size: 444 B After Width: | Height: | Size: 578 B |
|
Before Width: | Height: | Size: 312 B After Width: | Height: | Size: 429 B |
|
Before Width: | Height: | Size: 314 B After Width: | Height: | Size: 430 B |
|
Before Width: | Height: | Size: 323 B After Width: | Height: | Size: 432 B |
|
Before Width: | Height: | Size: 323 B After Width: | Height: | Size: 432 B |
|
Before Width: | Height: | Size: 361 B After Width: | Height: | Size: 509 B |
|
Before Width: | Height: | Size: 365 B After Width: | Height: | Size: 503 B |
|
Before Width: | Height: | Size: 866 B After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 865 B After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 496 B After Width: | Height: | Size: 628 B |
|
Before Width: | Height: | Size: 496 B After Width: | Height: | Size: 613 B |
|
Before Width: | Height: | Size: 574 B After Width: | Height: | Size: 863 B |
|
Before Width: | Height: | Size: 581 B After Width: | Height: | Size: 861 B |
|
Before Width: | Height: | Size: 427 B After Width: | Height: | Size: 573 B |
|
Before Width: | Height: | Size: 442 B After Width: | Height: | Size: 576 B |
|
Before Width: | Height: | Size: 353 B After Width: | Height: | Size: 478 B |
|
Before Width: | Height: | Size: 340 B After Width: | Height: | Size: 467 B |
|
Before Width: | Height: | Size: 350 B After Width: | Height: | Size: 466 B |
|
Before Width: | Height: | Size: 363 B After Width: | Height: | Size: 479 B |
|
Before Width: | Height: | Size: 367 B After Width: | Height: | Size: 476 B |
|
Before Width: | Height: | Size: 326 B After Width: | Height: | Size: 455 B |
|
Before Width: | Height: | Size: 342 B After Width: | Height: | Size: 455 B |
|
Before Width: | Height: | Size: 357 B After Width: | Height: | Size: 479 B |
|
Before Width: | Height: | Size: 440 B After Width: | Height: | Size: 541 B |
|
Before Width: | Height: | Size: 187 B After Width: | Height: | Size: 334 B |
|
Before Width: | Height: | Size: 193 B After Width: | Height: | Size: 337 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 491 B After Width: | Height: | Size: 551 B |
|
Before Width: | Height: | Size: 350 B After Width: | Height: | Size: 435 B |
|
Before Width: | Height: | Size: 492 B After Width: | Height: | Size: 556 B |
|
Before Width: | Height: | Size: 350 B After Width: | Height: | Size: 434 B |
|
Before Width: | Height: | Size: 696 B After Width: | Height: | Size: 714 B |
|
Before Width: | Height: | Size: 719 B After Width: | Height: | Size: 715 B |
|
Before Width: | Height: | Size: 693 B After Width: | Height: | Size: 731 B |
|
Before Width: | Height: | Size: 695 B After Width: | Height: | Size: 727 B |
|
Before Width: | Height: | Size: 277 B After Width: | Height: | Size: 407 B |
|
Before Width: | Height: | Size: 272 B After Width: | Height: | Size: 395 B |
|
Before Width: | Height: | Size: 609 B After Width: | Height: | Size: 644 B |
|
Before Width: | Height: | Size: 756 B After Width: | Height: | Size: 722 B |
|
Before Width: | Height: | Size: 619 B After Width: | Height: | Size: 643 B |
|
Before Width: | Height: | Size: 769 B After Width: | Height: | Size: 737 B |
|
Before Width: | Height: | Size: 717 B After Width: | Height: | Size: 726 B |