Add files via upload
345
Menu/GameShell/10_Settings/About/__init__.py
Normal file
@ -0,0 +1,345 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
#import math
|
||||||
|
|
||||||
|
#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.fonts import fonts
|
||||||
|
from UI.util_funcs import midRect
|
||||||
|
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.multilabel import MultiLabel
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class InfoPageListItem(object):
|
||||||
|
_PosX = 0
|
||||||
|
_PosY = 0
|
||||||
|
_Width = 0
|
||||||
|
_Height = 20
|
||||||
|
|
||||||
|
_Labels = {}
|
||||||
|
_Icons = {}
|
||||||
|
_Fonts = {}
|
||||||
|
|
||||||
|
_LinkObj = None
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._Labels = {}
|
||||||
|
self._Icons = {}
|
||||||
|
self._Fonts = {}
|
||||||
|
|
||||||
|
def SetSmallText(self,text):
|
||||||
|
|
||||||
|
l = MultiLabel()
|
||||||
|
l.SetCanvasHWND(self._Parent._CanvasHWND)
|
||||||
|
l.Init(text,self._Fonts["small"])
|
||||||
|
|
||||||
|
self._Labels["Small"] = l
|
||||||
|
|
||||||
|
#if self._Labels["Small"]._Width > self._Width:
|
||||||
|
# self._Width = self._Labels["Small"]._Width
|
||||||
|
if self._Labels["Small"]._Height >= self._Height:
|
||||||
|
self._Height = self._Labels["Small"]._Height+10
|
||||||
|
|
||||||
|
def Init(self,text):
|
||||||
|
|
||||||
|
#self._Fonts["normal"] = fonts["veramono12"]
|
||||||
|
|
||||||
|
l = Label()
|
||||||
|
l._PosX = 10
|
||||||
|
l.SetCanvasHWND(self._Parent._CanvasHWND)
|
||||||
|
|
||||||
|
l.Init(text,self._Fonts["normal"])
|
||||||
|
self._Labels["Text"] = l
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
|
||||||
|
self._Labels["Text"]._PosY = self._PosY
|
||||||
|
self._Labels["Text"].Draw()
|
||||||
|
|
||||||
|
if "Small" in self._Labels:
|
||||||
|
self._Labels["Small"]._PosX = self._Labels["Text"]._Width + 16
|
||||||
|
self._Labels["Small"]._PosY = self._PosY
|
||||||
|
self._Labels["Small"].Draw()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class AboutPage(Page):
|
||||||
|
_FootMsg = ["Nav.","","","Back",""]
|
||||||
|
_MyList = []
|
||||||
|
_ListFontObj = fonts["varela13"]
|
||||||
|
|
||||||
|
_AList = {}
|
||||||
|
|
||||||
|
_Scrolled = 0
|
||||||
|
|
||||||
|
_BGwidth = 320
|
||||||
|
_BGheight = 256
|
||||||
|
|
||||||
|
_DrawOnce = False
|
||||||
|
_Scroller = None
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
Page.__init__(self)
|
||||||
|
self._Icons = {}
|
||||||
|
|
||||||
|
def CpuMhz(self):
|
||||||
|
with open("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq") as f:
|
||||||
|
content = f.readlines()
|
||||||
|
content = [x.strip() for x in content]
|
||||||
|
|
||||||
|
mhz = int(content[0]) / 1000.0
|
||||||
|
|
||||||
|
cpuscalemhz = {}
|
||||||
|
cpuscalemhz["key"] = "cpuscalemhz"
|
||||||
|
cpuscalemhz["label"] = "CPU Mhz:"
|
||||||
|
cpuscalemhz["value"] = str(mhz)
|
||||||
|
self._AList["cpuscalemhz"] = cpuscalemhz
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
def CpuInfo(self):
|
||||||
|
last_processor = 0
|
||||||
|
with open("/proc/cpuinfo") as f:
|
||||||
|
for line in f:
|
||||||
|
if line.startswith("processor"):
|
||||||
|
parts = line.split(":")
|
||||||
|
cur_processor_number = int( parts[1].strip())
|
||||||
|
if cur_processor_number > last_processor:
|
||||||
|
last_processor = cur_processor_number
|
||||||
|
|
||||||
|
if line.startswith("model name"):
|
||||||
|
parts = line.split(":")
|
||||||
|
# print( parts[1].strip() )
|
||||||
|
processor = {}
|
||||||
|
processor["key"]="processor"
|
||||||
|
processor["label"] = "Processor:"
|
||||||
|
processor["value"] = parts[1].strip()
|
||||||
|
|
||||||
|
self._AList["processor"] = processor
|
||||||
|
|
||||||
|
if line.startswith("cpu MHz"):
|
||||||
|
parts = line.split(":")
|
||||||
|
# print(parts[1].strip() )
|
||||||
|
cpumhz = {}
|
||||||
|
cpumhz["key"] = "cpumhz"
|
||||||
|
cpumhz["label"] = "CPU MHz:"
|
||||||
|
cpumhz["value"] = parts[1].strip()
|
||||||
|
|
||||||
|
self._AList["cpumhz"] = cpumhz
|
||||||
|
if line.startswith("cpu cores"):
|
||||||
|
parts = line.split(":")
|
||||||
|
# print(parts[1].strip() )
|
||||||
|
cpucores = {}
|
||||||
|
cpucores["key"] = "cpucores"
|
||||||
|
cpucores["label"] = "CPU cores:"
|
||||||
|
cpucores["value"] = parts[1].strip()
|
||||||
|
self._AList["cpucores"] = cpucores
|
||||||
|
if line.startswith("Features"):
|
||||||
|
parts = line.split(":")
|
||||||
|
# print(parts[1].strip() )
|
||||||
|
f_ = {}
|
||||||
|
f_["key"] = "features"
|
||||||
|
f_["label"] = "Features:"
|
||||||
|
f_["value"] = parts[1].strip()
|
||||||
|
self._AList["features"] = f_
|
||||||
|
|
||||||
|
if line.startswith("flags"):
|
||||||
|
parts = line.split(":")
|
||||||
|
# print(parts[1].strip() )
|
||||||
|
flags = {}
|
||||||
|
flags["key"] = "flags"
|
||||||
|
flags["label"] = "Flags:"
|
||||||
|
flags["value"] = parts[1].strip()
|
||||||
|
self._AList["flags"] = flags
|
||||||
|
|
||||||
|
|
||||||
|
if last_processor > 0:
|
||||||
|
arm_cores = {}
|
||||||
|
arm_cores["key"]= "armcores"
|
||||||
|
arm_cores["label"] = "CPU cores:"
|
||||||
|
arm_cores["value"] = str(last_processor + 1)
|
||||||
|
self._AList["armcores"] = arm_cores
|
||||||
|
|
||||||
|
def MemInfo(self):
|
||||||
|
|
||||||
|
with open("/proc/meminfo") as f:
|
||||||
|
for line in f:
|
||||||
|
if line.startswith("MemTotal"):
|
||||||
|
parts = line.split(":")
|
||||||
|
parts[1] = parts[1].replace("kB","")
|
||||||
|
print( parts[1].strip() )
|
||||||
|
|
||||||
|
memory = {}
|
||||||
|
memory["key"] = "memory"
|
||||||
|
memory["label"] = "Memory:"
|
||||||
|
memory["value"] = str( int(parts[1].strip())/1000.0) +" Mb"
|
||||||
|
self._AList["memory"] = memory
|
||||||
|
break
|
||||||
|
|
||||||
|
def GenList(self):
|
||||||
|
|
||||||
|
self._MyList = []
|
||||||
|
|
||||||
|
start_x = 0
|
||||||
|
start_y = 10
|
||||||
|
last_height = 0
|
||||||
|
|
||||||
|
for i,u in enumerate( ["processor","armcores","cpuscalemhz","features","memory"] ):
|
||||||
|
#for i,u in enumerate( ["processor","cpucores","cpumhz","flags","memory"] ):
|
||||||
|
if u not in self._AList:
|
||||||
|
continue
|
||||||
|
|
||||||
|
v = self._AList[u]
|
||||||
|
|
||||||
|
li = InfoPageListItem()
|
||||||
|
li._Parent = self
|
||||||
|
li._PosX = start_x
|
||||||
|
li._PosY = start_y + last_height
|
||||||
|
li._Width = Width
|
||||||
|
li._Fonts["normal"] = self._ListFontObj
|
||||||
|
li._Fonts["small"] = fonts["varela12"]
|
||||||
|
|
||||||
|
if self._AList[u]["label"] != "":
|
||||||
|
li.Init( self._AList[u]["label"] )
|
||||||
|
else:
|
||||||
|
li.Init( self._AList[u]["key"] )
|
||||||
|
|
||||||
|
li._Flag = self._AList[u]["key"]
|
||||||
|
|
||||||
|
li.SetSmallText( self._AList[u]["value"] )
|
||||||
|
|
||||||
|
last_height += li._Height
|
||||||
|
|
||||||
|
self._MyList.append(li)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
bgpng = IconItem()
|
||||||
|
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.CpuInfo()
|
||||||
|
self.MemInfo()
|
||||||
|
self.CpuMhz()
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
def ScrollDown(self):
|
||||||
|
dis = 10
|
||||||
|
if abs(self._Scrolled) < (self._BGheight - self._Height)/2 + 40:
|
||||||
|
self._PosY -= dis
|
||||||
|
self._Scrolled -= dis
|
||||||
|
|
||||||
|
def ScrollUp(self):
|
||||||
|
dis = 10
|
||||||
|
if self._PosY < 0:
|
||||||
|
self._PosY += dis
|
||||||
|
self._Scrolled += dis
|
||||||
|
|
||||||
|
|
||||||
|
def OnLoadCb(self):
|
||||||
|
self._Scrolled = 0
|
||||||
|
self._PosY = 0
|
||||||
|
self._DrawOnce = False
|
||||||
|
|
||||||
|
def OnReturnBackCb(self):
|
||||||
|
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):
|
||||||
|
|
||||||
|
if self._DrawOnce == False:
|
||||||
|
self.ClearCanvas()
|
||||||
|
#self._Ps.Draw()
|
||||||
|
|
||||||
|
self._Icons["bg"].NewCoord(self._Width/2,self._Height/2 + (self._BGheight - Height)/2 + self._Screen._TitleBar._Height)
|
||||||
|
self._Icons["bg"].Draw()
|
||||||
|
|
||||||
|
for i in self._MyList:
|
||||||
|
i.Draw()
|
||||||
|
|
||||||
|
self._DrawOnce = True
|
||||||
|
|
||||||
|
if self._HWND != None:
|
||||||
|
self._HWND.fill((255,255,255))
|
||||||
|
|
||||||
|
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 = AboutPage()
|
||||||
|
self._Page._Screen = main_screen
|
||||||
|
self._Page._Name ="About"
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
17
Menu/GameShell/10_Settings/Brightness/__init__.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# -*- 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()
|
||||||
|
|
||||||
188
Menu/GameShell/10_Settings/Brightness/brightness_page.py
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
# -*- 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.fonts import fonts
|
||||||
|
from UI.util_funcs import midRect
|
||||||
|
from UI.keys_def import CurKeys
|
||||||
|
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._Icons["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._Icons["scale"]
|
||||||
|
scale._IconWidth = 82
|
||||||
|
scale._IconHeight = 63
|
||||||
|
scale.Adjust(0,0,82,63,0)
|
||||||
|
self._Icons["scale"] = scale
|
||||||
|
|
||||||
|
def SetValue(self,brt):#pct 0-100
|
||||||
|
|
||||||
|
self._Value = brt
|
||||||
|
|
||||||
|
def Further(self):
|
||||||
|
self._Value+=1
|
||||||
|
if self._Value < 9:
|
||||||
|
if self.OnChangeCB != None:
|
||||||
|
if callable(self.OnChangeCB):
|
||||||
|
self.OnChangeCB(self._Value)
|
||||||
|
else:
|
||||||
|
self._Value = 8
|
||||||
|
|
||||||
|
def StepBack(self):
|
||||||
|
self._Value-=1
|
||||||
|
|
||||||
|
if self._Value < 0:
|
||||||
|
self._Value = 0
|
||||||
|
|
||||||
|
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 )
|
||||||
|
|
||||||
|
self._Icons["scale"]._IconIndex = self._Value
|
||||||
|
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" % BackLight)
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
with f:
|
||||||
|
f.write(str(newbrt))
|
||||||
|
return True
|
||||||
|
|
||||||
|
def WhenSliderDrag(self,value): ##value 0-100
|
||||||
|
if value < 0 or value > 8:
|
||||||
|
return
|
||||||
|
|
||||||
|
if value == 0: ## 0 == total black
|
||||||
|
value = 1
|
||||||
|
|
||||||
|
self.SetBackLight(value)
|
||||||
|
|
||||||
|
def KeyDown(self,event):
|
||||||
|
|
||||||
|
if event.key == CurKeys["Menu"] or event.key == CurKeys["A"]:
|
||||||
|
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()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
6
Menu/GameShell/10_Settings/Brightness/myvars.py
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
SoundPage = None
|
||||||
13
Menu/GameShell/10_Settings/Brightness/pages.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# -*- 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()
|
||||||
89
Menu/GameShell/10_Settings/PowerOFF/__init__.py
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
|
||||||
|
#UI lib
|
||||||
|
from UI.constants import RUNSYS
|
||||||
|
from UI.keys_def import CurKeys
|
||||||
|
from UI.confirm_page import ConfirmPage
|
||||||
|
|
||||||
|
import config
|
||||||
|
|
||||||
|
class PowerOffConfirmPage(ConfirmPage):
|
||||||
|
|
||||||
|
_ConfirmText = "Confirm Power OFF?"
|
||||||
|
|
||||||
|
|
||||||
|
def CheckBattery(self):
|
||||||
|
try:
|
||||||
|
f = open(config.Battery)
|
||||||
|
except IOError:
|
||||||
|
print( "PowerOFF open %s failed" % config.Battery)
|
||||||
|
return 0
|
||||||
|
else:
|
||||||
|
with f:
|
||||||
|
bat_uevent = {}
|
||||||
|
content = f.readlines()
|
||||||
|
content = [x.strip() for x in content]
|
||||||
|
for i in content:
|
||||||
|
pis = i.split("=")
|
||||||
|
if len(pis) > 1:
|
||||||
|
bat_uevent[pis[0]] = pis[1]
|
||||||
|
|
||||||
|
if "POWER_SUPPLY_CAPACITY" in bat_uevent:
|
||||||
|
cur_cap = int(bat_uevent["POWER_SUPPLY_CAPACITY"])
|
||||||
|
else:
|
||||||
|
cur_cap = 0
|
||||||
|
|
||||||
|
return cur_cap
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def KeyDown(self,event):
|
||||||
|
|
||||||
|
if event.key == CurKeys["Menu"] or event.key == CurKeys["A"]:
|
||||||
|
|
||||||
|
self.ReturnToUpLevelPage()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if event.key == CurKeys["B"]:
|
||||||
|
if self.CheckBattery() < 20:
|
||||||
|
cmdpath = "feh --bg-center gameshell/wallpaper/gameover.png;"
|
||||||
|
else:
|
||||||
|
cmdpath = "feh --bg-center gameshell/wallpaper/seeyou.png;"
|
||||||
|
|
||||||
|
cmdpath += "sleep 3;"
|
||||||
|
|
||||||
|
#cmdpath += "echo 'halt -p' > /tmp/halt_cmd"
|
||||||
|
|
||||||
|
cmdpath += "sudo halt -p"
|
||||||
|
pygame.event.post( pygame.event.Event(RUNSYS, message=cmdpath))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class APIOBJ(object):
|
||||||
|
|
||||||
|
_StoragePage = None
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
def Init(self,main_screen):
|
||||||
|
self._Page = PowerOffConfirmPage()
|
||||||
|
|
||||||
|
self._Page._Screen = main_screen
|
||||||
|
self._Page._Name ="Power OFF"
|
||||||
|
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)
|
||||||
|
|
||||||
17
Menu/GameShell/10_Settings/Sound/__init__.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# -*- 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()
|
||||||
|
|
||||||
6
Menu/GameShell/10_Settings/Sound/myvars.py
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
SoundPage = None
|
||||||
13
Menu/GameShell/10_Settings/Sound/pages.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# -*- 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()
|
||||||
154
Menu/GameShell/10_Settings/Sound/sound_page.py
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
# -*- 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.fonts import fonts
|
||||||
|
from UI.util_funcs import midRect
|
||||||
|
from UI.keys_def import CurKeys
|
||||||
|
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
|
||||||
|
_Segs = [0,15,29, 45,55,65, 75,90,100]
|
||||||
|
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._Icons["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._Icons["scale"]
|
||||||
|
self._Scale._IconWidth = 82
|
||||||
|
self._Scale._IconHeight = 63
|
||||||
|
self._Scale.Adjust(0,0,82,63,0)
|
||||||
|
|
||||||
|
def SetValue(self,pct):#pct 0-100
|
||||||
|
|
||||||
|
for i,v in enumerate(self.snd_segs):
|
||||||
|
if pct >= v[0] and pct <= v[1]:
|
||||||
|
self._Value = i
|
||||||
|
|
||||||
|
def Further(self):
|
||||||
|
self._Value+=1
|
||||||
|
if self._Value < len(self._Segs):
|
||||||
|
if self.OnChangeCB != None:
|
||||||
|
if callable(self.OnChangeCB):
|
||||||
|
self.OnChangeCB( self._Segs[ self._Value ] )
|
||||||
|
else:
|
||||||
|
self._Value = len(self._Segs)-1
|
||||||
|
|
||||||
|
def StepBack(self):
|
||||||
|
self._Value-=1
|
||||||
|
|
||||||
|
if self._Value < 0:
|
||||||
|
self._Value = 0
|
||||||
|
|
||||||
|
if self.OnChangeCB != None:
|
||||||
|
if callable(self.OnChangeCB):
|
||||||
|
self.OnChangeCB(self._Segs[self._Value] )
|
||||||
|
|
||||||
|
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()
|
||||||
|
|
||||||
|
m = alsaaudio.Mixer()
|
||||||
|
self._MySlider.SetValue(m.getvolume()[0])
|
||||||
|
|
||||||
|
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 event.key == CurKeys["Menu"] or event.key == CurKeys["A"]:
|
||||||
|
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()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
137
Menu/GameShell/10_Settings/Storage/__init__.py
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
## local UI import
|
||||||
|
from UI.page import Page
|
||||||
|
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.fonts import fonts
|
||||||
|
from UI.util_funcs import midRect
|
||||||
|
|
||||||
|
from libs.roundrects import aa_round_rect
|
||||||
|
|
||||||
|
class StoragePage(Page):
|
||||||
|
|
||||||
|
_Icons = {}
|
||||||
|
_BGpng = None
|
||||||
|
_BGwidth = 96
|
||||||
|
_BGheight = 73
|
||||||
|
_BGlabel = None
|
||||||
|
_FreeLabel = None
|
||||||
|
|
||||||
|
_BGmsg = "%.1fGB of %.1fGB Used"
|
||||||
|
_DskUsg = None
|
||||||
|
|
||||||
|
_HighColor = pygame.Color(51,166,255)
|
||||||
|
|
||||||
|
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._BGpng = IconItem()
|
||||||
|
self._BGpng._ImgSurf = MyIconPool._Icons["icon_sd"]
|
||||||
|
self._BGpng._MyType = ICON_TYPES["STAT"]
|
||||||
|
self._BGpng._Parent = self
|
||||||
|
|
||||||
|
self._BGpng.AddLabel(self._BGmsg % (self._DskUsg[1]-self._DskUsg[0], self._DskUsg[1]), fonts["varela15"])
|
||||||
|
self._BGpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
|
||||||
|
|
||||||
|
|
||||||
|
self._BGlabel = Label()
|
||||||
|
self._BGlabel.SetCanvasHWND(self._CanvasHWND)
|
||||||
|
|
||||||
|
usage_percent = (self._DskUsg[0]/self._DskUsg[1] )*100.0
|
||||||
|
|
||||||
|
self._BGlabel.Init("%d%%"% int(usage_percent),fonts["varela25"])
|
||||||
|
self._BGlabel.SetColor( self._HighColor )
|
||||||
|
|
||||||
|
self._FreeLabel = Label()
|
||||||
|
self._FreeLabel.SetCanvasHWND(self._CanvasHWND)
|
||||||
|
self._FreeLabel.Init("Free",fonts["varela13"])
|
||||||
|
self._FreeLabel.SetColor(self._BGlabel._Color)
|
||||||
|
|
||||||
|
|
||||||
|
def OnLoadCb(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
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._FreeLabel.NewCoord(self._BGlabel._PosX+10 ,self._Height/2)
|
||||||
|
self._FreeLabel.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)
|
||||||
|
|
||||||
|
aa_round_rect(self._CanvasHWND,rect_, (238,238,238),5,0,(238,238,238))
|
||||||
|
|
||||||
|
|
||||||
|
rect2 = midRect(self._Width/2,self._Height-30,int(170*(1.0-usage_percent)),17, Width,Height)
|
||||||
|
|
||||||
|
rect2.left = rect_.left
|
||||||
|
rect2.top = rect_.top
|
||||||
|
|
||||||
|
aa_round_rect(self._CanvasHWND,rect2, (126,206,244),5,0,(126,206,244))
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
359
Menu/GameShell/10_Settings/Update/__init__.py
Normal file
@ -0,0 +1,359 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
import os
|
||||||
|
import requests
|
||||||
|
import validators
|
||||||
|
import gobject
|
||||||
|
|
||||||
|
|
||||||
|
## local UI import
|
||||||
|
from UI.page import Page
|
||||||
|
from UI.constants import ICON_TYPES,Width,Height,RUNEVT
|
||||||
|
from UI.icon_item import IconItem
|
||||||
|
from UI.icon_pool import MyIconPool
|
||||||
|
from UI.label import Label
|
||||||
|
from UI.fonts import fonts
|
||||||
|
from UI.util_funcs import midRect,CmdClean
|
||||||
|
from UI.keys_def import CurKeys
|
||||||
|
from UI.confirm_page import ConfirmPage
|
||||||
|
from UI.download import Download
|
||||||
|
from UI.download_process_page import DownloadProcessPage
|
||||||
|
|
||||||
|
from libs.roundrects import aa_round_rect
|
||||||
|
|
||||||
|
import config
|
||||||
|
|
||||||
|
class UpdateDownloadPage(DownloadProcessPage):
|
||||||
|
_MD5 = ""
|
||||||
|
|
||||||
|
def GObjectUpdateProcessInterval(self):
|
||||||
|
if self._Screen.CurPage() == self:
|
||||||
|
if self._Downloader.isFinished():
|
||||||
|
if self._Downloader.isSuccessful():
|
||||||
|
print("Success!")
|
||||||
|
# Do something with obj.get_dest()
|
||||||
|
filename = self._Downloader.get_dest()
|
||||||
|
|
||||||
|
if filename.endswith(".tar.gz"):
|
||||||
|
#/home/cpi/apps/[launcher]
|
||||||
|
cmdpath = "tar zxf " + CmdClean(filename) + " -C /home/cpi/apps ;rm -rf "+ filename
|
||||||
|
pygame.event.post( pygame.event.Event(RUNEVT, message=cmdpath))
|
||||||
|
|
||||||
|
self.ReturnToUpLevelPage()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
else:
|
||||||
|
print("Download failed with the following exceptions:")
|
||||||
|
for e in self._Downloader.get_errors():
|
||||||
|
print(unicode(e))
|
||||||
|
|
||||||
|
try:
|
||||||
|
self._Downloader.stop()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
filename = self._Downloader.get_dest()
|
||||||
|
print(filename)
|
||||||
|
os.system("rm -rf %s" % CmdClean(filename))
|
||||||
|
|
||||||
|
self._Screen._MsgBox.SetText("Download failed")
|
||||||
|
self._Screen._MsgBox.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
self._Value = self._Downloader.get_progress()
|
||||||
|
print("Progress: %d%%" % (self._Value))
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def StartDownload(self,url,dst_dir):
|
||||||
|
if validators.url(url) and os.path.isdir(dst_dir):
|
||||||
|
self._URL = url
|
||||||
|
self._DST_DIR = dst_dir
|
||||||
|
else:
|
||||||
|
self._Screen._MsgBox.SetText("Invaid")
|
||||||
|
self._Screen._MsgBox.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
return
|
||||||
|
|
||||||
|
self._Downloader = Download(url,dst_dir,None)
|
||||||
|
if self._MD5 != None:
|
||||||
|
if len(self._MD5) == 32:
|
||||||
|
self._Downloader.add_hash_verification('md5' ,self._MD5) ## hashlib provide algorithms
|
||||||
|
|
||||||
|
self._Downloader.start()
|
||||||
|
|
||||||
|
self._DownloaderTimer = gobject.timeout_add(100, self.GObjectUpdateProcessInterval)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class UpdateConfirmPage(ConfirmPage):
|
||||||
|
_ConfirmText = "Confirm Update ?"
|
||||||
|
|
||||||
|
_DownloadPage = None
|
||||||
|
|
||||||
|
_URL = ""
|
||||||
|
_MD5 = ""
|
||||||
|
_Version = ""
|
||||||
|
_GIT = False
|
||||||
|
|
||||||
|
def KeyDown(self,event):
|
||||||
|
if event.key == CurKeys["Menu"] or event.key == CurKeys["A"]:
|
||||||
|
self.ReturnToUpLevelPage()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if event.key == CurKeys["B"]:
|
||||||
|
if self._GIT == True:
|
||||||
|
cmdpath = "cd /home/cpi/apps/launcher ;git pull "
|
||||||
|
pygame.event.post( pygame.event.Event(RUNEVT, message=cmdpath))
|
||||||
|
self._GIT = False
|
||||||
|
return
|
||||||
|
|
||||||
|
if self._DownloadPage == None:
|
||||||
|
self._DownloadPage = UpdateDownloadPage()
|
||||||
|
self._DownloadPage._Screen = self._Screen
|
||||||
|
self._DownloadPage._Name = "Downloading..."
|
||||||
|
self._DownloadPage.Init()
|
||||||
|
|
||||||
|
self._DownloadPage._MD5 = self._MD5
|
||||||
|
self._Screen.PushPage(self._DownloadPage)
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if self._URL != None and validators.url(self._URL):
|
||||||
|
self._DownloadPage.StartDownload(self._URL, "/tmp")
|
||||||
|
else:
|
||||||
|
print "error url %s " % self._URL
|
||||||
|
|
||||||
|
|
||||||
|
def OnReturnBackCb(self):
|
||||||
|
self.ReturnToUpLevelPage()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
self.ClearCanvas()
|
||||||
|
self.DrawBG()
|
||||||
|
for i in self._MyList:
|
||||||
|
i.Draw()
|
||||||
|
|
||||||
|
self.Reset()
|
||||||
|
|
||||||
|
|
||||||
|
class InfoPageListItem(object):
|
||||||
|
_PosX = 0
|
||||||
|
_PosY = 0
|
||||||
|
_Width = 0
|
||||||
|
_Height = 30
|
||||||
|
|
||||||
|
_Labels = {}
|
||||||
|
_Icons = {}
|
||||||
|
_Fonts = {}
|
||||||
|
|
||||||
|
_LinkObj = None
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._Labels = {}
|
||||||
|
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):
|
||||||
|
|
||||||
|
#self._Fonts["normal"] = fonts["veramono12"]
|
||||||
|
|
||||||
|
l = Label()
|
||||||
|
l._PosX = 10
|
||||||
|
l.SetCanvasHWND(self._Parent._CanvasHWND)
|
||||||
|
|
||||||
|
l.Init(text,self._Fonts["normal"])
|
||||||
|
self._Labels["Text"] = l
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
|
||||||
|
self._Labels["Text"]._PosY = self._PosY + (self._Height - self._Labels["Text"]._Height)/2
|
||||||
|
self._Labels["Text"].Draw()
|
||||||
|
|
||||||
|
if "Small" in self._Labels:
|
||||||
|
self._Labels["Small"]._PosX = self._Width - self._Labels["Small"]._Width-5
|
||||||
|
|
||||||
|
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 UpdatePage(Page):
|
||||||
|
_Icons = {}
|
||||||
|
_FootMsg = ["Nav.","Check Update","","Back",""]
|
||||||
|
|
||||||
|
_ListFontObj = fonts["varela15"]
|
||||||
|
_ConfirmPage = None
|
||||||
|
_AList = {}
|
||||||
|
_MyList = []
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
Page.__init__(self)
|
||||||
|
self._Icons = {}
|
||||||
|
|
||||||
|
def GenList(self):
|
||||||
|
|
||||||
|
start_x = 0
|
||||||
|
start_y = 0
|
||||||
|
|
||||||
|
for i,v in enumerate( self._AList):
|
||||||
|
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"] = 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):
|
||||||
|
self._CanvasHWND = self._Screen._CanvasHWND
|
||||||
|
self._Width = self._Screen._Width
|
||||||
|
self._Height = self._Screen._Height
|
||||||
|
|
||||||
|
self._ConfirmPage = UpdateConfirmPage()
|
||||||
|
self._ConfirmPage._Screen = self._Screen
|
||||||
|
self._ConfirmPage._Name = "Update Confirm"
|
||||||
|
self._ConfirmPage._Parent = self
|
||||||
|
self._ConfirmPage.Init()
|
||||||
|
|
||||||
|
it = {}
|
||||||
|
it["key"] = "version"
|
||||||
|
it["label"] = "Version"
|
||||||
|
it["value"] = config.VERSION
|
||||||
|
self._AList["version"] = it
|
||||||
|
|
||||||
|
self.GenList()
|
||||||
|
|
||||||
|
def CheckUpdate(self):
|
||||||
|
self._Screen._MsgBox.SetText("Checking update...")
|
||||||
|
self._Screen._MsgBox.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
try:
|
||||||
|
r = requests.get(config.UPDATE_URL, verify=False, timeout=8)
|
||||||
|
except:
|
||||||
|
print("requests get error")
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
if r.status_code == requests.codes.ok:
|
||||||
|
try:
|
||||||
|
json_ = r.json()
|
||||||
|
|
||||||
|
if "version" in json_ and "updatepath" in json_ and "md5sum" in json_:
|
||||||
|
if config.VERSION != json_["version"]:
|
||||||
|
|
||||||
|
self._ConfirmPage._URL = json_["updatepath"]
|
||||||
|
self._ConfirmPage._MD5 = json_["md5sum"]
|
||||||
|
self._ConfirmPage._GIT = False
|
||||||
|
|
||||||
|
self._Screen.PushPage(self._ConfirmPage)
|
||||||
|
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._ConfirmPage.SnapMsg("Confirm Update to %s ?" % json_["version"] )
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
elif "gitversion" in json_: ### just use git to run update
|
||||||
|
if confirm.VERSION != json_["gitversion"]:
|
||||||
|
self._ConfirmPage._URL = None
|
||||||
|
self._ConfirmPage._MD5 = None
|
||||||
|
self._ConfirmPage._GIT = True
|
||||||
|
|
||||||
|
self._Screen.PushPage(self._ConfirmPage)
|
||||||
|
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._ConfirmPage.SnapMsg("Update to %s ?" % json_["gitversion"] )
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
return True
|
||||||
|
except:
|
||||||
|
print("r.json error")
|
||||||
|
|
||||||
|
else:
|
||||||
|
print(" requests get error %d ", r.status_code)
|
||||||
|
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
def OnLoadCb(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def KeyDown(self,event):
|
||||||
|
if event.key == CurKeys["Menu"] or event.key == CurKeys["A"]:
|
||||||
|
self.ReturnToUpLevelPage()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if event.key == CurKeys["X"]:
|
||||||
|
if self.CheckUpdate() == True:
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
else:
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen._MsgBox.SetText("Checking update failed")
|
||||||
|
self._Screen._MsgBox.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
self.ClearCanvas()
|
||||||
|
# self._Ps.Draw()
|
||||||
|
|
||||||
|
for i in self._MyList:
|
||||||
|
i.Draw()
|
||||||
|
|
||||||
|
|
||||||
|
class APIOBJ(object):
|
||||||
|
|
||||||
|
_UpdatePage = None
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
def Init(self,main_screen):
|
||||||
|
self._UpdatePage = UpdatePage()
|
||||||
|
|
||||||
|
self._UpdatePage._Screen = main_screen
|
||||||
|
self._UpdatePage._Name ="Update"
|
||||||
|
self._UpdatePage.Init()
|
||||||
|
|
||||||
|
def API(self,main_screen):
|
||||||
|
if main_screen !=None:
|
||||||
|
main_screen.PushPage(self._UpdatePage)
|
||||||
|
main_screen.Draw()
|
||||||
|
main_screen.SwapAndShow()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
OBJ = APIOBJ()
|
||||||
|
def Init(main_screen):
|
||||||
|
OBJ.Init(main_screen)
|
||||||
|
def API(main_screen):
|
||||||
|
OBJ.API(main_screen)
|
||||||
|
|
||||||
|
|
||||||
29
Menu/GameShell/10_Settings/Wifi/__init__.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
## local UI import
|
||||||
|
import pages
|
||||||
|
import myvars
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
from icons import preload
|
||||||
|
except:
|
||||||
|
print("No icons package")
|
||||||
|
"""
|
||||||
|
from icons import preload
|
||||||
|
|
||||||
|
def Init(main_screen):
|
||||||
|
|
||||||
|
preload.load_icons()
|
||||||
|
pages.InitPasswordPage(main_screen)
|
||||||
|
pages.InitScanPage(main_screen)
|
||||||
|
|
||||||
|
def API(main_screen):
|
||||||
|
|
||||||
|
if main_screen != None:
|
||||||
|
main_screen.PushCurPage()
|
||||||
|
main_screen.SetCurPage(myvars.ScanPage)
|
||||||
|
main_screen.Draw()
|
||||||
|
main_screen.SwapAndShow()
|
||||||
|
|
||||||
|
|
||||||
BIN
Menu/GameShell/10_Settings/Wifi/icons/_L.png
Normal file
|
After Width: | Height: | Size: 306 B |
BIN
Menu/GameShell/10_Settings/Wifi/icons/_R.png
Normal file
|
After Width: | Height: | Size: 294 B |
BIN
Menu/GameShell/10_Settings/Wifi/icons/done.png
Normal file
|
After Width: | Height: | Size: 198 B |
BIN
Menu/GameShell/10_Settings/Wifi/icons/lock.png
Normal file
|
After Width: | Height: | Size: 335 B |
21
Menu/GameShell/10_Settings/Wifi/icons/preload.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
from pygame.locals import *
|
||||||
|
from sys import exit
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from beeprint import pp
|
||||||
|
|
||||||
|
ICONS_PRELOAD={}
|
||||||
|
|
||||||
|
|
||||||
|
def load_icons():
|
||||||
|
basepath = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
|
files = os.listdir(basepath)
|
||||||
|
for i in files:
|
||||||
|
if os.path.isfile(basepath+"/"+i) and i.endswith(".png"):
|
||||||
|
keyname = i.split(".")[0]
|
||||||
|
ICONS_PRELOAD[keyname] = pygame.image.load(basepath+"/"+i).convert_alpha()
|
||||||
340
Menu/GameShell/10_Settings/Wifi/keyboard.py
Normal file
@ -0,0 +1,340 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
|
||||||
|
from libs import easing
|
||||||
|
|
||||||
|
## local UI import
|
||||||
|
from UI.constants import Width,Height,ICON_TYPES
|
||||||
|
from UI.page import Page,PageSelector
|
||||||
|
from UI.label import Label
|
||||||
|
from UI.fonts import fonts
|
||||||
|
from UI.util_funcs import midRect
|
||||||
|
from UI.keys_def import CurKeys
|
||||||
|
from UI.icon_item import IconItem
|
||||||
|
|
||||||
|
from textarea import Textarea
|
||||||
|
from text_item import TextItem
|
||||||
|
from icons import preload
|
||||||
|
|
||||||
|
import myvars
|
||||||
|
|
||||||
|
class KeyboardIcon(IconItem):
|
||||||
|
_PosX = 0
|
||||||
|
_PosY = 0
|
||||||
|
_Width = 0
|
||||||
|
_Height = 0
|
||||||
|
_Color = pygame.Color(83,83,83)
|
||||||
|
_MyType = ICON_TYPES["NAV"]
|
||||||
|
_Parent = None
|
||||||
|
_Str = ""
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
self._Parent._CanvasHWND.blit(self._ImgSurf, \
|
||||||
|
midRect(self._PosX,self._PosY,self._Width,self._Height,Width,Height))
|
||||||
|
|
||||||
|
|
||||||
|
class KeyboardSelector(PageSelector):
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
sec_idx = self._Parent._SectionIndex
|
||||||
|
row_idx = self._Parent._RowIndex
|
||||||
|
idx = self._Parent._PsIndex
|
||||||
|
|
||||||
|
x = self._Parent._SecsKeys[sec_idx][row_idx][idx]._PosX
|
||||||
|
y = self._Parent._SecsKeys[sec_idx][row_idx][idx]._PosY
|
||||||
|
w = self._Parent._SecsKeys[sec_idx][row_idx][idx]._Width
|
||||||
|
h = self._Parent._SecsKeys[sec_idx][row_idx][idx]._Height
|
||||||
|
|
||||||
|
rect = midRect(x,y,w,h,self._Parent._Width,self._Parent._Height)
|
||||||
|
if rect.width <=0 or rect.height <= 0 :
|
||||||
|
return
|
||||||
|
|
||||||
|
pygame.draw.rect(self._Parent._CanvasHWND,(0,0,0),rect,1)
|
||||||
|
|
||||||
|
class Keyboard(Page):
|
||||||
|
_PosX = 0
|
||||||
|
_PosY = 0
|
||||||
|
_Width = 0
|
||||||
|
_Height = 0
|
||||||
|
_SectionNumbers = 3
|
||||||
|
_SectionIndex = 1
|
||||||
|
|
||||||
|
_Icons = {}
|
||||||
|
_Secs = {}
|
||||||
|
_SecsKeys = {}
|
||||||
|
_KeyboardLayoutFile = "UI/keyboard_keys.layout"
|
||||||
|
_Textarea = None
|
||||||
|
_Selector = None
|
||||||
|
_LeftOrRight = 1
|
||||||
|
_FootMsg = ["Nav.","ABC","Done","Backspace","Enter"]
|
||||||
|
|
||||||
|
_RowIndex = 0
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._Secs = {}
|
||||||
|
self._SecsKeys = {}
|
||||||
|
self._Icons = {}
|
||||||
|
|
||||||
|
def ReadLayoutFile(self,fname):
|
||||||
|
LayoutIndex = 0
|
||||||
|
with open(fname) as f:
|
||||||
|
content = f.readlines()
|
||||||
|
|
||||||
|
content = [ x.strip() for x in content]
|
||||||
|
content = [ x.split(" ") for x in content]
|
||||||
|
|
||||||
|
for i in content:
|
||||||
|
i = [ x.strip() for x in i]
|
||||||
|
if len(i) > 2:
|
||||||
|
if LayoutIndex in self._Secs:
|
||||||
|
self._Secs[LayoutIndex].append(i)
|
||||||
|
else:
|
||||||
|
self._Secs[LayoutIndex] = []
|
||||||
|
self._Secs[LayoutIndex].append(i)
|
||||||
|
else:
|
||||||
|
LayoutIndex+=1
|
||||||
|
|
||||||
|
def SetPassword(self,pwd):
|
||||||
|
|
||||||
|
pwd_list = list(pwd)
|
||||||
|
self._Textarea.ResetMyWords()
|
||||||
|
for i in pwd_list:
|
||||||
|
self._Textarea.AppendText(i)
|
||||||
|
#self._Textarea.BlitText()
|
||||||
|
|
||||||
|
def Init(self):
|
||||||
|
self._CanvasHWND = self._Screen._CanvasHWND
|
||||||
|
self.ReadLayoutFile(self._KeyboardLayoutFile) ## assign to _Secs
|
||||||
|
self._SectionNumbers = len(self._Secs)
|
||||||
|
self._PosX = self._Index*self._Screen._Width
|
||||||
|
self._Width = self._Screen._Width
|
||||||
|
self._Height = self._Screen._Height
|
||||||
|
|
||||||
|
fontobj = fonts["veramono24"]
|
||||||
|
word_margin = 15
|
||||||
|
|
||||||
|
start_x = (self._Width - fontobj.size( "".join(self._Secs[0][0]))[0]-len(self._Secs[0][0])*word_margin)/2+word_margin/2
|
||||||
|
start_y = 0
|
||||||
|
cnt = 0
|
||||||
|
for i in range(0,self._SectionNumbers):
|
||||||
|
self._SecsKeys[i] = []
|
||||||
|
for j in range(0,len(self._Secs[i])):
|
||||||
|
self._SecsKeys[i].append( [] )
|
||||||
|
|
||||||
|
start_x = (self._Width - fontobj.size( "".join(self._Secs[i][j]))[0]-len(self._Secs[i][j])*word_margin)/2+word_margin/2
|
||||||
|
start_x = start_x + i*Width
|
||||||
|
start_y = 84+j*(word_margin+14)
|
||||||
|
for idx,val in enumerate(self._Secs[i][j]):
|
||||||
|
ti = TextItem()
|
||||||
|
ti._FontObj = fontobj
|
||||||
|
ti._Parent = self
|
||||||
|
|
||||||
|
if val == "_L" or val == "_R":
|
||||||
|
it = KeyboardIcon()
|
||||||
|
it._ImgSurf = preload.ICONS_PRELOAD[val]
|
||||||
|
it._Parent = self
|
||||||
|
it._Str = val
|
||||||
|
it.Init(start_x+it._ImgSurf.get_width()/2 ,start_y,it._ImgSurf.get_width(),it._ImgSurf.get_height(),0)
|
||||||
|
#self._Icons[val] = it
|
||||||
|
self._SecsKeys[i][j].append(it)
|
||||||
|
self._IconNumbers+=1
|
||||||
|
start_x = start_x + it._ImgSurf.get_width()+word_margin
|
||||||
|
|
||||||
|
else:
|
||||||
|
if val == "_S":
|
||||||
|
val = "Space"
|
||||||
|
ti._FontObj = fonts["veramono15"]
|
||||||
|
ti._Bold = True
|
||||||
|
|
||||||
|
cur_alpha_size = ti._FontObj.size( val)
|
||||||
|
ti.Init(start_x + cur_alpha_size[0]/2,start_y,cur_alpha_size[0],cur_alpha_size[1],0)
|
||||||
|
ti._Str = val
|
||||||
|
|
||||||
|
start_x = start_x + cur_alpha_size[0]+word_margin # prepare for next alpha
|
||||||
|
self._SecsKeys[i][j].append(ti)
|
||||||
|
|
||||||
|
self._SectionIndex = 0
|
||||||
|
|
||||||
|
self._Textarea = Textarea()
|
||||||
|
|
||||||
|
self._Textarea._PosX = 4
|
||||||
|
self._Textarea._PosY = 4
|
||||||
|
self._Textarea._Width= self._Width - 4*2
|
||||||
|
self._Textarea._Height = 60
|
||||||
|
self._Textarea._CanvasHWND = self._CanvasHWND
|
||||||
|
self._Textarea.Init()
|
||||||
|
|
||||||
|
|
||||||
|
ps = KeyboardSelector()
|
||||||
|
ps._Parent = self
|
||||||
|
ps.Init(start_x,start_y,25,25,128)
|
||||||
|
self._Ps = ps
|
||||||
|
self._PsIndex = 0
|
||||||
|
self._Ps._OnShow = True
|
||||||
|
|
||||||
|
def SelectUpChar(self):
|
||||||
|
sec_idx = self._SectionIndex
|
||||||
|
self._RowIndex-=1
|
||||||
|
if self._RowIndex <0:
|
||||||
|
self._RowIndex = len(self._SecsKeys[sec_idx])-1
|
||||||
|
|
||||||
|
if self._PsIndex >=len(self._SecsKeys[sec_idx][self._RowIndex]):
|
||||||
|
self._PsIndex = len(self._SecsKeys[sec_idx][self._RowIndex])-1
|
||||||
|
|
||||||
|
|
||||||
|
self.ClearCanvas()
|
||||||
|
self.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
def SelectDownChar(self):
|
||||||
|
sec_idx = self._SectionIndex
|
||||||
|
self._RowIndex+=1
|
||||||
|
if self._RowIndex >= len(self._SecsKeys[sec_idx]):
|
||||||
|
self._RowIndex = 0
|
||||||
|
|
||||||
|
if self._PsIndex >=len(self._SecsKeys[sec_idx][self._RowIndex]):
|
||||||
|
self._PsIndex = len(self._SecsKeys[sec_idx][self._RowIndex])-1
|
||||||
|
|
||||||
|
self.ClearCanvas()
|
||||||
|
self.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
def SelectNextChar(self):
|
||||||
|
sec_idx = self._SectionIndex
|
||||||
|
row_idx = self._RowIndex
|
||||||
|
self._PsIndex+=1
|
||||||
|
if self._PsIndex >= len(self._SecsKeys[sec_idx][row_idx]):
|
||||||
|
self._PsIndex = 0
|
||||||
|
self._RowIndex+=1
|
||||||
|
if self._RowIndex >= len(self._SecsKeys[sec_idx]):
|
||||||
|
self._RowIndex = 0
|
||||||
|
|
||||||
|
self.ClearCanvas()
|
||||||
|
self.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
def SelectPrevChar(self):
|
||||||
|
sec_idx = self._SectionIndex
|
||||||
|
self._PsIndex-=1
|
||||||
|
if self._PsIndex < 0:
|
||||||
|
self._RowIndex-=1
|
||||||
|
if self._RowIndex <=0:
|
||||||
|
self._RowIndex = len(self._SecsKeys[sec_idx])-1
|
||||||
|
self._PsIndex = len(self._SecsKeys[sec_idx][self._RowIndex]) -1
|
||||||
|
|
||||||
|
self.ClearCanvas()
|
||||||
|
self.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
def ClickOnChar(self):
|
||||||
|
sec_idx = self._SectionIndex
|
||||||
|
alphabet = self._SecsKeys[sec_idx][self._RowIndex][self._PsIndex]._Str
|
||||||
|
|
||||||
|
if alphabet == "Space":
|
||||||
|
alphabet = " "
|
||||||
|
|
||||||
|
if alphabet == "_L" or alphabet == "_R":
|
||||||
|
if alphabet == "_L":
|
||||||
|
self._Textarea.SubTextIndex()
|
||||||
|
elif alphabet == "_R":
|
||||||
|
self._Textarea.AddTextIndex()
|
||||||
|
else:
|
||||||
|
self._Textarea.AppendText(alphabet)
|
||||||
|
|
||||||
|
self._Textarea.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
|
||||||
|
def KeyboardShift(self):
|
||||||
|
current_time = 0.0
|
||||||
|
start_posx = 0.0
|
||||||
|
current_posx = start_posx
|
||||||
|
final_posx = 320.0
|
||||||
|
posx_init = 0.0
|
||||||
|
dur = 30
|
||||||
|
last_posx = 0.0
|
||||||
|
all_last_posx = []
|
||||||
|
|
||||||
|
for i in range(0,Width*dur):
|
||||||
|
current_posx = easing.SineIn(current_time,start_posx,final_posx-start_posx,float(dur))
|
||||||
|
if current_posx >= final_posx:
|
||||||
|
current_posx = final_posx
|
||||||
|
|
||||||
|
dx = current_posx - last_posx
|
||||||
|
all_last_posx.append(int(dx))
|
||||||
|
current_time +=1
|
||||||
|
last_posx = current_posx
|
||||||
|
if current_posx >= final_posx:
|
||||||
|
break
|
||||||
|
|
||||||
|
c = 0
|
||||||
|
for i in all_last_posx:
|
||||||
|
c+=i
|
||||||
|
if c < final_posx - start_posx:
|
||||||
|
all_last_posx.append(final_posx - c)
|
||||||
|
|
||||||
|
for i in all_last_posx:
|
||||||
|
for j in range(0,self._SectionNumbers):
|
||||||
|
for u in self._SecsKeys[j]:
|
||||||
|
for x in u:
|
||||||
|
x._PosX += self._LeftOrRight*i
|
||||||
|
|
||||||
|
self.ResetPageSelector()
|
||||||
|
self.ClearCanvas()
|
||||||
|
self.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
def KeyDown(self,event):# event from pygame.event.get()
|
||||||
|
if event.key == CurKeys["Up"]:
|
||||||
|
self.SelectUpChar()
|
||||||
|
if event.key == CurKeys["Down"]:
|
||||||
|
self.SelectDownChar()
|
||||||
|
if event.key == CurKeys["Right"]:
|
||||||
|
self.SelectNextChar()
|
||||||
|
if event.key == CurKeys["Left"]:
|
||||||
|
self.SelectPrevChar()
|
||||||
|
if event.key == CurKeys["B"] or event.key == CurKeys["Enter"]:
|
||||||
|
self.ClickOnChar()
|
||||||
|
if event.key == CurKeys["X"]:
|
||||||
|
if self._SectionIndex <= 0:
|
||||||
|
self._LeftOrRight = -1
|
||||||
|
if self._SectionIndex >= (self._SectionNumbers -1):
|
||||||
|
self._LeftOrRight = 1
|
||||||
|
self.KeyboardShift()
|
||||||
|
|
||||||
|
self._SectionIndex -= self._LeftOrRight
|
||||||
|
|
||||||
|
#print(self._SectionIndex) # on which keyboard section now
|
||||||
|
self.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if event.key == CurKeys["Menu"]: # we assume keyboard always be child page
|
||||||
|
self.ReturnToUpLevelPage()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if event.key == CurKeys["Y"]: #done
|
||||||
|
print("".join(self._Textarea._MyWords))
|
||||||
|
self.ReturnToUpLevelPage()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
## config and connect now
|
||||||
|
myvars.ScanPage.ConfigWireless( "".join(self._Textarea._MyWords))
|
||||||
|
|
||||||
|
if event.key == CurKeys["A"]:
|
||||||
|
self._Textarea.RemoveFromLastText()
|
||||||
|
self._Textarea.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
self.ClearCanvas()
|
||||||
|
for i in range(0,self._SectionNumbers):
|
||||||
|
for j in self._SecsKeys[i]:
|
||||||
|
for u in j:
|
||||||
|
u.Draw()
|
||||||
|
|
||||||
|
|
||||||
|
self._Textarea.Draw()
|
||||||
|
self._Ps.Draw()
|
||||||
|
|
||||||
|
|
||||||
5
Menu/GameShell/10_Settings/Wifi/myvars.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
ScanPage = None
|
||||||
|
PasswordPage = None
|
||||||
199
Menu/GameShell/10_Settings/Wifi/net_item.py
Normal file
@ -0,0 +1,199 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
|
||||||
|
## local UI import
|
||||||
|
from UI.page import Page
|
||||||
|
from UI.label import Label
|
||||||
|
from UI.fonts import fonts
|
||||||
|
from UI.icon_item import IconItem
|
||||||
|
from UI.multi_icon_item import MultiIconItem
|
||||||
|
|
||||||
|
from icons import preload
|
||||||
|
|
||||||
|
class NetItemMultiIcon(MultiIconItem):
|
||||||
|
_CanvasHWND = None
|
||||||
|
_Parent = None
|
||||||
|
_Width = 18
|
||||||
|
_Height = 18
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
self._CanvasHWND.blit(self._ImgSurf,(self._PosX,self._PosY+(self._Parent._Height-self._Height)/2,self._Width,self._Height),
|
||||||
|
(0,self._IconIndex*self._IconHeight,self._IconWidth,self._IconHeight))
|
||||||
|
|
||||||
|
class NetItemIcon(IconItem):
|
||||||
|
|
||||||
|
_CanvasHWND = None
|
||||||
|
_Parent = None
|
||||||
|
_Width = 18
|
||||||
|
_Height = 18
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
self._CanvasHWND.blit(self._ImgSurf,(self._PosX,self._PosY+(self._Parent._Height-self._Height)/2,self._Width,self._Height))
|
||||||
|
|
||||||
|
|
||||||
|
class NetItem(object):
|
||||||
|
_PosX = 0
|
||||||
|
_PosY = 0
|
||||||
|
_Width = 0
|
||||||
|
_Height = 30
|
||||||
|
|
||||||
|
_Bssid="" # 50:3A:A0:51:18:3C
|
||||||
|
_Essid="" # MERCURY_EB88
|
||||||
|
|
||||||
|
## extra infomations
|
||||||
|
_dhcphostname = "GameShell"
|
||||||
|
_ip = None #eg 192.168.31.141
|
||||||
|
_dns_domain = None
|
||||||
|
_gateway = None #eg 192.168.31.1
|
||||||
|
_use_global_dns = 0 ## eg 0 == False, 1 == True
|
||||||
|
_netmask = None ##eg 255.255.255.0
|
||||||
|
_usedhcphostname= 0
|
||||||
|
_bitrate = "auto"
|
||||||
|
_allow_lower_bitrates = 0
|
||||||
|
_dns3 = None
|
||||||
|
_dns2 = None ## eg 1.1.1.1
|
||||||
|
_dns1 = None ## eg 8.8.8.8
|
||||||
|
_use_settings_globally = 0
|
||||||
|
_use_static_dns = 0 # eg: 1 == True
|
||||||
|
_search_domain = None
|
||||||
|
|
||||||
|
_Encrypt="" # WPA2
|
||||||
|
_Channel="" # '10'
|
||||||
|
_Stren = "" ## 19%
|
||||||
|
_NetId = 0 ## 0-n
|
||||||
|
_Mode = "" ## Master or AdHoc
|
||||||
|
_Parent = None
|
||||||
|
_IsActive = False
|
||||||
|
|
||||||
|
_Icons = {} ## wifi strength and security icons
|
||||||
|
_Labels = {}
|
||||||
|
_FontObj = None
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._Labels = {}
|
||||||
|
self._Icons = {}
|
||||||
|
|
||||||
|
def SetActive(self,act):
|
||||||
|
self._IsActive = act
|
||||||
|
|
||||||
|
def UpdateStrenLabel(self, strenstr): ## strenstr should be 'number',eg:'90'
|
||||||
|
self._Stren = self._Parent._Daemon.FormatSignalForPrinting(strenstr)
|
||||||
|
self._Labels["stren"]._Text = self._Stren
|
||||||
|
|
||||||
|
def Init(self, i, is_active):
|
||||||
|
# Pick which strength measure to use based on what the daemon says
|
||||||
|
# gap allocates more space to the first module
|
||||||
|
if self._Parent._Daemon.GetSignalDisplayType() == 0:
|
||||||
|
strenstr = 'quality'
|
||||||
|
gap = 4 # Allow for 100%
|
||||||
|
else:
|
||||||
|
strenstr = 'strength'
|
||||||
|
gap = 7 # -XX dbm = 7
|
||||||
|
self._NetId = i
|
||||||
|
# All of that network property stuff
|
||||||
|
self._Stren = self._Parent._Daemon.FormatSignalForPrinting(
|
||||||
|
str(self._Parent._Wireless.GetWirelessProperty(self._NetId, strenstr)))
|
||||||
|
|
||||||
|
self._Essid = self._Parent._Wireless.GetWirelessProperty(self._NetId, 'essid')
|
||||||
|
self._Bssid = self._Parent._Wireless.GetWirelessProperty(self._NetId, 'bssid')
|
||||||
|
|
||||||
|
if self._Parent._Wireless.GetWirelessProperty(self._NetId, 'encryption'):
|
||||||
|
self._Encrypt = \
|
||||||
|
self._Parent._Wireless.GetWirelessProperty(self._NetId, 'encryption_method')
|
||||||
|
else:
|
||||||
|
self._Encrypt = 'Unsecured'
|
||||||
|
|
||||||
|
self._Mode = \
|
||||||
|
self._Parent._Wireless.GetWirelessProperty(self._NetId, 'mode') # Master, Ad-Hoc
|
||||||
|
self._Channel = self._Parent._Wireless.GetWirelessProperty(self._NetId, 'channel')
|
||||||
|
theString = ' %-*s %25s %9s %17s %6s %4s' % \
|
||||||
|
(gap, self._Stren, self._Essid, self._Encrypt, self._Bssid, self._Mode,
|
||||||
|
self._Channel)
|
||||||
|
|
||||||
|
if is_active:
|
||||||
|
theString = ">> "+theString[1:]
|
||||||
|
self.SetActive(is_active)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
essid_label = Label()
|
||||||
|
essid_label._PosX = 36
|
||||||
|
#essid_label._PosY = self._PosY + (self._Height - self._FontObj.render(self._Essid,True,(83,83,83)).get_height())/2
|
||||||
|
essid_label._CanvasHWND = self._Parent._CanvasHWND
|
||||||
|
|
||||||
|
if len(self._Essid) > 19:
|
||||||
|
essid_ = self._Essid[:20]
|
||||||
|
else:
|
||||||
|
essid_ = self._Essid
|
||||||
|
|
||||||
|
essid_label.Init(essid_,self._FontObj)
|
||||||
|
self._Labels["essid"] = essid_label
|
||||||
|
|
||||||
|
stren_label = Label()
|
||||||
|
#stren_label._PosY = self._PosY + (self._Height - self._FontObj.render(self._Stren,True,(83,83,83)).get_height())/2
|
||||||
|
stren_label._CanvasHWND = self._Parent._CanvasHWND
|
||||||
|
|
||||||
|
stren_label.Init(self._Stren,self._FontObj)
|
||||||
|
stren_label._PosX = self._Width - 23 - stren_label.Width() - 2
|
||||||
|
self._Labels["stren"] = stren_label
|
||||||
|
|
||||||
|
|
||||||
|
lock_icon = NetItemIcon()
|
||||||
|
lock_icon._ImgSurf = preload.ICONS_PRELOAD["lock"]
|
||||||
|
lock_icon._CanvasHWND = self._Parent._CanvasHWND
|
||||||
|
lock_icon._Parent = self
|
||||||
|
self._Icons["lock"] = lock_icon
|
||||||
|
|
||||||
|
done_icon = NetItemIcon()
|
||||||
|
done_icon._ImgSurf = preload.ICONS_PRELOAD["done"]
|
||||||
|
done_icon._CanvasHWND = self._Parent._CanvasHWND
|
||||||
|
done_icon._Parent = self
|
||||||
|
|
||||||
|
self._Icons["done"] = done_icon
|
||||||
|
|
||||||
|
|
||||||
|
## reuse the resource from TitleBar
|
||||||
|
nimt = NetItemMultiIcon()
|
||||||
|
nimt._ImgSurf = self._Parent._Screen._TitleBar._Icons["wifistatus"]._ImgSurf
|
||||||
|
nimt._CanvasHWND = self._Parent._CanvasHWND
|
||||||
|
nimt._Parent = self
|
||||||
|
self._Icons["wifistatus"] = nimt
|
||||||
|
|
||||||
|
#pp(theString)
|
||||||
|
|
||||||
|
|
||||||
|
def Connect(self,notworkentry=None):
|
||||||
|
""" Execute connection. """
|
||||||
|
self._Parent._Wireless.ConnectWireless(self._NetId)
|
||||||
|
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
#pygame.draw.line(self._Parent._CanvasHWND,(169,169,169),(self._PosX,self._PosY),(self._PosX+self._Width,self._PosY),1)
|
||||||
|
for i in self._Labels:
|
||||||
|
self._Labels[i]._PosY = self._PosY + (self._Height - self._Labels[i]._Height)/2
|
||||||
|
self._Labels[i].Draw()
|
||||||
|
|
||||||
|
if self._IsActive:
|
||||||
|
self._Icons["done"].NewCoord(14,self._PosY)
|
||||||
|
self._Icons["done"].Draw()
|
||||||
|
|
||||||
|
if self._Encrypt != "Unsecured":
|
||||||
|
self._Icons["lock"].NewCoord( self._Width -23 - self._Labels["stren"].Width() - 2 - 18, self._PosY)
|
||||||
|
self._Icons["lock"].Draw()
|
||||||
|
|
||||||
|
ge = self._Parent._Screen._TitleBar.GetWifiStrength( self._Stren.replace('%',''))
|
||||||
|
|
||||||
|
if ge > 0:
|
||||||
|
self._Icons["wifistatus"]._IconIndex = ge
|
||||||
|
self._Icons["wifistatus"].NewCoord(self._Width-23,self._PosY)
|
||||||
|
self._Icons["wifistatus"].Draw()
|
||||||
|
|
||||||
|
else:
|
||||||
|
self._Icons["wifistatus"]._IconIndex = 0
|
||||||
|
self._Icons["wifistatus"].NewCoord(self._Width-23,self._PosY)
|
||||||
|
self._Icons["wifistatus"].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)
|
||||||
|
|
||||||
|
|
||||||
61
Menu/GameShell/10_Settings/Wifi/pages.py
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
|
#import dbus
|
||||||
|
#import dbus.service
|
||||||
|
#from wicd import misc
|
||||||
|
##misc.to_bool
|
||||||
|
##misc.misc.noneToString
|
||||||
|
##misc.to_unicode
|
||||||
|
##misc.Noneify
|
||||||
|
#from wicd.translations import _
|
||||||
|
#from wicd import wpath
|
||||||
|
#from wicd import dbusmanager
|
||||||
|
|
||||||
|
|
||||||
|
## local UI import
|
||||||
|
from libs.DBUS import bus,daemon,wireless,wired
|
||||||
|
|
||||||
|
from keyboard import Keyboard
|
||||||
|
from wifi_list import WifiList
|
||||||
|
|
||||||
|
import myvars
|
||||||
|
|
||||||
|
|
||||||
|
def InitScanPage(main_screen):
|
||||||
|
global wireless
|
||||||
|
global daemon
|
||||||
|
global bus
|
||||||
|
|
||||||
|
myvars.ScanPage = WifiList()
|
||||||
|
myvars.ScanPage._Name = "Scan wifi"
|
||||||
|
|
||||||
|
myvars.ScanPage._Wireless = wireless
|
||||||
|
myvars.ScanPage._Daemon = daemon
|
||||||
|
myvars.ScanPage._Dbus = bus
|
||||||
|
|
||||||
|
|
||||||
|
myvars.ScanPage._Screen = main_screen
|
||||||
|
myvars.ScanPage.Init()
|
||||||
|
|
||||||
|
|
||||||
|
if daemon != None:
|
||||||
|
#Bind signals
|
||||||
|
myvars.ScanPage._Dbus.add_signal_receiver(myvars.ScanPage.DbusScanFinishedSig, 'SendEndScanSignal',
|
||||||
|
'org.wicd.daemon.wireless')
|
||||||
|
myvars.ScanPage._Dbus.add_signal_receiver(myvars.ScanPage.DbusScanStarted, 'SendStartScanSignal',
|
||||||
|
'org.wicd.daemon.wireless')
|
||||||
|
#
|
||||||
|
myvars.ScanPage._Dbus.add_signal_receiver(myvars.ScanPage.DbusDaemonStatusChangedSig, 'StatusChanged',
|
||||||
|
'org.wicd.daemon')
|
||||||
|
myvars.ScanPage._Dbus.add_signal_receiver(myvars.ScanPage.DbusConnectResultsSent, 'ConnectResultsSent',
|
||||||
|
'org.wicd.daemon')
|
||||||
|
|
||||||
|
def InitPasswordPage(main_screen):
|
||||||
|
|
||||||
|
myvars.PasswordPage = Keyboard()
|
||||||
|
myvars.PasswordPage._Name = "Enter wifi password"
|
||||||
|
|
||||||
|
myvars.PasswordPage._Screen = main_screen
|
||||||
|
myvars.PasswordPage.Init()
|
||||||
|
|
||||||
28
Menu/GameShell/10_Settings/Wifi/text_item.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#local import
|
||||||
|
from UI.constants import Width,Height,ICON_TYPES
|
||||||
|
from UI.icon_item import IconItem
|
||||||
|
from UI.util_funcs import midRect
|
||||||
|
|
||||||
|
class TextItem(IconItem):
|
||||||
|
_PosX = 0
|
||||||
|
_PosY = 0
|
||||||
|
_Width = 0
|
||||||
|
_Height = 0
|
||||||
|
_Str = ""
|
||||||
|
_Color = (83,83,83)
|
||||||
|
_FontObj = None
|
||||||
|
_Bold = False
|
||||||
|
_MyType = ICON_TYPES["LETTER"]
|
||||||
|
_Parent = None
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
self._FontObj.set_bold(self._Bold)
|
||||||
|
my_text = self._FontObj.render(self._Str,True,self._Color)
|
||||||
|
if my_text.get_width() != self._Width:
|
||||||
|
self._Width = my_text.get_width()
|
||||||
|
if my_text.get_height() != self._Height:
|
||||||
|
self._Height = my_text.get_height()
|
||||||
|
|
||||||
|
self._Parent._CanvasHWND.blit(my_text, \
|
||||||
|
midRect(self._PosX,self._PosY,self._Width,self._Height,Width,Height))
|
||||||
133
Menu/GameShell/10_Settings/Wifi/textarea.py
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
from libs.roundrects import aa_round_rect
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## local UI import
|
||||||
|
from UI.page import Page,PageStack,PageSelector
|
||||||
|
from UI.label import Label
|
||||||
|
from UI.fonts import fonts
|
||||||
|
|
||||||
|
class Textarea:
|
||||||
|
_PosX =0
|
||||||
|
_PosY = 0
|
||||||
|
_Width = 0
|
||||||
|
_Height = 0
|
||||||
|
_BackgroundColor = pygame.Color(229,229,229)
|
||||||
|
_CanvasHWND = None
|
||||||
|
_MyWords = []
|
||||||
|
_FontObj = None
|
||||||
|
_LineNumber = 0
|
||||||
|
_TextFull = False
|
||||||
|
_TextIndex = 0
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def Init(self):
|
||||||
|
self._FontObj = fonts["veramono24"]
|
||||||
|
#pygame.font.Font(fonts_path["veramono"],24)
|
||||||
|
|
||||||
|
def SubTextIndex(self):
|
||||||
|
|
||||||
|
self._TextIndex-=1
|
||||||
|
if self._TextIndex < 0:
|
||||||
|
self._TextIndex = 0
|
||||||
|
|
||||||
|
def AddTextIndex(self):
|
||||||
|
self._TextIndex +=1
|
||||||
|
if self._TextIndex > len(self._MyWords):
|
||||||
|
self._TextIndex = len(self._MyWords)
|
||||||
|
|
||||||
|
def ResetMyWords(self):
|
||||||
|
self._MyWords = []
|
||||||
|
self._TextIndex = 0
|
||||||
|
|
||||||
|
def RemoveFromLastText(self):
|
||||||
|
if len(self._MyWords) > 0:
|
||||||
|
self.SubTextIndex()
|
||||||
|
|
||||||
|
del self._MyWords[self._TextIndex]
|
||||||
|
|
||||||
|
return self._MyWords
|
||||||
|
|
||||||
|
def AppendText(self,alphabet):
|
||||||
|
|
||||||
|
self.AppendAndBlitText(alphabet)
|
||||||
|
|
||||||
|
def AppendAndBlitText(self,alphabet):
|
||||||
|
|
||||||
|
if self._TextFull != True:
|
||||||
|
|
||||||
|
self._MyWords.insert(self._TextIndex,alphabet)
|
||||||
|
self.BlitText()
|
||||||
|
self.AddTextIndex()
|
||||||
|
else:
|
||||||
|
print("is Full %s" % "".join(self._MyWords))
|
||||||
|
|
||||||
|
|
||||||
|
def BlitText(self):
|
||||||
|
"""
|
||||||
|
blit every single word into surface and calc the width ,check multi line
|
||||||
|
"""
|
||||||
|
w = 0
|
||||||
|
xmargin = 5
|
||||||
|
endmargin = 15
|
||||||
|
x = self._PosX+xmargin
|
||||||
|
y = self._PosY
|
||||||
|
linenumber = 0
|
||||||
|
self._TextFull = False
|
||||||
|
for i,v in enumerate(self._MyWords):
|
||||||
|
t = self._FontObj.render(v,True,(8,135,174))
|
||||||
|
w += t.get_width()
|
||||||
|
|
||||||
|
if w >= self._Width-endmargin and linenumber == 0:
|
||||||
|
x = self._PosX+xmargin
|
||||||
|
y = self._PosY+ t.get_height()
|
||||||
|
w = 0
|
||||||
|
linenumber +=1
|
||||||
|
|
||||||
|
if w >= self._Width-endmargin*4 and linenumber > 0:
|
||||||
|
self._TextFull = True
|
||||||
|
self._CanvasHWND.blit(t, (x,y))
|
||||||
|
break
|
||||||
|
self._CanvasHWND.blit(t, (x,y))
|
||||||
|
x += t.get_width()
|
||||||
|
|
||||||
|
def Cursor(self):
|
||||||
|
w = 0
|
||||||
|
xmargin = 5
|
||||||
|
endmargin = 15
|
||||||
|
x = self._PosX+xmargin
|
||||||
|
y = self._PosY
|
||||||
|
linenumber = 0
|
||||||
|
for i,v in enumerate(self._MyWords[:self._TextIndex]):
|
||||||
|
t = self._FontObj.render(v,True,(8,135,174))
|
||||||
|
w += t.get_width()
|
||||||
|
|
||||||
|
if w >= self._Width-endmargin and linenumber == 0:
|
||||||
|
x = self._PosX+xmargin
|
||||||
|
y = self._PosY+ t.get_height()
|
||||||
|
w = 0
|
||||||
|
linenumber +=1
|
||||||
|
|
||||||
|
if w >= self._Width-endmargin*3 and linenumber > 0:
|
||||||
|
x += t.get_width()
|
||||||
|
break
|
||||||
|
x += t.get_width()
|
||||||
|
|
||||||
|
self._CanvasHWND.blit(self._FontObj.render("_",True,(0,0,0)),(x+1,y-2))
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
#aa_round_rect(self._CanvasHWND, (4,24.5+6,312,60),self._BackgroundColor,4,0,self._BackgroundColor)
|
||||||
|
|
||||||
|
aa_round_rect(self._CanvasHWND,
|
||||||
|
(self._PosX,self._PosY,self._Width,self._Height),self._BackgroundColor,4,0,self._BackgroundColor)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
self.BlitText()
|
||||||
|
self.Cursor()
|
||||||
820
Menu/GameShell/10_Settings/Wifi/wifi_list.py
Normal file
@ -0,0 +1,820 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
|
||||||
|
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
|
||||||
|
from UI.page import Page,PageSelector
|
||||||
|
from UI.label import Label
|
||||||
|
from UI.fonts import fonts
|
||||||
|
from UI.util_funcs import midRect,SwapAndShow
|
||||||
|
from UI.keys_def import CurKeys
|
||||||
|
from UI.scroller import ListScroller
|
||||||
|
from UI.confirm_page import ConfirmPage
|
||||||
|
|
||||||
|
from net_item import NetItem
|
||||||
|
|
||||||
|
import myvars
|
||||||
|
|
||||||
|
|
||||||
|
class InfoPageListItem(object):
|
||||||
|
_PosX = 0
|
||||||
|
_PosY = 0
|
||||||
|
_Width = 0
|
||||||
|
_Height = 30
|
||||||
|
|
||||||
|
_Labels = {}
|
||||||
|
_Icons = {}
|
||||||
|
_Fonts = {}
|
||||||
|
|
||||||
|
_LinkObj = None
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._Labels = {}
|
||||||
|
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):
|
||||||
|
|
||||||
|
#self._Fonts["normal"] = fonts["veramono12"]
|
||||||
|
|
||||||
|
l = Label()
|
||||||
|
l._PosX = 10
|
||||||
|
l.SetCanvasHWND(self._Parent._CanvasHWND)
|
||||||
|
|
||||||
|
l.Init(text,self._Fonts["normal"])
|
||||||
|
self._Labels["Text"] = l
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
|
||||||
|
self._Labels["Text"]._PosY = self._PosY + (self._Height - self._Labels["Text"]._Height)/2
|
||||||
|
self._Labels["Text"].Draw()
|
||||||
|
|
||||||
|
if "Small" in self._Labels:
|
||||||
|
self._Labels["Small"]._PosX = self._Width - self._Labels["Small"]._Width-5
|
||||||
|
|
||||||
|
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 WifiDisconnectConfirmPage(ConfirmPage):
|
||||||
|
|
||||||
|
_ConfirmText = "Confirm Disconnect?"
|
||||||
|
|
||||||
|
def KeyDown(self,event):
|
||||||
|
if event.key == CurKeys["Menu"] or event.key == CurKeys["A"]:
|
||||||
|
self.ReturnToUpLevelPage()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if event.key == CurKeys["B"]:
|
||||||
|
self.SnapMsg("Disconnecting...")
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
self._Parent._Daemon.Disconnect()
|
||||||
|
|
||||||
|
pygame.time.delay(400)
|
||||||
|
|
||||||
|
self.ReturnToUpLevelPage()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
#self.ClearCanvas()
|
||||||
|
self.DrawBG()
|
||||||
|
for i in self._MyList:
|
||||||
|
i.Draw()
|
||||||
|
|
||||||
|
self.Reset()
|
||||||
|
|
||||||
|
class WifiInfoPageSelector(PageSelector):
|
||||||
|
_BackgroundColor = pygame.Color(131,199,219)
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._PosX = 0
|
||||||
|
self._PosY = 0
|
||||||
|
self._Height = 0
|
||||||
|
self._Width = Width
|
||||||
|
|
||||||
|
def AnimateDraw(self,x2,y2):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
idx = self._Parent._PsIndex
|
||||||
|
if idx < len(self._Parent._MyList):
|
||||||
|
x = 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 WifiInfoPage(Page):
|
||||||
|
_FootMsg = ["Nav.","Disconnect","","Back",""]
|
||||||
|
_MyList = []
|
||||||
|
_ListFontObj = fonts["varela15"]
|
||||||
|
|
||||||
|
_Wireless = None
|
||||||
|
_Daemon = None
|
||||||
|
|
||||||
|
_AList = {}
|
||||||
|
_NetworkId = -1
|
||||||
|
|
||||||
|
def GenList(self):
|
||||||
|
|
||||||
|
self._MyList = []
|
||||||
|
if self._NetworkId != -1:
|
||||||
|
self._AList["ip"]["value"] = "Not Connected"
|
||||||
|
|
||||||
|
if self._Wireless.GetCurrentNetworkID(self._Wireless.GetIwconfig()) == self._NetworkId:
|
||||||
|
ip = self._Wireless.GetWirelessIP('')
|
||||||
|
|
||||||
|
if ip is not None:
|
||||||
|
self._AList["ip"]["value"] = ip
|
||||||
|
|
||||||
|
self._AList["bssid"]["value"] = self._Wireless.GetWirelessProperty(self._NetworkId,"bssid")
|
||||||
|
|
||||||
|
start_x = 0
|
||||||
|
start_y = 0
|
||||||
|
|
||||||
|
for i,v in enumerate( self._AList):
|
||||||
|
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"] = 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 = WifiInfoPageSelector()
|
||||||
|
ps._Parent = self
|
||||||
|
self._Ps = ps
|
||||||
|
self._PsIndex = 0
|
||||||
|
|
||||||
|
ip = {}
|
||||||
|
ip["key"] = "ip"
|
||||||
|
ip["label"] = "IP"
|
||||||
|
ip["value"] = "Not Connected"
|
||||||
|
|
||||||
|
bssid = {}
|
||||||
|
bssid["key"] = "bssid"
|
||||||
|
bssid["label"] = "BSSID"
|
||||||
|
bssid["value"] = ""
|
||||||
|
|
||||||
|
self._AList["ip"] = ip
|
||||||
|
self._AList["bssid"] = bssid
|
||||||
|
|
||||||
|
self.GenList()
|
||||||
|
|
||||||
|
self._DisconnectConfirmPage = WifiDisconnectConfirmPage()
|
||||||
|
self._DisconnectConfirmPage._Screen = self._Screen
|
||||||
|
self._DisconnectConfirmPage._Name = "Confirm Disconnect"
|
||||||
|
self._DisconnectConfirmPage._Parent = self
|
||||||
|
self._DisconnectConfirmPage.Init()
|
||||||
|
|
||||||
|
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 TryDisconnect(self):
|
||||||
|
if self._Wireless.GetCurrentNetworkID(self._Wireless.GetIwconfig()) == self._NetworkId \
|
||||||
|
and self._Wireless.GetWirelessIP('') is not None:
|
||||||
|
self._Screen.PushPage(self._DisconnectConfirmPage)
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
|
||||||
|
def OnLoadCb(self):
|
||||||
|
if self._Wireless.GetCurrentNetworkID(self._Wireless.GetIwconfig()) == self._NetworkId \
|
||||||
|
and self._Wireless.GetWirelessIP('') is not None:
|
||||||
|
self._FootMsg[1] = "Disconnect"
|
||||||
|
else:
|
||||||
|
self._FootMsg[1] = ""
|
||||||
|
|
||||||
|
self.GenList()
|
||||||
|
|
||||||
|
def OnReturnBackCb(self):
|
||||||
|
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()
|
||||||
|
|
||||||
|
|
||||||
|
if event.key == CurKeys["Enter"]:
|
||||||
|
self.Click()
|
||||||
|
|
||||||
|
if event.key == CurKeys["X"]:
|
||||||
|
self.TryDisconnect()
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
self.ClearCanvas()
|
||||||
|
self._Ps.Draw()
|
||||||
|
|
||||||
|
for i in self._MyList:
|
||||||
|
i.Draw()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class WifiListSelector(PageSelector):
|
||||||
|
_BackgroundColor = pygame.Color(131,199,219)
|
||||||
|
|
||||||
|
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._WirelessList):
|
||||||
|
x = self._Parent._WirelessList[idx]._PosX+11
|
||||||
|
y = self._Parent._WirelessList[idx]._PosY+1
|
||||||
|
h = self._Parent._WirelessList[idx]._Height -3
|
||||||
|
|
||||||
|
self._PosX = x
|
||||||
|
self._PosY = y
|
||||||
|
self._Height = h
|
||||||
|
|
||||||
|
aa_round_rect(self._Parent._CanvasHWND,
|
||||||
|
(x,y,self._Width,h),self._BackgroundColor,4,0,self._BackgroundColor)
|
||||||
|
|
||||||
|
|
||||||
|
class WifiListMessageBox(Label):
|
||||||
|
_Parent = None
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
my_text = self._FontObj.render( self._Text,True,self._Color)
|
||||||
|
w = my_text.get_width()
|
||||||
|
h = my_text.get_height()
|
||||||
|
x = (self._Parent._Width - w)/2
|
||||||
|
y = (self._Parent._Height - h)/2
|
||||||
|
padding = 10
|
||||||
|
pygame.draw.rect(self._CanvasHWND,(255,255,255),(x-padding,y-padding, w+padding*2,h+padding*2))
|
||||||
|
|
||||||
|
pygame.draw.rect(self._CanvasHWND,(0,0,0),(x-padding,y-padding, w+padding*2,h+padding*2),1)
|
||||||
|
|
||||||
|
self._CanvasHWND.blit(my_text,(x,y,w,h))
|
||||||
|
|
||||||
|
class WifiList(Page):
|
||||||
|
_WirelessList = []
|
||||||
|
#Wicd dbus part
|
||||||
|
_Wireless = None
|
||||||
|
_Daemon = None
|
||||||
|
_Dbus = None
|
||||||
|
_WifiPassword = ""
|
||||||
|
_Connecting = False
|
||||||
|
_Scanning = False
|
||||||
|
|
||||||
|
_PrevWicdState = None
|
||||||
|
|
||||||
|
_Selector = None
|
||||||
|
|
||||||
|
_ShowingMessageBox = False
|
||||||
|
_MsgBox = None
|
||||||
|
_ConnectTry = 0
|
||||||
|
_BlockingUI = False
|
||||||
|
_BlockCb = None
|
||||||
|
|
||||||
|
_LastStatusMsg = ""
|
||||||
|
_FootMsg = ["Nav.","Scan","Info","Back","Enter"]
|
||||||
|
_EncMethods = None
|
||||||
|
_Scroller = None
|
||||||
|
_ListFontObj = fonts["notosanscjk15"]
|
||||||
|
|
||||||
|
_InfoPage = None
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
Page.__init__(self)
|
||||||
|
self._WirelessList = []
|
||||||
|
self._CanvasHWND = None
|
||||||
|
|
||||||
|
def ShowBox(self,msg):
|
||||||
|
self._MsgBox._Text = msg
|
||||||
|
self._ShowingMessageBox = True
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._MsgBox.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
def HideBox(self):
|
||||||
|
self.Draw()
|
||||||
|
self._ShowingMessageBox = False
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
def GenNetworkList(self):
|
||||||
|
self._WirelessList = []
|
||||||
|
start_x = 0
|
||||||
|
start_y = 0
|
||||||
|
|
||||||
|
for network_id in range(0,self._Wireless.GetNumberOfNetworks()):
|
||||||
|
is_active = \
|
||||||
|
self._Wireless.GetCurrentSignalStrength("") != 0 and \
|
||||||
|
self._Wireless.GetCurrentNetworkID(self._Wireless.GetIwconfig()) == network_id \
|
||||||
|
and self._Wireless.GetWirelessIP('') is not None
|
||||||
|
|
||||||
|
ni = NetItem()
|
||||||
|
ni._Parent = self
|
||||||
|
ni._PosX = start_x
|
||||||
|
ni._PosY = start_y + network_id* NetItem._Height
|
||||||
|
ni._Width = Width
|
||||||
|
ni._FontObj = self._ListFontObj
|
||||||
|
#ni._Bssid = self._Wireless.GetWirelessProperty(network_id,"bssid")
|
||||||
|
|
||||||
|
ni.Init(network_id,is_active)
|
||||||
|
self._WirelessList.append(ni)
|
||||||
|
|
||||||
|
self._PsIndex = 0
|
||||||
|
|
||||||
|
def Disconnect(self):
|
||||||
|
self._Connecting= False
|
||||||
|
self._Daemon.Disconnect()
|
||||||
|
## force to disconnect
|
||||||
|
def ShutDownConnecting(self):
|
||||||
|
print("Shutdownconnecting...",self._ConnectTry)
|
||||||
|
self._Daemon.CancelConnect()
|
||||||
|
self._Daemon.SetForcedDisconnect(True)
|
||||||
|
self._Connecting = False
|
||||||
|
|
||||||
|
def Rescan(self,sync=False):
|
||||||
|
print("start Rescan")
|
||||||
|
if self._Wireless != None:
|
||||||
|
self._Wireless.Scan(sync)
|
||||||
|
|
||||||
|
## dbus signal functions
|
||||||
|
def DbusScanFinishedSig(self):
|
||||||
|
|
||||||
|
if self._Screen._CurrentPage != self:
|
||||||
|
return
|
||||||
|
self.ResetPageSelector()
|
||||||
|
|
||||||
|
self.UpdateNetList(force_check=True)
|
||||||
|
|
||||||
|
self._Scanning = False
|
||||||
|
self.HideBox()
|
||||||
|
self._BlockingUI = False
|
||||||
|
print("dbus says scan finished")
|
||||||
|
|
||||||
|
def DbusScanStarted(self):
|
||||||
|
if self._Screen._CurrentPage !=self:
|
||||||
|
return
|
||||||
|
|
||||||
|
self._Scanning = True
|
||||||
|
self.ShowBox("Wifi scanning...")
|
||||||
|
self._BlockingUI = True
|
||||||
|
print("dbus says start scan...")
|
||||||
|
|
||||||
|
|
||||||
|
def UpdateNetList(self,state=None,info=None,force_check=False,firstrun=False):
|
||||||
|
|
||||||
|
if self._Daemon == None:
|
||||||
|
return
|
||||||
|
|
||||||
|
if not state:
|
||||||
|
state,trash = self._Daemon.GetConnectionStatus()
|
||||||
|
print("state")
|
||||||
|
pp(state)
|
||||||
|
print("Trash: ")
|
||||||
|
pp(trash)
|
||||||
|
|
||||||
|
if force_check or self._PrevWicdState != state:
|
||||||
|
self.GenNetworkList() ## refresh the network list
|
||||||
|
|
||||||
|
if info != None:
|
||||||
|
if len(info) > 3:
|
||||||
|
_id = int(info[3])
|
||||||
|
if _id < len(self._WirelessList):
|
||||||
|
self._WirelessList[_id].UpdateStrenLabel( str(info[2]))
|
||||||
|
|
||||||
|
self._PrevWicdState = state
|
||||||
|
|
||||||
|
def SetConnectingStatus(self,fast):
|
||||||
|
wireless_connecting = self._Wireless.CheckIfWirelessConnecting()
|
||||||
|
|
||||||
|
"""
|
||||||
|
if self._ConnectTry > 5000:
|
||||||
|
#wicd itself will take a very long time to try to connect ,will not block forever,just make it faster to dropout
|
||||||
|
self.ShutDownConnecting()
|
||||||
|
self._ConnectTry = 0
|
||||||
|
self._BlockingUI = False
|
||||||
|
return False
|
||||||
|
"""
|
||||||
|
|
||||||
|
if wireless_connecting:
|
||||||
|
if not fast:
|
||||||
|
iwconfig = self._Wireless.GetIwconfig()
|
||||||
|
else:
|
||||||
|
iwconfig = ''
|
||||||
|
essid = self._Wireless.GetCurrentNetwork(iwconfig)
|
||||||
|
stat = self._Wireless.CheckWirelessConnectingMessage()
|
||||||
|
if self._LastStatusMsg != "%s: %s"%(essid,stat):
|
||||||
|
print("%s: %s" %(essid,stat))
|
||||||
|
self._LastStatusMsg = "%s: %s"%(essid,stat)
|
||||||
|
self.ShowBox(self._LastStatusMsg)
|
||||||
|
|
||||||
|
self._Screen._FootBar.UpdateNavText(self._LastStatusMsg)
|
||||||
|
SwapAndShow()
|
||||||
|
|
||||||
|
#self._ConnectTry+=1
|
||||||
|
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
self._Connecting = False
|
||||||
|
return self._Connecting
|
||||||
|
|
||||||
|
def UpdateStatus(self):
|
||||||
|
print("UpdateStatus")
|
||||||
|
wireless_connecting = self._Wireless.CheckIfWirelessConnecting()
|
||||||
|
fast = not self._Daemon.NeedsExternalCalls()
|
||||||
|
|
||||||
|
self._Connecting = wireless_connecting
|
||||||
|
|
||||||
|
if self._Connecting:
|
||||||
|
gobject.timeout_add(250,self.SetConnectingStatus,fast)
|
||||||
|
else:
|
||||||
|
if not fast:
|
||||||
|
iwconfig = self._Wireless.GetIwconfig()
|
||||||
|
else:
|
||||||
|
iwconfig = ''
|
||||||
|
|
||||||
|
if self.CheckForWireless(iwconfig,self._Wireless.GetWirelessIP(''),None):
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
print("Not Connected")
|
||||||
|
return True
|
||||||
|
|
||||||
|
def DbusDaemonStatusChangedSig(self,state=None,info=None):
|
||||||
|
print("in DbusDaemonStatusChangedSig")
|
||||||
|
"""
|
||||||
|
dbus.UInt32(2L)
|
||||||
|
['192.168.31.141', 'TP-LINK4G', '88', '0', '72.2 Mb/s']
|
||||||
|
"""
|
||||||
|
pp(info)
|
||||||
|
self.UpdateNetList(state,info)
|
||||||
|
if info != None:
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
|
||||||
|
def DbusConnectResultsSent(self,result):
|
||||||
|
print(" in DbusConnectResultsSent")
|
||||||
|
"""
|
||||||
|
in DbusConnectResultsSent
|
||||||
|
'dhcp_failed'
|
||||||
|
dbus says start scan...
|
||||||
|
|
||||||
|
"""
|
||||||
|
if result != None:
|
||||||
|
print(result)
|
||||||
|
|
||||||
|
self._Connecting = False
|
||||||
|
self._BlockingUI = False
|
||||||
|
if self._BlockCb != None:
|
||||||
|
self._BlockCb()
|
||||||
|
self._BlockCb = None
|
||||||
|
|
||||||
|
self._Screen._FootBar.ResetNavText()
|
||||||
|
|
||||||
|
def CheckForWireless(self,iwconfig,wireless_ip,set_status):
|
||||||
|
if not wireless_ip:
|
||||||
|
return False
|
||||||
|
network = self._Wireless.GetCurrentNetwork(iwconfig)
|
||||||
|
if not network:
|
||||||
|
return False
|
||||||
|
network = misc.to_unicode(network)
|
||||||
|
if daemon.GetSignalDisplayType() == 0:
|
||||||
|
strength = self._Wireless.GetCurrentSignalStrength(iwconfig)
|
||||||
|
else:
|
||||||
|
strength = self._Wireless.GetCurrentDBMStrength(iwconfig)
|
||||||
|
|
||||||
|
if strength is None:
|
||||||
|
return False
|
||||||
|
strength = misc.to_unicode(self._Daemon.FormatSignalForPrinting(strength))
|
||||||
|
ip = misc.to_unicode(wireless_ip)
|
||||||
|
|
||||||
|
print(_('Connected to $A at $B (IP: $C)').replace
|
||||||
|
('$A', network).replace
|
||||||
|
('$B', strength).replace
|
||||||
|
('$C', ip))
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def ConfigWireless(self,password):
|
||||||
|
netid = self._PsIndex
|
||||||
|
print(netid," ", password)
|
||||||
|
"""
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"dhcphostname","GameShell")
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"ip","None")
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"dns_domain","None")
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"gateway","None")
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"use_global_dns",0)
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"netmask","None")
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"usedhcphostname",0) ## set 1 to use hostname above
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"bitrate","auto")
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"allow_lower_bitrates",0)
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"dns3","None")
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"dns2","None")
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"dns1","None")
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"use_settings_globally",0)
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"use_static_dns",0)
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"search_domain","None")
|
||||||
|
"""
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"enctype","wpa-psk")
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"apsk",password)
|
||||||
|
self._Wireless.SetWirelessProperty(netid,"automatic",1)
|
||||||
|
|
||||||
|
|
||||||
|
self._WirelessList[netid].Connect()
|
||||||
|
print("after Connect")
|
||||||
|
self.UpdateStatus()
|
||||||
|
|
||||||
|
def GetWirelessEncrypt(self,network_id):
|
||||||
|
results = []
|
||||||
|
activeID = -1
|
||||||
|
for x,enc_type in enumerate(self._EncMethods):
|
||||||
|
if enc_type["type"] == self._Wireless.GetWirelessProperty(network_id,"enctype"):
|
||||||
|
activeID = x
|
||||||
|
break
|
||||||
|
|
||||||
|
if activeID == -1:
|
||||||
|
return results
|
||||||
|
|
||||||
|
for type_ in ['required','optional']:
|
||||||
|
fields = self._EncMethods[activeID][type_]
|
||||||
|
for field in fields:
|
||||||
|
try:
|
||||||
|
text = field[1].lower().replace(' ','_')
|
||||||
|
except KeyError:
|
||||||
|
text = field[1].replace(' ','_')
|
||||||
|
|
||||||
|
value = self._Wireless.GetWirelessProperty(network_id, field[0])
|
||||||
|
results.append({text:value})
|
||||||
|
"""
|
||||||
|
[{'preshared_key': 'blah blah blah',},]
|
||||||
|
|
||||||
|
or nothing
|
||||||
|
[{'identity': None,},{'password': None,},]
|
||||||
|
|
||||||
|
"""
|
||||||
|
return results
|
||||||
|
|
||||||
|
def ScrollUp(self):
|
||||||
|
if len(self._WirelessList) == 0:
|
||||||
|
return
|
||||||
|
self._PsIndex-=1
|
||||||
|
if self._PsIndex < 0:
|
||||||
|
self._PsIndex = 0
|
||||||
|
|
||||||
|
cur_ni = self._WirelessList[self._PsIndex]
|
||||||
|
if cur_ni._PosY < 0:
|
||||||
|
for i in range(0,len(self._WirelessList)):
|
||||||
|
self._WirelessList[i]._PosY += self._WirelessList[i]._Height
|
||||||
|
|
||||||
|
def ScrollDown(self):
|
||||||
|
if len(self._WirelessList) == 0:
|
||||||
|
return
|
||||||
|
self._PsIndex+=1
|
||||||
|
if self._PsIndex >= len(self._WirelessList):
|
||||||
|
self._PsIndex = len(self._WirelessList) -1
|
||||||
|
|
||||||
|
cur_ni = self._WirelessList[self._PsIndex]
|
||||||
|
if cur_ni._PosY + cur_ni._Height > self._Height:
|
||||||
|
for i in range(0,len(self._WirelessList)):
|
||||||
|
self._WirelessList[i]._PosY -= self._WirelessList[i]._Height
|
||||||
|
|
||||||
|
|
||||||
|
def AbortedAndReturnToUpLevel(self):
|
||||||
|
self.HideBox()
|
||||||
|
self._Screen._FootBar.ResetNavText()
|
||||||
|
self.ReturnToUpLevelPage()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
def KeyDown(self,event):
|
||||||
|
|
||||||
|
if self._BlockingUI == True:
|
||||||
|
print("UI blocking ...")
|
||||||
|
return
|
||||||
|
|
||||||
|
if event.key == CurKeys["A"] or event.key == CurKeys["Menu"]:
|
||||||
|
if self._Wireless != None:
|
||||||
|
wireless_connecting = self._Wireless.CheckIfWirelessConnecting()
|
||||||
|
if wireless_connecting:
|
||||||
|
self.ShutDownConnecting()
|
||||||
|
self.ShowBox("ShutDownConnecting...")
|
||||||
|
self._BlockingUI=True
|
||||||
|
self._BlockCb = self.AbortedAndReturnToUpLevel
|
||||||
|
else:
|
||||||
|
self.AbortedAndReturnToUpLevel()
|
||||||
|
else:
|
||||||
|
self.HideBox()
|
||||||
|
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 event.key == CurKeys["Enter"]: ## enter to set password,enter is B on GM
|
||||||
|
if len(self._WirelessList) == 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
wicd_wirelss_encrypt_pwd = self.GetWirelessEncrypt(self._PsIndex)
|
||||||
|
|
||||||
|
if self._WirelessList[self._PsIndex]._IsActive:
|
||||||
|
self.ShowBox( self._Wireless.GetWirelessIP('') )
|
||||||
|
else:
|
||||||
|
self._Screen.PushCurPage()
|
||||||
|
self._Screen.SetCurPage( myvars.PasswordPage )
|
||||||
|
|
||||||
|
thepass = ""
|
||||||
|
for i in wicd_wirelss_encrypt_pwd:
|
||||||
|
if "preshared_key" in i:
|
||||||
|
if i["preshared_key"] != None:
|
||||||
|
if len(i["preshared_key"]) > 0:
|
||||||
|
thepass = i["preshared_key"]
|
||||||
|
break
|
||||||
|
|
||||||
|
myvars.PasswordPage.SetPassword(thepass)
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
exit(-1)
|
||||||
|
"""
|
||||||
|
if event.key == CurKeys["X"]:
|
||||||
|
self.Rescan(False)
|
||||||
|
|
||||||
|
if event.key == CurKeys["Y"]:
|
||||||
|
if len(self._WirelessList) == 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
self._InfoPage._NetworkId = self._PsIndex
|
||||||
|
self._InfoPage._Wireless = self._Wireless
|
||||||
|
self._InfoPage._Daemon = self._Daemon
|
||||||
|
|
||||||
|
self._Screen.PushPage(self._InfoPage)
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
|
||||||
|
def Init(self):
|
||||||
|
|
||||||
|
self._PosX = self._Index * self._Screen._Width
|
||||||
|
self._Width = self._Screen._Width
|
||||||
|
self._Height = self._Screen._Height
|
||||||
|
|
||||||
|
#self._CanvasHWND = pygame.Surface((self._Width,self._Height))
|
||||||
|
self._CanvasHWND = self._Screen._CanvasHWND
|
||||||
|
|
||||||
|
ps = WifiListSelector()
|
||||||
|
ps._Parent = self
|
||||||
|
ps._Width = Width - 12
|
||||||
|
|
||||||
|
self._Ps = ps
|
||||||
|
self._PsIndex = 0
|
||||||
|
|
||||||
|
msgbox = WifiListMessageBox()
|
||||||
|
msgbox._CanvasHWND = self._CanvasHWND
|
||||||
|
msgbox.Init(" ",fonts["veramono12"])
|
||||||
|
msgbox._Parent = self
|
||||||
|
|
||||||
|
self._MsgBox = msgbox
|
||||||
|
|
||||||
|
self._EncMethods = misc.LoadEncryptionMethods() # load predefined templates from /etc/wicd/...
|
||||||
|
|
||||||
|
"""
|
||||||
|
{
|
||||||
|
'fields': [],
|
||||||
|
'name': 'WPA 1/2 (Passphrase)',
|
||||||
|
'optional': [],
|
||||||
|
'protected': [
|
||||||
|
['apsk', 'Preshared_Key'],
|
||||||
|
],
|
||||||
|
'required': [
|
||||||
|
['apsk', 'Preshared_Key'],
|
||||||
|
],
|
||||||
|
'type': 'wpa-psk',
|
||||||
|
},
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.UpdateNetList(force_check=True,firstrun=True)
|
||||||
|
|
||||||
|
self._Scroller = ListScroller()
|
||||||
|
self._Scroller._Parent = self
|
||||||
|
self._Scroller._PosX = 2
|
||||||
|
self._Scroller._PosY = 2
|
||||||
|
self._Scroller.Init()
|
||||||
|
|
||||||
|
|
||||||
|
self._InfoPage = WifiInfoPage()
|
||||||
|
self._InfoPage._Screen = self._Screen
|
||||||
|
self._InfoPage._Name = "Wifi info"
|
||||||
|
self._InfoPage.Init()
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
self.ClearCanvas()
|
||||||
|
|
||||||
|
if len(self._WirelessList) == 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
self._Ps.Draw()
|
||||||
|
for i in self._WirelessList:
|
||||||
|
i.Draw()
|
||||||
|
|
||||||
|
|
||||||
|
self._Scroller.UpdateSize( len(self._WirelessList)*NetItem._Height, self._PsIndex*NetItem._Height)
|
||||||
|
self._Scroller.Draw()
|
||||||
29
Menu/GameShell/10_Settings/__init__.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
from pygame.locals import *
|
||||||
|
from sys import exit
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import base64
|
||||||
|
from beeprint import pp
|
||||||
|
|
||||||
|
|
||||||
|
## local UI import
|
||||||
|
import pages
|
||||||
|
import myvars
|
||||||
|
|
||||||
|
def Init(main_screen):
|
||||||
|
pages.InitListPage(main_screen)
|
||||||
|
|
||||||
|
def API(main_screen):
|
||||||
|
|
||||||
|
if main_screen !=None:
|
||||||
|
main_screen.PushCurPage()
|
||||||
|
main_screen.SetCurPage(myvars.ListPage)
|
||||||
|
main_screen.Draw()
|
||||||
|
main_screen.SwapAndShow()
|
||||||
|
|
||||||
59
Menu/GameShell/10_Settings/list_item.py
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## local UI import
|
||||||
|
from UI.page import Page
|
||||||
|
from UI.label import Label
|
||||||
|
from UI.fonts import fonts
|
||||||
|
|
||||||
|
# a item for List
|
||||||
|
# - - - - - - - - - - - --
|
||||||
|
# | Icon Text..... > |
|
||||||
|
# ------------------------
|
||||||
|
|
||||||
|
import myvars # icons_path
|
||||||
|
|
||||||
|
|
||||||
|
class ListItem(object):
|
||||||
|
_PosX = 0
|
||||||
|
_PosY = 0
|
||||||
|
_Width = 0
|
||||||
|
_Height = 30
|
||||||
|
|
||||||
|
_Labels = {}
|
||||||
|
_Icons = {}
|
||||||
|
_Fonts = {}
|
||||||
|
|
||||||
|
_LinkObj = None
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._Labels = {}
|
||||||
|
self._Icons = {}
|
||||||
|
self._Fonts = {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def Init(self,text):
|
||||||
|
|
||||||
|
#self._Fonts["normal"] = fonts["veramono12"]
|
||||||
|
|
||||||
|
l = Label()
|
||||||
|
l._PosX = 16
|
||||||
|
l.SetCanvasHWND(self._Parent._CanvasHWND)
|
||||||
|
|
||||||
|
l.Init(text,self._Fonts["normal"])
|
||||||
|
self._Labels["Text"] = l
|
||||||
|
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
|
||||||
|
self._Labels["Text"]._PosY = self._PosY + (self._Height - self._Labels["Text"]._Height)/2
|
||||||
|
self._Labels["Text"].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)
|
||||||
|
|
||||||
|
|
||||||
190
Menu/GameShell/10_Settings/list_page.py
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
# -*- 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.fonts import fonts
|
||||||
|
from UI.util_funcs import midRect
|
||||||
|
from UI.keys_def import CurKeys
|
||||||
|
from UI.scroller import ListScroller
|
||||||
|
|
||||||
|
from list_item import ListItem
|
||||||
|
|
||||||
|
import myvars
|
||||||
|
|
||||||
|
class ListPageSelector(PageSelector):
|
||||||
|
_BackgroundColor = pygame.Color(131,199,219)
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._PosX = 0
|
||||||
|
self._PosY = 0
|
||||||
|
self._Height = 0
|
||||||
|
self._Width = Width
|
||||||
|
|
||||||
|
def AnimateDraw(self,x2,y2):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
idx = self._Parent._PsIndex
|
||||||
|
if idx < len(self._Parent._MyList):
|
||||||
|
x = 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 ListPage(Page):
|
||||||
|
|
||||||
|
_Icons = {}
|
||||||
|
_Selector=None
|
||||||
|
|
||||||
|
_FootMsg = ["Nav","","","Back","Enter"]
|
||||||
|
_MyList = []
|
||||||
|
_ListFontObj = fonts["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 = ListPageSelector()
|
||||||
|
ps._Parent = self
|
||||||
|
self._Ps = ps
|
||||||
|
self._PsIndex = 0
|
||||||
|
|
||||||
|
# "" pkgname, label
|
||||||
|
alist = [["","Wifi","Wi-Fi"],
|
||||||
|
["","Sound","Sound Volume"],
|
||||||
|
["","Brightness","BackLight Brightness"],
|
||||||
|
["","Storage",""],
|
||||||
|
["","Update", ""],
|
||||||
|
["","About", "About"],
|
||||||
|
["","PowerOFF","PowerOFF"]]
|
||||||
|
|
||||||
|
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":
|
||||||
|
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 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]
|
||||||
|
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 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()
|
||||||
|
|
||||||
|
|
||||||
|
if event.key == CurKeys["Enter"]:
|
||||||
|
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()
|
||||||
|
|
||||||
|
|
||||||
12
Menu/GameShell/10_Settings/myvars.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from sys import exit
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
basepath = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
|
icons_path = basepath+"/icons"
|
||||||
|
|
||||||
|
ListPage = None
|
||||||
13
Menu/GameShell/10_Settings/pages.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from list_page import ListPage
|
||||||
|
|
||||||
|
import myvars
|
||||||
|
|
||||||
|
def InitListPage(main_screen):
|
||||||
|
|
||||||
|
myvars.ListPage = ListPage()
|
||||||
|
|
||||||
|
myvars.ListPage._Screen = main_screen
|
||||||
|
myvars.ListPage._Name = "Setting List"
|
||||||
|
myvars.ListPage.Init()
|
||||||
BIN
Menu/GameShell/20_Retro Games/GBA.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
6
Menu/GameShell/20_Retro Games/GBA/action.config
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
ROM=/home/cpi/games/GBX
|
||||||
|
ROM_SO=/home/cpi/apps/emulators/mgba_libretro.so
|
||||||
|
EXT=gba,gbx
|
||||||
|
LAUNCHER=retroarch -L
|
||||||
|
TITLE=GBA Roms
|
||||||
|
SO_URL=http://buildbot.libretro.com/nightly/linux/armhf/latest/mgba_libretro.so.zip
|
||||||
BIN
Menu/GameShell/20_Retro Games/MAME.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
6
Menu/GameShell/20_Retro Games/MAME/action.config
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
ROM=/home/cpi/games/MAME
|
||||||
|
ROM_SO=/home/cpi/apps/emulators/mame2003_plus_libretro.so
|
||||||
|
EXT=zip
|
||||||
|
LAUNCHER=retroarch -L
|
||||||
|
TITLE=MAME Roms
|
||||||
|
SO_URL=http://buildbot.libretro.com/nightly/linux/armhf/latest/mame2003_plus_libretro.so.zip
|
||||||
BIN
Menu/GameShell/20_Retro Games/NES.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
7
Menu/GameShell/20_Retro Games/NES/action.config
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
ROM=/home/cpi/games/NES
|
||||||
|
ROM_SO=/home/cpi/apps/emulators/fceumm_libretro.so
|
||||||
|
EXT=zip
|
||||||
|
LAUNCHER=retroarch -L
|
||||||
|
TITLE=NES Roms
|
||||||
|
SO_URL=http://buildbot.libretro.com/nightly/linux/armhf/latest/nestopia_libretro.so.zip
|
||||||
|
|
||||||
BIN
Menu/GameShell/CaveStroy.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
1
Menu/GameShell/CaveStroy.sh
Normal file
@ -0,0 +1 @@
|
|||||||
|
retroarch -L /home/cpi/apps/emulators/nxengine_libretro.so /home/cpi/games/nxengine/cavestory/data
|
||||||
BIN
Menu/GameShell/Music Player.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
36
Menu/GameShell/Music Player/__init__.py
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
from pygame.locals import *
|
||||||
|
from sys import exit
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import base64
|
||||||
|
from beeprint import pp
|
||||||
|
|
||||||
|
|
||||||
|
## local UI import
|
||||||
|
import pages
|
||||||
|
import myvars
|
||||||
|
from icons import preload
|
||||||
|
|
||||||
|
def Init(main_screen):
|
||||||
|
pages.InitPoller()
|
||||||
|
|
||||||
|
preload.load_icons()
|
||||||
|
pages.InitListPage(main_screen)
|
||||||
|
pages.InitMusicLibPage(main_screen)
|
||||||
|
pages.InitSpectrumPage(main_screen)
|
||||||
|
|
||||||
|
def API(main_screen):
|
||||||
|
|
||||||
|
if main_screen !=None:
|
||||||
|
main_screen.PushCurPage()
|
||||||
|
main_screen.SetCurPage(myvars.PlayListPage)
|
||||||
|
main_screen.Draw()
|
||||||
|
main_screen.SwapAndShow()
|
||||||
|
|
||||||
|
|
||||||
BIN
Menu/GameShell/Music Player/icons/done.png
Normal file
|
After Width: | Height: | Size: 198 B |
21
Menu/GameShell/Music Player/icons/preload.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
from pygame.locals import *
|
||||||
|
from sys import exit
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from beeprint import pp
|
||||||
|
|
||||||
|
ICONS_PRELOAD={}
|
||||||
|
|
||||||
|
|
||||||
|
def load_icons():
|
||||||
|
basepath = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
|
files = os.listdir(basepath)
|
||||||
|
for i in files:
|
||||||
|
if os.path.isfile(basepath+"/"+i) and i.endswith(".png"):
|
||||||
|
keyname = i.split(".")[0]
|
||||||
|
ICONS_PRELOAD[keyname] = pygame.image.load(basepath+"/"+i).convert_alpha()
|
||||||
135
Menu/GameShell/Music Player/list_item.py
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
from libs.roundrects import aa_round_rect
|
||||||
|
|
||||||
|
## local UI import
|
||||||
|
from UI.constants import ICON_TYPES
|
||||||
|
from UI.page import Page
|
||||||
|
from UI.label import Label
|
||||||
|
from UI.fonts import fonts
|
||||||
|
from UI.icon_item import IconItem
|
||||||
|
from UI.util_funcs import midRect
|
||||||
|
|
||||||
|
# a item for List
|
||||||
|
# - - - - - - - - - - - --
|
||||||
|
# | Icon Text..... > |
|
||||||
|
# ------------------------
|
||||||
|
|
||||||
|
import myvars # icons_path
|
||||||
|
from icons import preload
|
||||||
|
|
||||||
|
class ListItemIcon(IconItem):
|
||||||
|
|
||||||
|
_CanvasHWND = None
|
||||||
|
_Parent = None
|
||||||
|
_Width = 18
|
||||||
|
_Height = 18
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
self._CanvasHWND.blit(self._ImgSurf,(self._PosX,self._PosY+(self._Parent._Height-self._Height)/2,self._Width,self._Height))
|
||||||
|
|
||||||
|
|
||||||
|
class ListItemLabel(Label):
|
||||||
|
|
||||||
|
_ActiveColor = pygame.Color(175,90,0)
|
||||||
|
_Active = False
|
||||||
|
def Draw(self):
|
||||||
|
|
||||||
|
self._FontObj.set_bold(self._Active)
|
||||||
|
|
||||||
|
"""
|
||||||
|
if self._Active == True:
|
||||||
|
my_text = self._FontObj.render( self._Text,True,self._ActiveColor)
|
||||||
|
else:
|
||||||
|
my_text = self._FontObj.render( self._Text,True,self._Color)
|
||||||
|
"""
|
||||||
|
|
||||||
|
my_text = self._FontObj.render( self._Text,True,self._Color)
|
||||||
|
self._CanvasHWND.blit(my_text,(self._PosX,self._PosY,self._Width,self._Height))
|
||||||
|
|
||||||
|
|
||||||
|
class ListItem(object):
|
||||||
|
_PosX = 0
|
||||||
|
_PosY = 0
|
||||||
|
_Width = 0
|
||||||
|
_Height = 30
|
||||||
|
|
||||||
|
_Labels = {}
|
||||||
|
_Icons = {}
|
||||||
|
_Fonts = {}
|
||||||
|
_MyType = ICON_TYPES["EXE"]
|
||||||
|
_LinkObj = None
|
||||||
|
_Path = ""
|
||||||
|
_Active = False
|
||||||
|
_Playing = False ## play or pause
|
||||||
|
_PlayingProcess = 0 # 0 - 100
|
||||||
|
_Parent = None
|
||||||
|
|
||||||
|
_ActiveBackgroundColor = pygame.Color(232,232,232)
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._Labels = {}
|
||||||
|
self._Icons = {}
|
||||||
|
self._Fonts = {}
|
||||||
|
|
||||||
|
|
||||||
|
def Init(self,text):
|
||||||
|
|
||||||
|
#self._Fonts["normal"] = fonts["veramono12"]
|
||||||
|
|
||||||
|
l = ListItemLabel()
|
||||||
|
l._PosX = 22
|
||||||
|
l.SetCanvasHWND(self._Parent._CanvasHWND)
|
||||||
|
|
||||||
|
if self._MyType == ICON_TYPES["DIR"]:
|
||||||
|
l.Init(text,self._Fonts["normal"])
|
||||||
|
self._Path = text
|
||||||
|
else:
|
||||||
|
l.Init(text,self._Fonts["normal"])
|
||||||
|
self._Path = text
|
||||||
|
|
||||||
|
|
||||||
|
self._Labels["Text"] = l
|
||||||
|
|
||||||
|
|
||||||
|
def NewCoord(self,x,y):
|
||||||
|
self._PosX = x
|
||||||
|
self._PosY = y
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
|
||||||
|
if self._MyType == ICON_TYPES["DIR"] and self._Path != "[..]":
|
||||||
|
self._Parent._Icons["sys"]._IconIndex = 0
|
||||||
|
self._Parent._Icons["sys"].NewCoord(self._PosX+12,self._PosY+ (self._Height - self._Parent._Icons["sys"]._Height)/2+self._Parent._Icons["sys"]._Height/2)
|
||||||
|
self._Parent._Icons["sys"].Draw()
|
||||||
|
|
||||||
|
if self._MyType == ICON_TYPES["FILE"]:
|
||||||
|
self._Parent._Icons["sys"]._IconIndex = 1
|
||||||
|
self._Parent._Icons["sys"].NewCoord(self._PosX+12,self._PosY+ (self._Height - self._Parent._Icons["sys"]._Height)/2+self._Parent._Icons["sys"]._Height/2)
|
||||||
|
self._Parent._Icons["sys"].Draw()
|
||||||
|
|
||||||
|
if self._Active == True:
|
||||||
|
self._Labels["Text"]._Active = True
|
||||||
|
else:
|
||||||
|
self._Labels["Text"]._Active = False
|
||||||
|
|
||||||
|
|
||||||
|
self._Labels["Text"]._PosY = self._PosY + (self._Height - self._Labels["Text"]._Height)/2
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
if self._Playing == True:
|
||||||
|
self._Labels["Text"]._Active =True
|
||||||
|
self._Labels["Text"].Draw()
|
||||||
|
#_rect = midRect(10,self._PosY+15,10,10,self._Parent._Width,self._Parent._Height)
|
||||||
|
#aa_round_rect(self._Parent._CanvasHWND,_rect,(0,0,0),3,0,(0,0,0))
|
||||||
|
#pygame.draw.polygon(self._Parent._CanvasHWND, (0,0,0), [[6, self._PosY+7], [11, self._PosY+14],[6, self._PosY+21]], 2)
|
||||||
|
|
||||||
|
if self._PlayingProcess > 0:
|
||||||
|
seek_posx = int(self._Width * self._PlayingProcess/100.0)
|
||||||
|
pygame.draw.line(self._Parent._CanvasHWND,(255,169,169),(self._PosX,self._PosY+self._Height-2),(self._PosX+seek_posx,self._PosY+self._Height-2),2)
|
||||||
|
|
||||||
|
else:
|
||||||
|
self._Labels["Text"].Draw()
|
||||||
|
|
||||||
260
Menu/GameShell/Music Player/mpd_spectrum_page.py
Normal file
@ -0,0 +1,260 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import time
|
||||||
|
import pygame
|
||||||
|
|
||||||
|
from numpy import fromstring,ceil,abs,log10,isnan,isinf,int16
|
||||||
|
from numpy import fft as Fft
|
||||||
|
|
||||||
|
import gobject
|
||||||
|
|
||||||
|
from beeprint import pp
|
||||||
|
|
||||||
|
## local UI import
|
||||||
|
from UI.constants import Width,Height
|
||||||
|
from UI.page import Page,PageSelector
|
||||||
|
from UI.label import Label
|
||||||
|
from UI.fonts import fonts
|
||||||
|
from UI.util_funcs import midRect
|
||||||
|
from UI.keys_def import CurKeys
|
||||||
|
|
||||||
|
from Queue import Queue, Empty
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
from list_item import ListItem
|
||||||
|
|
||||||
|
import myvars
|
||||||
|
|
||||||
|
class PIFI(object):
|
||||||
|
_MPD_FIFO = "/tmp/mpd.fifo"
|
||||||
|
_SAMPLE_SIZE = 256
|
||||||
|
_SAMPLING_RATE = 44100
|
||||||
|
_FIRST_SELECTED_BIN = 5
|
||||||
|
_NUMBER_OF_SELECTED_BINS = 10
|
||||||
|
_SCALE_WIDTH = Height/2 - 20
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
average = 0
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.sampleSize = self._SAMPLE_SIZE
|
||||||
|
self.samplingRate = self._SAMPLING_RATE
|
||||||
|
self.firstSelectedBin = self._FIRST_SELECTED_BIN
|
||||||
|
self.numberOfSelectedBins = self._NUMBER_OF_SELECTED_BINS
|
||||||
|
|
||||||
|
# Initialization : frequency bins
|
||||||
|
freq = Fft.fftfreq(self.sampleSize) * self.samplingRate
|
||||||
|
freqR = freq[:self.sampleSize/2]
|
||||||
|
self.bins = freqR[self.firstSelectedBin:self.firstSelectedBin+self.numberOfSelectedBins]
|
||||||
|
|
||||||
|
self.resetSmoothing()
|
||||||
|
|
||||||
|
def resetSmoothing(self):
|
||||||
|
self.count = 0
|
||||||
|
self.average = 0
|
||||||
|
|
||||||
|
def smoothOut(self, x):
|
||||||
|
self.count += 1
|
||||||
|
self.average = (self.average*self.count + x) / (self.count+1)
|
||||||
|
return self.average
|
||||||
|
|
||||||
|
def scaleList(self, _list):
|
||||||
|
for i,x in enumerate(_list):
|
||||||
|
if isnan(x) or isinf(x):
|
||||||
|
_list[i] = 0
|
||||||
|
|
||||||
|
# Compute a simple just-above 'moving average' of maximums
|
||||||
|
maximum = 1.1*self.smoothOut(max( _list ))
|
||||||
|
if maximum == 0:
|
||||||
|
scaleFactor = 0.0
|
||||||
|
else:
|
||||||
|
scaleFactor = self._SCALE_WIDTH/float(maximum)
|
||||||
|
|
||||||
|
# Compute the scaled list of values
|
||||||
|
scaledList = [int(x*scaleFactor) for x in _list ]
|
||||||
|
return scaledList
|
||||||
|
|
||||||
|
def computeSpectrum(self, fifoFile):
|
||||||
|
|
||||||
|
# Read PCM samples from fifo
|
||||||
|
rawSamples = fifoFile.read(self.sampleSize) # will return empty lines (non-blocking)
|
||||||
|
if len(rawSamples) == 0:
|
||||||
|
print("computeSpectrum read zero")
|
||||||
|
return [],[]
|
||||||
|
else:
|
||||||
|
pass
|
||||||
|
## print("computeSpectrum %d " % len(rawSamples))
|
||||||
|
|
||||||
|
pcm = fromstring(rawSamples, dtype=int16)
|
||||||
|
|
||||||
|
# Normalize [-1; +1]
|
||||||
|
pcm = pcm / (2.**15)
|
||||||
|
|
||||||
|
# Compute FFT
|
||||||
|
N = pcm.size
|
||||||
|
fft = Fft.fft(pcm)
|
||||||
|
uniquePts = ceil((N+1)/2.0)
|
||||||
|
fft = fft[0:int(uniquePts)]
|
||||||
|
|
||||||
|
# Compute amplitude spectrum
|
||||||
|
amplitudeSpectrum = abs(fft) / float(N)
|
||||||
|
|
||||||
|
# Compute power spectrum
|
||||||
|
p = amplitudeSpectrum**2
|
||||||
|
|
||||||
|
# Multiply by two to keep same energy
|
||||||
|
# See explanation:
|
||||||
|
# https://web.archive.org/web/20120615002031/http://www.mathworks.com/support/tech-notes/1700/1702.html
|
||||||
|
if N % 2 > 0:
|
||||||
|
# odd number of points
|
||||||
|
# odd nfft excludes Nyquist point
|
||||||
|
p[1:len(p)] = p[1:len(p)] * 2
|
||||||
|
else:
|
||||||
|
# even number of points
|
||||||
|
p[1:len(p) -1] = p[1:len(p) - 1] * 2
|
||||||
|
|
||||||
|
# Power in logarithmic scale (dB)
|
||||||
|
logPower = 10*log10(p)
|
||||||
|
|
||||||
|
# Compute RMS from power
|
||||||
|
#rms = numpy.sqrt(numpy.sum(p))
|
||||||
|
#print "RMS(power):", rms
|
||||||
|
|
||||||
|
# Select a significant range in the spectrum
|
||||||
|
spectrum = logPower[self.firstSelectedBin:self.firstSelectedBin+self.numberOfSelectedBins]
|
||||||
|
|
||||||
|
# Scale the spectrum
|
||||||
|
scaledSpectrum = self.scaleList(spectrum)
|
||||||
|
|
||||||
|
return (self.bins, scaledSpectrum)
|
||||||
|
|
||||||
|
|
||||||
|
class MPDSpectrumPage(Page):
|
||||||
|
|
||||||
|
_Icons = {}
|
||||||
|
_Selector=None
|
||||||
|
_FootMsg = ["Nav","","","Back","Pause"]
|
||||||
|
_MyList = []
|
||||||
|
_ListFont = fonts["veramono12"]
|
||||||
|
|
||||||
|
_PIFI = None
|
||||||
|
_FiFo = None
|
||||||
|
_Color = pygame.Color(126,206,244)
|
||||||
|
_GobjectIntervalId = -1
|
||||||
|
_Queue = None
|
||||||
|
_KeepReading = True
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
Page.__init__(self)
|
||||||
|
self._Icons = {}
|
||||||
|
self._CanvasHWND = None
|
||||||
|
self._MyList = []
|
||||||
|
self._PIFI = PIFI()
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
self.Start()
|
||||||
|
|
||||||
|
self._GobjectIntervalId = gobject.timeout_add(50,self.Playing)
|
||||||
|
|
||||||
|
def Start(self):
|
||||||
|
|
||||||
|
try:
|
||||||
|
self._FIFO = open(self._PIFI._MPD_FIFO)
|
||||||
|
q = Queue()
|
||||||
|
self._Queue = q
|
||||||
|
|
||||||
|
t = Thread(target=self.GetSpectrum)
|
||||||
|
t.daemon = True # thread dies with the program
|
||||||
|
t.start()
|
||||||
|
|
||||||
|
except IOError:
|
||||||
|
print("open %s failed"%self._PIFI._MPD_FIFO)
|
||||||
|
self._FIFO = None
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def GetSpectrum(self):
|
||||||
|
if self._FIFO == None:
|
||||||
|
print("self._FIFO none")
|
||||||
|
return
|
||||||
|
|
||||||
|
(bins,scaledSpectrum) = self._PIFI.computeSpectrum(self._FIFO)
|
||||||
|
self._Queue.put( scaledSpectrum )
|
||||||
|
|
||||||
|
self._KeepReading = False
|
||||||
|
|
||||||
|
return ## Thread ends
|
||||||
|
|
||||||
|
def Playing(self):
|
||||||
|
if self._Screen.CurPage() == self:
|
||||||
|
if self._KeepReading == False:
|
||||||
|
self._KeepReading = True
|
||||||
|
|
||||||
|
t = Thread(target=self.GetSpectrum)
|
||||||
|
t.daemon=True
|
||||||
|
t.start()
|
||||||
|
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def OnLoadCb(self):
|
||||||
|
|
||||||
|
if self._Queue != None:
|
||||||
|
with self._Queue.mutex:
|
||||||
|
self._Queue.queue.clear()
|
||||||
|
|
||||||
|
try:
|
||||||
|
if self._GobjectIntervalId != -1:
|
||||||
|
gobject.source_remove(self._GobjectIntervalId)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
self._GobjectIntervalId = gobject.timeout_add(50,self.Playing)
|
||||||
|
|
||||||
|
|
||||||
|
def KeyDown(self,event):
|
||||||
|
if event.key == CurKeys["Menu"] or event.key == CurKeys["A"]:
|
||||||
|
self.ReturnToUpLevelPage()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if event.key == CurKeys["Start"]:
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if event.key == CurKeys["Enter"]:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
self.ClearCanvas()
|
||||||
|
|
||||||
|
bw = 10
|
||||||
|
spects = None
|
||||||
|
try:
|
||||||
|
spects = self._Queue.get_nowait()
|
||||||
|
# print("get_nowait: " , spects)
|
||||||
|
except Empty:
|
||||||
|
return
|
||||||
|
else: # got line
|
||||||
|
if len(spects) == 0:
|
||||||
|
return
|
||||||
|
w = self._Width / len(spects)
|
||||||
|
left_margin = (w-bw)/2
|
||||||
|
for i,v in enumerate(spects):
|
||||||
|
pygame.draw.rect(self._CanvasHWND,self._Color,(i*w+left_margin,self._Height-v,bw,v),0)
|
||||||
|
|
||||||
343
Menu/GameShell/Music Player/music_lib_list_page.py
Normal file
@ -0,0 +1,343 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import os
|
||||||
|
import pygame
|
||||||
|
|
||||||
|
from libs.roundrects import aa_round_rect
|
||||||
|
|
||||||
|
## local UI import
|
||||||
|
from UI.constants import Width,Height,ICON_TYPES
|
||||||
|
from UI.page import Page,PageSelector
|
||||||
|
from UI.label import Label
|
||||||
|
from UI.fonts import fonts
|
||||||
|
from UI.icon_item import IconItem
|
||||||
|
from UI.util_funcs import midRect
|
||||||
|
from UI.keys_def import CurKeys
|
||||||
|
from UI.multi_icon_item import MultiIconItem
|
||||||
|
from UI.icon_pool import MyIconPool
|
||||||
|
from UI.scroller import ListScroller
|
||||||
|
|
||||||
|
from list_item import ListItem
|
||||||
|
|
||||||
|
|
||||||
|
import myvars
|
||||||
|
|
||||||
|
|
||||||
|
class MusicLibStack:
|
||||||
|
def __init__(self):
|
||||||
|
self.stack = list()
|
||||||
|
|
||||||
|
def Push(self,data):
|
||||||
|
if data not in self.stack:
|
||||||
|
self.stack.append(data)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def Pop(self):
|
||||||
|
if len(self.stack)<=0:
|
||||||
|
return None,False
|
||||||
|
return self.stack.pop(),True
|
||||||
|
|
||||||
|
def Last(self):
|
||||||
|
idx = len(self.stack) -1
|
||||||
|
if idx < 0:
|
||||||
|
return "/"
|
||||||
|
else:
|
||||||
|
return self.stack[ idx ]
|
||||||
|
|
||||||
|
def Length(self):
|
||||||
|
return len(self.stack)
|
||||||
|
|
||||||
|
class ListPageSelector(PageSelector):
|
||||||
|
_BackgroundColor = pygame.Color(131,199,219)
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._PosX = 0
|
||||||
|
self._PosY = 0
|
||||||
|
self._Height = 0
|
||||||
|
self._Width = Width
|
||||||
|
|
||||||
|
def AnimateDraw(self,x2,y2):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
idx = self._Parent._PsIndex
|
||||||
|
|
||||||
|
if idx < len(self._Parent._MyList):
|
||||||
|
x = self._Parent._MyList[idx]._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 MusicLibListPage(Page):
|
||||||
|
|
||||||
|
_Icons = {}
|
||||||
|
_Selector=None
|
||||||
|
_FootMsg = ["Nav","Scan","","Back","Add to Playlist"]
|
||||||
|
_MyList = []
|
||||||
|
_SwapMyList = []
|
||||||
|
_ListFont = fonts["notosanscjk15"]
|
||||||
|
_MyStack = None
|
||||||
|
|
||||||
|
_Scroller = None
|
||||||
|
|
||||||
|
_BGpng = None
|
||||||
|
_BGwidth = 56
|
||||||
|
_BGheight = 70
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
Page.__init__(self)
|
||||||
|
self._Icons = {}
|
||||||
|
self._CanvasHWND = None
|
||||||
|
self._MyList = []
|
||||||
|
self._SwapMyList = []
|
||||||
|
self._MyStack = MusicLibStack()
|
||||||
|
|
||||||
|
def SyncList(self,path):
|
||||||
|
if myvars.Poller == None:
|
||||||
|
return
|
||||||
|
|
||||||
|
alist = myvars.Poller.listfiles(path)
|
||||||
|
if alist == False:
|
||||||
|
print("listfiles return false")
|
||||||
|
return
|
||||||
|
|
||||||
|
self._MyList = []
|
||||||
|
self._SwapMyList = []
|
||||||
|
|
||||||
|
start_x = 0
|
||||||
|
start_y = 0
|
||||||
|
hasparent = 0
|
||||||
|
if self._MyStack.Length() > 0:
|
||||||
|
hasparent = 1
|
||||||
|
li = ListItem()
|
||||||
|
li._Parent = self
|
||||||
|
li._PosX = start_x
|
||||||
|
li._PosY = start_y
|
||||||
|
li._Width = Width
|
||||||
|
li._Fonts["normal"] = self._ListFont
|
||||||
|
li._MyType = ICON_TYPES["DIR"]
|
||||||
|
li._Parent = self
|
||||||
|
li.Init("[..]")
|
||||||
|
self._MyList.append(li)
|
||||||
|
|
||||||
|
for i,v in enumerate(sorted(alist)):
|
||||||
|
li = ListItem()
|
||||||
|
li._Parent = self
|
||||||
|
li._PosX = start_x
|
||||||
|
li._PosY = start_y + (i+hasparent)*ListItem._Height
|
||||||
|
li._Width = Width
|
||||||
|
li._Fonts["normal"] = self._ListFont
|
||||||
|
li._MyType = ICON_TYPES["FILE"]
|
||||||
|
li._Parent = self
|
||||||
|
|
||||||
|
if "directory" in v:
|
||||||
|
li._MyType = ICON_TYPES["DIR"]
|
||||||
|
dir_base_name = os.path.basename(v["directory"])
|
||||||
|
li.Init( dir_base_name )
|
||||||
|
li._Path = v["directory"]
|
||||||
|
elif "file" in v:
|
||||||
|
bname = os.path.basename(v["file"])
|
||||||
|
li.Init( bname )
|
||||||
|
li._Path = v["file"]
|
||||||
|
|
||||||
|
else:
|
||||||
|
li.Init("NoName")
|
||||||
|
|
||||||
|
self._MyList.append(li)
|
||||||
|
|
||||||
|
for i in self._MyList:
|
||||||
|
self._SwapMyList.append(i)
|
||||||
|
|
||||||
|
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 = ListPageSelector()
|
||||||
|
ps._Parent = self
|
||||||
|
self._Ps = ps
|
||||||
|
self._PsIndex = 0
|
||||||
|
|
||||||
|
self.SyncList("/")
|
||||||
|
|
||||||
|
icon_for_list = MultiIconItem()
|
||||||
|
icon_for_list._ImgSurf = MyIconPool._Icons["sys"]
|
||||||
|
icon_for_list._MyType = ICON_TYPES["STAT"]
|
||||||
|
icon_for_list._Parent = self
|
||||||
|
|
||||||
|
icon_for_list.Adjust(0,0,18,18,0)
|
||||||
|
self._Icons["sys"] = icon_for_list
|
||||||
|
|
||||||
|
|
||||||
|
self._BGpng = IconItem()
|
||||||
|
self._BGpng._ImgSurf = MyIconPool._Icons["empty"]
|
||||||
|
self._BGpng._MyType = ICON_TYPES["STAT"]
|
||||||
|
self._BGpng._Parent = self
|
||||||
|
self._BGpng.AddLabel("Please upload data over Wi-Fi", fonts["varela22"])
|
||||||
|
self._BGpng.SetLableColor(pygame.Color(204,204,204))
|
||||||
|
self._BGpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
|
||||||
|
|
||||||
|
|
||||||
|
self._Scroller = ListScroller()
|
||||||
|
self._Scroller._Parent = self
|
||||||
|
self._Scroller._PosX = self._Width - 10
|
||||||
|
self._Scroller._PosY = 2
|
||||||
|
self._Scroller.Init()
|
||||||
|
|
||||||
|
|
||||||
|
def ScrollUp(self,Step=1):
|
||||||
|
if len(self._MyList) == 0:
|
||||||
|
return
|
||||||
|
tmp = self._PsIndex
|
||||||
|
self._PsIndex -= Step
|
||||||
|
|
||||||
|
if self._PsIndex < 0:
|
||||||
|
self._PsIndex = 0
|
||||||
|
dy = tmp-self._PsIndex
|
||||||
|
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*dy
|
||||||
|
|
||||||
|
|
||||||
|
def ScrollDown(self,Step=1):
|
||||||
|
if len(self._MyList) == 0:
|
||||||
|
return
|
||||||
|
tmp = self._PsIndex
|
||||||
|
self._PsIndex +=Step
|
||||||
|
if self._PsIndex >= len(self._MyList):
|
||||||
|
self._PsIndex = len(self._MyList) -1
|
||||||
|
dy = self._PsIndex - tmp
|
||||||
|
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*dy
|
||||||
|
|
||||||
|
def Click(self):
|
||||||
|
if len(self._MyList) == 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
cur_li = self._MyList[self._PsIndex]
|
||||||
|
|
||||||
|
if cur_li._MyType == ICON_TYPES["DIR"]:
|
||||||
|
if cur_li._Path == "[..]":
|
||||||
|
self._MyStack.Pop()
|
||||||
|
self.SyncList( self._MyStack.Last() )
|
||||||
|
self._PsIndex = 0
|
||||||
|
else:
|
||||||
|
self._MyStack.Push( self._MyList[self._PsIndex]._Path )
|
||||||
|
self.SyncList( self._MyStack.Last() )
|
||||||
|
self._PsIndex = 0
|
||||||
|
|
||||||
|
if cur_li._MyType == ICON_TYPES["FILE"]: ## add to playlist only
|
||||||
|
myvars.Poller.addfile(cur_li._Path)
|
||||||
|
myvars.PlayListPage.SyncList()
|
||||||
|
print("add" , cur_li._Path)
|
||||||
|
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
def Rescan(self):
|
||||||
|
self.SyncList("/")
|
||||||
|
self._PsIndex = 0
|
||||||
|
|
||||||
|
def KeyDown(self,event):
|
||||||
|
|
||||||
|
if event.key == CurKeys["Menu"] or event.key == CurKeys["Left"]:
|
||||||
|
|
||||||
|
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 event.key == CurKeys["Right"]:
|
||||||
|
self.ScrollDown(Step=5)
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if event.key == CurKeys["Left"]:
|
||||||
|
self.ScrollUp(Step=5)
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
"""
|
||||||
|
|
||||||
|
if event.key == CurKeys["X"]:
|
||||||
|
self.Rescan()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if event.key == CurKeys["Enter"]:
|
||||||
|
self.Click()
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
self.ClearCanvas()
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
start_x = 0
|
||||||
|
start_y = 0
|
||||||
|
counter = 0
|
||||||
|
|
||||||
|
self._MyList = []
|
||||||
|
|
||||||
|
for i,v in enumerate(self._SwapMyList):
|
||||||
|
if myvars.PlayListPage.InPlayList(v._Path):
|
||||||
|
v._Active = True
|
||||||
|
else:
|
||||||
|
v._Active = False
|
||||||
|
|
||||||
|
if v._Active == False:
|
||||||
|
v.NewCoord(start_x, start_y+counter* ListItem._Height)
|
||||||
|
counter+=1
|
||||||
|
self._MyList.append(v)
|
||||||
|
"""
|
||||||
|
|
||||||
|
if len(self._MyList) == 0:
|
||||||
|
self._BGpng.NewCoord(self._Width/2,self._Height/2)
|
||||||
|
self._BGpng.Draw()
|
||||||
|
return
|
||||||
|
|
||||||
|
else:
|
||||||
|
if len(self._MyList) * ListItem._Height > self._Height:
|
||||||
|
self._Ps._Width = self._Width - 11
|
||||||
|
|
||||||
|
self._Ps.Draw()
|
||||||
|
for i in self._MyList:
|
||||||
|
if myvars.PlayListPage.InPlayList(i._Path):
|
||||||
|
i._Active = True
|
||||||
|
else:
|
||||||
|
i._Active = False
|
||||||
|
|
||||||
|
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:
|
||||||
|
if myvars.PlayListPage.InPlayList(i._Path):
|
||||||
|
i._Active = True
|
||||||
|
else:
|
||||||
|
i._Active = False
|
||||||
|
|
||||||
|
i.Draw()
|
||||||
8
Menu/GameShell/Music Player/myvars.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
|
||||||
|
Poller = None # MPD Poller
|
||||||
|
PlayListPage = None
|
||||||
|
MusicLibListPage = None
|
||||||
|
|
||||||
|
SpectrumPage = None
|
||||||
|
|
||||||
38
Menu/GameShell/Music Player/pages.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from libs.MPD import poller
|
||||||
|
|
||||||
|
from play_list_page import PlayListPage
|
||||||
|
from music_lib_list_page import MusicLibListPage
|
||||||
|
from mpd_spectrum_page import MPDSpectrumPage
|
||||||
|
import myvars
|
||||||
|
|
||||||
|
from config import MPD_socket
|
||||||
|
|
||||||
|
def InitPoller():
|
||||||
|
try:
|
||||||
|
myvars.Poller = poller.MPDPoller(host=MPD_socket)
|
||||||
|
myvars.Poller.connect()
|
||||||
|
except:
|
||||||
|
myvars.Poller = None
|
||||||
|
|
||||||
|
|
||||||
|
def InitMusicLibPage(main_screen):
|
||||||
|
myvars.MusicLibListPage = MusicLibListPage()
|
||||||
|
myvars.MusicLibListPage._Screen = main_screen
|
||||||
|
myvars.MusicLibListPage._Name = "Music Library"
|
||||||
|
myvars.MusicLibListPage.Init()
|
||||||
|
|
||||||
|
def InitListPage(main_screen):
|
||||||
|
|
||||||
|
myvars.PlayListPage = PlayListPage()
|
||||||
|
|
||||||
|
myvars.PlayListPage._Screen = main_screen
|
||||||
|
myvars.PlayListPage._Name = "Music List"
|
||||||
|
myvars.PlayListPage.Init()
|
||||||
|
|
||||||
|
def InitSpectrumPage(main_screen):
|
||||||
|
myvars.SpectrumPage = MPDSpectrumPage()
|
||||||
|
myvars.SpectrumPage._Screen = main_screen
|
||||||
|
myvars.SpectrumPage._Name = "Spectrum"
|
||||||
|
myvars.SpectrumPage.Init()
|
||||||
279
Menu/GameShell/Music Player/play_list_page.py
Normal file
@ -0,0 +1,279 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import os
|
||||||
|
import pygame
|
||||||
|
import gobject
|
||||||
|
|
||||||
|
from libs.roundrects import aa_round_rect
|
||||||
|
|
||||||
|
## 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.fonts import fonts
|
||||||
|
from UI.util_funcs import midRect
|
||||||
|
from UI.keys_def import CurKeys
|
||||||
|
from UI.icon_pool import MyIconPool
|
||||||
|
|
||||||
|
from UI.scroller import ListScroller
|
||||||
|
|
||||||
|
from list_item import ListItem
|
||||||
|
|
||||||
|
import myvars
|
||||||
|
|
||||||
|
class ListPageSelector(PageSelector):
|
||||||
|
_BackgroundColor = pygame.Color(131,199,219)
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._PosX = 0
|
||||||
|
self._PosY = 0
|
||||||
|
self._Height = 0
|
||||||
|
self._Width = Width
|
||||||
|
|
||||||
|
def AnimateDraw(self,x2,y2):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
idx = self._Parent._PsIndex
|
||||||
|
if idx > (len(self._Parent._MyList)-1):
|
||||||
|
idx = len(self._Parent._MyList)
|
||||||
|
if idx > 0:
|
||||||
|
idx -=1
|
||||||
|
elif idx == 0: #Nothing
|
||||||
|
return
|
||||||
|
|
||||||
|
x = self._Parent._MyList[idx]._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 PlayListPage(Page):
|
||||||
|
|
||||||
|
_Icons = {}
|
||||||
|
_Selector=None
|
||||||
|
_FootMsg = ["Nav","","Remove","Back","Play/Pause"]
|
||||||
|
_MyList = []
|
||||||
|
_ListFont = fonts["notosanscjk15"]
|
||||||
|
|
||||||
|
_Scroller = None
|
||||||
|
|
||||||
|
_BGpng = None
|
||||||
|
_BGwidth = 75
|
||||||
|
_BGheight = 70
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._Icons = {}
|
||||||
|
Page.__init__(self)
|
||||||
|
self._CanvasHWND = None
|
||||||
|
self._MyList = []
|
||||||
|
|
||||||
|
def SyncList(self):
|
||||||
|
self._MyList = []
|
||||||
|
start_x = 0
|
||||||
|
start_y = 0
|
||||||
|
if myvars.Poller == None:
|
||||||
|
return
|
||||||
|
|
||||||
|
play_list = myvars.Poller.playlist()
|
||||||
|
for i,v in enumerate(play_list):
|
||||||
|
li = ListItem()
|
||||||
|
li._Parent = self
|
||||||
|
li._PosX = start_x
|
||||||
|
li._PosY = start_y + i*ListItem._Height
|
||||||
|
li._Width = Width
|
||||||
|
li._Fonts["normal"] = self._ListFont
|
||||||
|
|
||||||
|
if "title" in v:
|
||||||
|
li.Init( v["title"])
|
||||||
|
if "file" in v:
|
||||||
|
li._Path = v["file"]
|
||||||
|
|
||||||
|
elif "file" in v:
|
||||||
|
li.Init(os.path.basename(v["file"]))
|
||||||
|
li._Path = v["file"]
|
||||||
|
else:
|
||||||
|
li.Init("NoName")
|
||||||
|
|
||||||
|
li._Labels["Text"]._PosX = 7
|
||||||
|
self._MyList.append(li)
|
||||||
|
|
||||||
|
|
||||||
|
self.SyncPlaying()
|
||||||
|
|
||||||
|
def GObjectInterval(self): ## 250 ms
|
||||||
|
if self._Screen.CurPage() == self:
|
||||||
|
self.SyncPlaying()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def SyncPlaying(self):
|
||||||
|
if myvars.Poller == None:
|
||||||
|
return
|
||||||
|
|
||||||
|
current_song = myvars.Poller.poll()
|
||||||
|
|
||||||
|
for i ,v in enumerate(self._MyList):
|
||||||
|
self._MyList[i]._Playing = False
|
||||||
|
self._MyList[i]._PlayingProcess = 0
|
||||||
|
|
||||||
|
if current_song != None:
|
||||||
|
if "song" in current_song:
|
||||||
|
posid = int(current_song["song"])
|
||||||
|
if posid < len(self._MyList): # out of index
|
||||||
|
if "state" in current_song:
|
||||||
|
if current_song["state"] == "stop":
|
||||||
|
self._MyList[posid]._Playing = False
|
||||||
|
else:
|
||||||
|
self._MyList[posid]._Playing = True
|
||||||
|
if "time" in current_song:
|
||||||
|
times_ = current_song["time"].split(":")
|
||||||
|
if len(times_)> 1:
|
||||||
|
cur = float(times_[0])
|
||||||
|
end = float(times_[1])
|
||||||
|
pros = int((cur/end)*100.0)
|
||||||
|
self._MyList[posid]._PlayingProcess = pros
|
||||||
|
|
||||||
|
|
||||||
|
def InPlayList(self,path):
|
||||||
|
for i,v in enumerate(self._MyList):
|
||||||
|
if v._Path == path:
|
||||||
|
return True
|
||||||
|
|
||||||
|
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 = ListPageSelector()
|
||||||
|
ps._Parent = self
|
||||||
|
self._Ps = ps
|
||||||
|
self._PsIndex = 0
|
||||||
|
|
||||||
|
self.SyncList()
|
||||||
|
gobject.timeout_add(850,self.GObjectInterval)
|
||||||
|
|
||||||
|
self._BGpng = IconItem()
|
||||||
|
self._BGpng._ImgSurf = MyIconPool._Icons["heart"]
|
||||||
|
self._BGpng._MyType = ICON_TYPES["STAT"]
|
||||||
|
self._BGpng._Parent = self
|
||||||
|
self._BGpng.AddLabel("my favourites", fonts["varela18"])
|
||||||
|
self._BGpng.SetLableColor(pygame.Color(204,204,204))
|
||||||
|
self._BGpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
|
||||||
|
|
||||||
|
self._Scroller = ListScroller()
|
||||||
|
self._Scroller._Parent = self
|
||||||
|
self._Scroller._PosX = self._Width - 10
|
||||||
|
self._Scroller._PosY = 2
|
||||||
|
self._Scroller.Init()
|
||||||
|
|
||||||
|
|
||||||
|
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):
|
||||||
|
if len(self._MyList) == 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
cur_li = self._MyList[self._PsIndex]
|
||||||
|
play_pos_id = myvars.Poller.play(self._PsIndex)
|
||||||
|
|
||||||
|
self.SyncPlaying()
|
||||||
|
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
def OnReturnBackCb(self):
|
||||||
|
self.SyncList()
|
||||||
|
|
||||||
|
def KeyDown(self,event):
|
||||||
|
if event.key == CurKeys["A"] or event.key == CurKeys["Menu"]:
|
||||||
|
if myvars.Poller != None:
|
||||||
|
myvars.Poller.stop()
|
||||||
|
|
||||||
|
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 event.key == CurKeys["Right"]:#add
|
||||||
|
self._Screen.PushCurPage()
|
||||||
|
self._Screen.SetCurPage(myvars.MusicLibListPage)
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if event.key == CurKeys["Y"]:# del selected songs
|
||||||
|
myvars.Poller.delete(self._PsIndex)
|
||||||
|
self.SyncList()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if event.key == CurKeys["Enter"]:
|
||||||
|
self.Click()
|
||||||
|
|
||||||
|
if event.key == CurKeys["Start"]: # start spectrum
|
||||||
|
self._Screen.PushPage(myvars.SpectrumPage)
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
self.ClearCanvas()
|
||||||
|
|
||||||
|
if len(self._MyList) == 0:
|
||||||
|
self._BGpng.NewCoord(self._Width/2,self._Height/2)
|
||||||
|
self._BGpng.Draw()
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
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()
|
||||||
|
|
||||||
BIN
Menu/GameShell/PowerOFF.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
89
Menu/GameShell/PowerOFF/__init__.py
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import pygame
|
||||||
|
|
||||||
|
#UI lib
|
||||||
|
from UI.constants import RUNSYS
|
||||||
|
from UI.keys_def import CurKeys
|
||||||
|
from UI.confirm_page import ConfirmPage
|
||||||
|
|
||||||
|
import config
|
||||||
|
|
||||||
|
class PowerOffConfirmPage(ConfirmPage):
|
||||||
|
|
||||||
|
_ConfirmText = "Confirm Power OFF?"
|
||||||
|
|
||||||
|
|
||||||
|
def CheckBattery(self):
|
||||||
|
try:
|
||||||
|
f = open(config.Battery)
|
||||||
|
except IOError:
|
||||||
|
print( "PowerOFF open %s failed" % config.Battery)
|
||||||
|
return 0
|
||||||
|
else:
|
||||||
|
with f:
|
||||||
|
bat_uevent = {}
|
||||||
|
content = f.readlines()
|
||||||
|
content = [x.strip() for x in content]
|
||||||
|
for i in content:
|
||||||
|
pis = i.split("=")
|
||||||
|
if len(pis) > 1:
|
||||||
|
bat_uevent[pis[0]] = pis[1]
|
||||||
|
|
||||||
|
if "POWER_SUPPLY_CAPACITY" in bat_uevent:
|
||||||
|
cur_cap = int(bat_uevent["POWER_SUPPLY_CAPACITY"])
|
||||||
|
else:
|
||||||
|
cur_cap = 0
|
||||||
|
|
||||||
|
return cur_cap
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def KeyDown(self,event):
|
||||||
|
|
||||||
|
if event.key == CurKeys["Menu"] or event.key == CurKeys["A"]:
|
||||||
|
|
||||||
|
self.ReturnToUpLevelPage()
|
||||||
|
self._Screen.Draw()
|
||||||
|
self._Screen.SwapAndShow()
|
||||||
|
|
||||||
|
if event.key == CurKeys["B"]:
|
||||||
|
if self.CheckBattery() < 20:
|
||||||
|
cmdpath = "feh --bg-center gameshell/wallpaper/gameover.png;"
|
||||||
|
else:
|
||||||
|
cmdpath = "feh --bg-center gameshell/wallpaper/seeyou.png;"
|
||||||
|
|
||||||
|
cmdpath += "sleep 3;"
|
||||||
|
|
||||||
|
#cmdpath += "echo 'halt -p' > /tmp/halt_cmd"
|
||||||
|
|
||||||
|
cmdpath += "sudo halt -p"
|
||||||
|
pygame.event.post( pygame.event.Event(RUNSYS, message=cmdpath))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class APIOBJ(object):
|
||||||
|
|
||||||
|
_StoragePage = None
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
def Init(self,main_screen):
|
||||||
|
self._Page = PowerOffConfirmPage()
|
||||||
|
|
||||||
|
self._Page._Screen = main_screen
|
||||||
|
self._Page._Name ="Power OFF"
|
||||||
|
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)
|
||||||
|
|
||||||
BIN
Menu/GameShell/Retro Games.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
Menu/GameShell/RetroArch.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
1
Menu/GameShell/RetroArch.sh
Normal file
@ -0,0 +1 @@
|
|||||||
|
retroarch
|
||||||
BIN
Menu/GameShell/Settings.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
Menu/GameShell/Sleep.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
Menu/GameShell/TinyCloud.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
220
Menu/GameShell/TinyCloud/__init__.py
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import pygame
|
||||||
|
import validators
|
||||||
|
|
||||||
|
from UI.constants import Width,Height,ICON_TYPES
|
||||||
|
from UI.simple_name_space import SimpleNamespace
|
||||||
|
from UI.page import Page
|
||||||
|
from UI.label import Label
|
||||||
|
from UI.fonts import fonts
|
||||||
|
from UI.icon_item import IconItem
|
||||||
|
from UI.icon_pool import MyIconPool
|
||||||
|
|
||||||
|
from libs.DBUS import is_wifi_connected_now,get_wifi_ip
|
||||||
|
|
||||||
|
class TinyCloudPage(Page):
|
||||||
|
_FootMsg = ["Nav.","","","Back",""]
|
||||||
|
_MyList = []
|
||||||
|
|
||||||
|
_ListFontObj = fonts["varela13"]
|
||||||
|
|
||||||
|
_AList = {}
|
||||||
|
_Labels = {}
|
||||||
|
|
||||||
|
_Coords = {}
|
||||||
|
|
||||||
|
_URLColor = pygame.Color(51,166,255)
|
||||||
|
_TextColor = pygame.Color(83,83,83)
|
||||||
|
_Scrolled = 0
|
||||||
|
|
||||||
|
_PngSize = {}
|
||||||
|
|
||||||
|
_DrawOnce = False
|
||||||
|
_Scroller = None
|
||||||
|
_Scrolled = 0
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
Page.__init__(self)
|
||||||
|
self._Icons = {}
|
||||||
|
|
||||||
|
def OnLoadCb(self):
|
||||||
|
self._Scrolled = 0
|
||||||
|
self._PosY = 0
|
||||||
|
self._DrawOnce = False
|
||||||
|
|
||||||
|
def SetCoords(self):
|
||||||
|
|
||||||
|
self._Coords["forID"] = SimpleNamespace()
|
||||||
|
self._Coords["forID"].x = 15
|
||||||
|
self._Coords["forID"].y = 11
|
||||||
|
|
||||||
|
self._Coords["forKey"] = SimpleNamespace()
|
||||||
|
self._Coords["forKey"].x = 71
|
||||||
|
self._Coords["forKey"].y = self._Coords["forID"].y
|
||||||
|
|
||||||
|
self._Coords["key_and_pass"] = SimpleNamespace()
|
||||||
|
self._Coords["key_and_pass"].x = 36 # 141
|
||||||
|
self._Coords["key_and_pass"].y = self._Coords["forID"].y
|
||||||
|
|
||||||
|
self._Coords["forssh"] = SimpleNamespace()
|
||||||
|
self._Coords["forssh"].x = self._Coords["forID"].x
|
||||||
|
self._Coords["forssh"].y = 47
|
||||||
|
|
||||||
|
self._Coords["ssh_addr"] = SimpleNamespace()
|
||||||
|
self._Coords["ssh_addr"].x = self._Coords["forID"].x
|
||||||
|
self._Coords["ssh_addr"].y = 65
|
||||||
|
|
||||||
|
self._Coords["forwin"] = SimpleNamespace()
|
||||||
|
self._Coords["forwin"].x = self._Coords["forID"].x
|
||||||
|
self._Coords["forwin"].y = 101
|
||||||
|
|
||||||
|
self._Coords["samba_games"] = SimpleNamespace()
|
||||||
|
self._Coords["samba_games"].x = self._Coords["forID"].x
|
||||||
|
self._Coords["samba_games"].y = 118
|
||||||
|
|
||||||
|
self._Coords["samba_music"] = SimpleNamespace()
|
||||||
|
self._Coords["samba_music"].x = self._Coords["samba_games"].x
|
||||||
|
self._Coords["samba_music"].y = 136
|
||||||
|
|
||||||
|
self._Coords["for_airplay"] = SimpleNamespace()
|
||||||
|
self._Coords["for_airplay"].x = self._Coords["forID"].x
|
||||||
|
self._Coords["for_airplay"].y = 173
|
||||||
|
|
||||||
|
self._Coords["airplay_name"] = SimpleNamespace()
|
||||||
|
self._Coords["airplay_name"].x = 68
|
||||||
|
self._Coords["airplay_name"].y = self._Coords["for_airplay"].y
|
||||||
|
|
||||||
|
|
||||||
|
self._Coords["bg"] = SimpleNamespace()
|
||||||
|
self._Coords["bg"].x = self._Width/2
|
||||||
|
self._Coords["bg"].y = self._Height/2
|
||||||
|
|
||||||
|
self._Coords["online"] = SimpleNamespace()
|
||||||
|
self._Coords["online"].x = 266
|
||||||
|
self._Coords["online"].y = 99
|
||||||
|
|
||||||
|
def SetLabels(self):
|
||||||
|
if is_wifi_connected_now():
|
||||||
|
self._IP = get_wifi_ip()
|
||||||
|
print("TinyCould : %s" % self._IP)
|
||||||
|
try:
|
||||||
|
if validators.ip_address.ipv4(self._IP) == False:
|
||||||
|
self._IP = "xxx.xxx.xxx.xxx"
|
||||||
|
except:
|
||||||
|
print("ip error %s " % self._IP)
|
||||||
|
self._IP = "xxx.xxx.xxx.xxx"
|
||||||
|
|
||||||
|
else:
|
||||||
|
self._IP = "xxx.xxx.xxx.xxx"
|
||||||
|
|
||||||
|
labels = \
|
||||||
|
[["forssh","For ssh and scp:",self._ListFontObj,self._TextColor],
|
||||||
|
["ssh_addr","ssh cpi@%s" % self._IP, self._ListFontObj,self._URLColor],
|
||||||
|
["forwin", "For Windows network:", self._ListFontObj, self._TextColor],
|
||||||
|
["samba_games", "\\\\%s\games" % self._IP, self._ListFontObj,self._URLColor],
|
||||||
|
["samba_music", "\\\\%s\music" % self._IP, self._ListFontObj,self._URLColor],
|
||||||
|
["forID", "ID:", self._ListFontObj, self._TextColor],
|
||||||
|
["forKey", "Key:", self._ListFontObj, self._TextColor],
|
||||||
|
["key_and_pass", "cpi", self._ListFontObj, self._URLColor],
|
||||||
|
["for_airplay", "Airplay:", self._ListFontObj, self._TextColor],
|
||||||
|
["airplay_name","clockworkpi", self._ListFontObj, self._URLColor]]
|
||||||
|
|
||||||
|
for i in labels:
|
||||||
|
l = Label()
|
||||||
|
l.SetCanvasHWND(self._CanvasHWND)
|
||||||
|
l.Init(i[1],i[2])
|
||||||
|
l.SetColor(i[3])
|
||||||
|
self._Labels[ i[0] ] = l
|
||||||
|
|
||||||
|
self.SetCoords() ##
|
||||||
|
|
||||||
|
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._Screen._Height) )
|
||||||
|
|
||||||
|
self._PosX = self._Index*self._Screen._Width
|
||||||
|
self._Width = self._Screen._Width ## equal to screen width
|
||||||
|
self._Height = self._Screen._Height
|
||||||
|
|
||||||
|
self._PngSize["bg"] = (253,132)
|
||||||
|
self._PngSize["online"] = (75,122)
|
||||||
|
|
||||||
|
bgpng = IconItem()
|
||||||
|
bgpng._ImgSurf = MyIconPool._Icons["needwifi_bg"]
|
||||||
|
bgpng._MyType = ICON_TYPES["STAT"]
|
||||||
|
bgpng._Parent = self
|
||||||
|
bgpng.Adjust(0,0,self._PngSize["bg"][0],self._PngSize["bg"][1],0)
|
||||||
|
|
||||||
|
self._Icons["bg"] = bgpng
|
||||||
|
|
||||||
|
onlinepng = IconItem()
|
||||||
|
onlinepng._ImgSurf = MyIconPool._Icons["online"]
|
||||||
|
onlinepng._MyType = ICON_TYPES["STAT"]
|
||||||
|
onlinepng._Parent = self
|
||||||
|
onlinepng.Adjust(0,0,self._PngSize["online"][0], self._PngSize["online"][1],0)
|
||||||
|
|
||||||
|
self._Icons["online"] = onlinepng
|
||||||
|
|
||||||
|
self.SetLabels()
|
||||||
|
|
||||||
|
|
||||||
|
def Draw(self):
|
||||||
|
if self._DrawOnce == False:
|
||||||
|
self.ClearCanvas()
|
||||||
|
|
||||||
|
if is_wifi_connected_now():
|
||||||
|
|
||||||
|
self._Icons["online"].NewCoord(self._Coords["online"].x, self._Coords["online"].y)
|
||||||
|
self._Icons["online"].Draw()
|
||||||
|
|
||||||
|
self.SetLabels()
|
||||||
|
|
||||||
|
for i in self._Labels:
|
||||||
|
if i in self._Coords:
|
||||||
|
self._Labels[i].NewCoord( self._Coords[i].x, self._Coords[i].y)
|
||||||
|
self._Labels[i].Draw()
|
||||||
|
|
||||||
|
self._Labels["key_and_pass"].NewCoord( 103,self._Coords["key_and_pass"].y)
|
||||||
|
self._Labels["key_and_pass"].Draw()
|
||||||
|
|
||||||
|
else:
|
||||||
|
self._Icons["bg"].NewCoord(self._Coords["bg"].x, self._Coords["bg"].y)
|
||||||
|
self._Icons["bg"].Draw()
|
||||||
|
|
||||||
|
|
||||||
|
self._DrawOnce = True
|
||||||
|
|
||||||
|
if self._HWND != None:
|
||||||
|
self._HWND.fill((255,255,255))
|
||||||
|
self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width, self._Height ) )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class APIOBJ(object):
|
||||||
|
|
||||||
|
_Page = None
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
def Init(self,main_screen):
|
||||||
|
self._Page = TinyCloudPage()
|
||||||
|
self._Page._Screen = main_screen
|
||||||
|
self._Page._Name ="Tiny cloud"
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
BIN
Menu/GameShell/freeDM.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
1
Menu/GameShell/freeDM.sh
Normal file
@ -0,0 +1 @@
|
|||||||
|
chocolate-doom -iwad /home/cpi/games/FreeDM/freedoom1.wad
|
||||||