diff --git a/.cpirc b/.cpirc
index 87099cb..28838b1 100644
--- a/.cpirc
+++ b/.cpirc
@@ -1,7 +1,7 @@
SCREEN=`cat /sys/class/graphics/fb0/modes`
XORG_CONF="~/launcher/.xorg.conf"
-if [ -f ~/.lima ]
+if [ -f /home/cpi/.lima ]
then
XORG_CONF="~/launcher/.xorg_lima.conf"
fi
diff --git a/.gitignore b/.gitignore
index e812c3b..cb23c9e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,12 @@ sys.py/.lang
!**/Jobs/00_lowpower.sh
!**/Jobs/00_lowpower.alias
.done
+bios
+bios/*
+screenshots
+screenshots/*
+.pcsx
+.pcsx/*
+*.log
+.DS_Store
+sys.py/.*
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index 25dc9ba..0000000
--- a/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "Pcsx"]
- path = Menu/GameShell/20_Retro Games/Pcsx
- url = https://github.com/cuu/Pcsx.git
diff --git a/LICENSE b/LICENSE
index 94a9ed0..f288702 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,7 +1,7 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
- Copyright (C) 2007 Free Software Foundation, Inc.
+ Copyright (C) 2007 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found.
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see .
+ along with this program. If not, see .
Also add information on how to contact you by electronic and paper mail.
@@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
-.
+.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
-.
+.
diff --git a/Menu/GameShell/10_Settings/About/__init__.py b/Menu/GameShell/10_Settings/About/__init__.py
index 94e0821..4a5c0c3 100644
--- a/Menu/GameShell/10_Settings/About/__init__.py
+++ b/Menu/GameShell/10_Settings/About/__init__.py
@@ -12,15 +12,16 @@ from libs.roundrects import aa_round_rect
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.util_funcs import midRect,FileExists
from UI.keys_def import CurKeys, IsKeyMenuOrB
from UI.scroller import ListScroller
from UI.icon_pool import MyIconPool
-from UI.icon_item import IconItem
+from UI.multi_icon_item import MultiIconItem
from UI.multilabel import MultiLabel
+from UI.lang_manager import MyLangManager
+from UI.skin_manager import MySkinManager
-
+from config import VERSION
class InfoPageListItem(object):
_PosX = 0
@@ -79,7 +80,7 @@ class InfoPageListItem(object):
class AboutPage(Page):
_FootMsg = ["Nav.","","","Back",""]
_MyList = []
- _ListFontObj = fonts["varela13"]
+ _ListFontObj = MyLangManager.TrFont("varela13")
_AList = {}
@@ -207,7 +208,32 @@ class AboutPage(Page):
memory["value"] = str( int(parts[1].strip())/1000.0) +" MB"
self._AList["memory"] = memory
break
-
+
+ def LauncherVersion(self):
+ launcher_version = {}
+ launcher_version["key"] = "launcher_ver"
+ launcher_version["label"] = "Launcher:"
+ launcher_version["value"] = VERSION
+ self._AList["launcher_ver"] = launcher_version
+
+ def OsImageVersion(self):
+ if FileExists("/etc/clockworkpi_os_image_version"):
+ try:
+ with open("/etc/clockworkpi_os_image_version") as f:
+ content = f.readlines()
+ content = [x.strip() for x in content]
+
+ except:
+ print("open %s failed" % "/etc/clockworkpi_os_image_version")
+ content = None
+
+ if content != None and len(content) > 0:
+ os_image_ver = {}
+ os_image_ver["key"] = "os_image_ver"
+ os_image_ver["label"] = "OS Image:"
+ os_image_ver["value"] = content[0][:12]
+ self._AList["os_image_ver"] = os_image_ver
+
def GenList(self):
self._MyList = []
@@ -216,7 +242,7 @@ class AboutPage(Page):
start_y = 10
last_height = 0
- for i,u in enumerate( ["processor","armcores","cpuscalemhz","features","memory","uname"] ):
+ for i,u in enumerate( ["processor","armcores","cpuscalemhz","features","memory","uname","launcher_ver","os_image_ver"] ):
#for i,u in enumerate( ["processor","cpucores","cpumhz","flags","memory","uname"] ):
if u not in self._AList:
continue
@@ -229,7 +255,7 @@ class AboutPage(Page):
li._PosY = start_y + last_height
li._Width = Width
li._Fonts["normal"] = self._ListFontObj
- li._Fonts["small"] = fonts["varela12"]
+ li._Fonts["small"] = MySkinManager.GiveFont("varela12")
if self._AList[u]["label"] != "":
li.Init( self._AList[u]["label"] )
@@ -248,14 +274,14 @@ class AboutPage(Page):
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._CanvasHWND = pygame.Surface( (self._Screen._Width,self._BGheight+50) )
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 = MultiIconItem()
+ bgpng._ImgSurf = MyIconPool.GiveIconSurface("about_bg")
bgpng._MyType = ICON_TYPES["STAT"]
bgpng._Parent = self
bgpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
@@ -267,6 +293,9 @@ class AboutPage(Page):
self.CpuMhz()
self.Uname()
+ self.LauncherVersion()
+ self.OsImageVersion()
+
self.GenList()
self._Scroller = ListScroller()
@@ -278,7 +307,7 @@ class AboutPage(Page):
def ScrollDown(self):
dis = 10
- if abs(self._Scrolled) < (self._BGheight - self._Height)/2 + 50:
+ if abs(self._Scrolled) < (self._BGheight - self._Height)/2 + 100:
self._PosY -= dis
self._Scrolled -= dis
@@ -321,16 +350,19 @@ class AboutPage(Page):
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
+ self._Icons["bg"].DrawRect((230,0,82,184),(228,0,82,184))
+
+ y = self._MyList[len(self._MyList)-1]._PosY+30
+
+ self._Icons["bg"].DrawRect(( (self._Width-191)/2,y,191,68),(65,232,191,68))
+
if self._HWND != None:
- self._HWND.fill((255,255,255))
+ self._HWND.fill(MySkinManager.GiveColor("White"))
self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width, self._Height ) )
diff --git a/Menu/GameShell/10_Settings/Airplane/__init__.py b/Menu/GameShell/10_Settings/Airplane/__init__.py
index 917a7c1..3338d90 100644
--- a/Menu/GameShell/10_Settings/Airplane/__init__.py
+++ b/Menu/GameShell/10_Settings/Airplane/__init__.py
@@ -12,7 +12,6 @@ from libs.roundrects import aa_round_rect
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, IsKeyStartOrA, IsKeyMenuOrB
from UI.scroller import ListScroller
@@ -66,21 +65,21 @@ class AirplanePage(Page):
airwire = IconItem()
- airwire._ImgSurf = MyIconPool._Icons["airwire"]
+ airwire._ImgSurf = MyIconPool.GiveIconSurface("airwire")
airwire._MyType = ICON_TYPES["STAT"]
airwire._Parent = self
airwire.Adjust(0,0,5,43,0)
self._Icons["airwire"] = airwire
GS = IconItem()
- GS._ImgSurf = MyIconPool._Icons["GS"]
+ GS._ImgSurf = MyIconPool.GiveIconSurface("GS")
GS._MyType = ICON_TYPES["STAT"]
GS._Parent = self
GS.Adjust(0,0,72,95,0)
self._Icons["GS"] = GS
DialogBoxs = MultiIconItem()
- DialogBoxs._ImgSurf = MyIconPool._Icons["DialogBoxs"]
+ DialogBoxs._ImgSurf = MyIconPool.GiveIconSurface("DialogBoxs")
DialogBoxs._MyType = ICON_TYPES["STAT"]
DialogBoxs._Parent = self
DialogBoxs._IconWidth = 134
@@ -91,7 +90,7 @@ class AirplanePage(Page):
"""
bgpng = MultiIconItem()
- bgpng._ImgSurf = MyIconPool._Icons["about_bg"]
+ bgpng._ImgSurf = MyIconPool.GiveIconSurface("about_bg")
bgpng._MyType = ICON_TYPES["STAT"]
bgpng._Parent = self
bgpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
diff --git a/Menu/GameShell/10_Settings/Bluetooth/__init__.py b/Menu/GameShell/10_Settings/Bluetooth/__init__.py
index 2c3b5ac..4a943ab 100644
--- a/Menu/GameShell/10_Settings/Bluetooth/__init__.py
+++ b/Menu/GameShell/10_Settings/Bluetooth/__init__.py
@@ -15,7 +15,6 @@ from libs.DBUS import bus, adapter,devices
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, IsKeyStartOrA, IsKeyMenuOrB
from UI.scroller import ListScroller
@@ -100,8 +99,8 @@ class BleInfoPage(Page):
_FootMsg = ["Nav","Forget","Disconnect","Back",""]
_MyList = []
_ListFontObj = MyLangManager.TrFont("varela15")
- _ListSmFontObj = fonts["varela12"] # small font
- _ListSm2FontObj= fonts["varela11"]
+ _ListSmFontObj = MySkinManager.GiveFont("varela12") # small font
+ _ListSm2FontObj= MySkinManager.GiveFont("varela11")
_AList = {}
_Path = ""
@@ -380,7 +379,7 @@ class BluetoothPage(Page):
_LastStatusMsg = ""
_FootMsg = ["Nav","Info","Scan","Back","TryConnect"]
_Scroller = None
- _ListFontObj = fonts["notosanscjk15"]
+ _ListFontObj = MyLangManager.TrFont("notosanscjk15")
_InfoPage = None
diff --git a/Menu/GameShell/10_Settings/Bluetooth/net_item.py b/Menu/GameShell/10_Settings/Bluetooth/net_item.py
index c3d173d..cc37882 100644
--- a/Menu/GameShell/10_Settings/Bluetooth/net_item.py
+++ b/Menu/GameShell/10_Settings/Bluetooth/net_item.py
@@ -5,7 +5,6 @@ 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 UI.icon_pool import MyIconPool
@@ -99,7 +98,7 @@ class NetItem(object):
self._Labels["mac_addr"] = name_label
done_icon = NetItemIcon()
- done_icon._ImgSurf = MyIconPool._Icons["done"]
+ done_icon._ImgSurf = MyIconPool.GiveIconSurface("done")
done_icon._CanvasHWND = self._Parent._CanvasHWND
done_icon._Parent = self
diff --git a/Menu/GameShell/10_Settings/Brightness/brightness_page.py b/Menu/GameShell/10_Settings/Brightness/brightness_page.py
index 7912acc..8b56473 100644
--- a/Menu/GameShell/10_Settings/Brightness/brightness_page.py
+++ b/Menu/GameShell/10_Settings/Brightness/brightness_page.py
@@ -10,7 +10,6 @@ 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, IsKeyMenuOrB
from UI.slider import Slider
@@ -40,7 +39,7 @@ class BSlider(Slider):
self._Height = self._Parent._Height
bgpng = IconItem()
- bgpng._ImgSurf = MyIconPool._Icons["light"]
+ bgpng._ImgSurf = MyIconPool.GiveIconSurface("light")
bgpng._MyType = ICON_TYPES["STAT"]
bgpng._Parent = self
bgpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
@@ -50,7 +49,7 @@ class BSlider(Slider):
scale = MultiIconItem()
scale._MyType = ICON_TYPES["STAT"]
scale._Parent = self
- scale._ImgSurf = MyIconPool._Icons["scale"]
+ scale._ImgSurf = MyIconPool.GiveIconSurface("scale")
scale._IconWidth = 82
scale._IconHeight = 63
scale.Adjust(0,0,82,63,0)
diff --git a/Menu/GameShell/10_Settings/ButtonsLayout/__init__.py b/Menu/GameShell/10_Settings/ButtonsLayout/__init__.py
index 7add4a9..70ad3da 100644
--- a/Menu/GameShell/10_Settings/ButtonsLayout/__init__.py
+++ b/Menu/GameShell/10_Settings/ButtonsLayout/__init__.py
@@ -9,7 +9,6 @@ from libs.roundrects import aa_round_rect
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, GetButtonsLayoutMode, SetButtonsLayoutMode, IsKeyStartOrA, IsKeyMenuOrB
from UI.scroller import ListScroller
@@ -117,7 +116,6 @@ class UpdateConfirmPage(ConfirmPage):
class ButtonsLayoutPage(Page):
_FootMsg = ["Nav.","","UpdateRetroArch","Back","Toggle"]
_MyList = []
- _ListFontObj = fonts["varela13"]
_AList = {}
@@ -155,7 +153,7 @@ class ButtonsLayoutPage(Page):
self._Height = self._Screen._Height
DialogBoxs = MultiIconItem()
- DialogBoxs._ImgSurf = MyIconPool._Icons["buttonslayout"]
+ DialogBoxs._ImgSurf = MyIconPool.GiveIconSurface("buttonslayout")
DialogBoxs._MyType = ICON_TYPES["STAT"]
DialogBoxs._Parent = self
DialogBoxs._IconWidth = 300
diff --git a/Menu/GameShell/10_Settings/GateWay/__init__.py b/Menu/GameShell/10_Settings/GateWay/__init__.py
index df66c1b..8a5bc0a 100644
--- a/Menu/GameShell/10_Settings/GateWay/__init__.py
+++ b/Menu/GameShell/10_Settings/GateWay/__init__.py
@@ -11,7 +11,6 @@ from libs.roundrects import aa_round_rect
from UI.constants import Width,Height,ICON_TYPES,RESTARTUI
from UI.page import Page,PageSelector
from UI.label import Label
-from UI.fonts import fonts
from UI.util_funcs import midRect,FileExists
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
from UI.scroller import ListScroller
@@ -78,7 +77,7 @@ class PageListItem(InfoPageListItem):
class GateWayPage(Page):
_FootMsg = ["Nav","Clear All","","Back","Select"]
_MyList = []
- _ListFont = fonts["notosanscjk15"]
+ _ListFont = MyLangManager.TrFont("notosanscjk15")
_AList = {}
@@ -134,7 +133,7 @@ class GateWayPage(Page):
self._Height = self._Screen._Height
done = IconItem()
- done._ImgSurf = MyIconPool._Icons["done"]
+ done._ImgSurf = MyIconPool.GiveIconSurface("done")
done._MyType = ICON_TYPES["STAT"]
done._Parent = self
self._Icons["done"] = done
@@ -319,7 +318,7 @@ class GateWayPage(Page):
i.Draw()
if self._HWND != None:
- self._HWND.fill((255,255,255))
+ self._HWND.fill(MySkinManager.GiveColor("White"))
self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width, self._Height ) )
diff --git a/Menu/GameShell/10_Settings/Languages/__init__.py b/Menu/GameShell/10_Settings/Languages/__init__.py
index 556327a..49ab84e 100644
--- a/Menu/GameShell/10_Settings/Languages/__init__.py
+++ b/Menu/GameShell/10_Settings/Languages/__init__.py
@@ -11,7 +11,6 @@ from libs.roundrects import aa_round_rect
from UI.constants import Width,Height,ICON_TYPES,RESTARTUI
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, IsKeyStartOrA, IsKeyMenuOrB
from UI.scroller import ListScroller
@@ -77,7 +76,7 @@ class PageListItem(InfoPageListItem):
class LanguagesPage(Page):
_FootMsg = ["Nav","","","Back","Select"]
_MyList = []
- _ListFont = fonts["notosanscjk15"]
+ _ListFont = MyLangManager.TrFont("notosanscjk15")
_AList = {}
@@ -134,7 +133,7 @@ class LanguagesPage(Page):
self._Height = self._Screen._Height
done = IconItem()
- done._ImgSurf = MyIconPool._Icons["done"]
+ done._ImgSurf = MyIconPool.GiveIconSurface("done")
done._MyType = ICON_TYPES["STAT"]
done._Parent = self
self._Icons["done"] = done
@@ -279,7 +278,7 @@ class LanguagesPage(Page):
i.Draw()
if self._HWND != None:
- self._HWND.fill((255,255,255))
+ self._HWND.fill(MySkinManager.GiveColor("White"))
self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width, self._Height ) )
diff --git a/Menu/GameShell/10_Settings/LauncherGo/__init__.py b/Menu/GameShell/10_Settings/LauncherGo/__init__.py
index d49e35d..7480ac0 100644
--- a/Menu/GameShell/10_Settings/LauncherGo/__init__.py
+++ b/Menu/GameShell/10_Settings/LauncherGo/__init__.py
@@ -3,13 +3,33 @@ import os
import pygame
#import math
#mport subprocess
-import platform
#from beeprint import pp
from libs.roundrects import aa_round_rect
## local UI import
+from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
+from UI.util_funcs import ArmSystem
from UI.lang_manager import MyLangManager
+from UI.confirm_page import ConfirmPage
+class SwitchToLauncherGoConfirmPage(ConfirmPage):
+
+ def KeyDown(self,event):
+
+ if IsKeyMenuOrB(event.key):
+ self.ReturnToUpLevelPage()
+ self._Screen.Draw()
+ self._Screen.SwapAndShow()
+
+ if IsKeyStartOrA(event.key):
+ self._Screen._MsgBox.SetText("Rebooting to LauncherGo")
+ self._Screen._MsgBox.Draw()
+ self._Screen.SwapAndShow()
+ pygame.time.delay(300)
+ ArmSystem("sed -i s/launcher/launchergo/g ~/.bashrc" )
+ ArmSystem("sudo reboot")
+
+
class APIOBJ(object):
_Page = None
@@ -17,16 +37,16 @@ class APIOBJ(object):
def __init__(self):
pass
def Init(self,main_screen):
- pass
+ self._Page = SwitchToLauncherGoConfirmPage()
+ self._Page._Screen = main_screen
+ self._Page._Name ="Switch To LauncherGo"
+ self._Page.Init()
+
def API(self,main_screen):
if main_screen !=None:
- main_screen._MsgBox.SetText("Rebooting to LauncherGo")
- main_screen._MsgBox.Draw()
- main_screen.SwapAndShow()
- pygame.time.delay(300)
- if "arm" in platform.machine():
- os.system("sed -i s/launcher/launchergo/g ~/.bashrc" )
- os.system("sudo reboot")
+ main_screen.PushPage(self._Page)
+ main_screen.Draw()
+ main_screen.SwapAndShow()
OBJ = APIOBJ()
def Init(main_screen):
diff --git a/Menu/GameShell/10_Settings/Lima/__init__.py b/Menu/GameShell/10_Settings/Lima/__init__.py
index 0dcba13..ea509f1 100644
--- a/Menu/GameShell/10_Settings/Lima/__init__.py
+++ b/Menu/GameShell/10_Settings/Lima/__init__.py
@@ -11,8 +11,7 @@ from libs.roundrects import aa_round_rect
from UI.constants import Width,Height,ICON_TYPES,RESTARTUI
from UI.page import Page,PageSelector
from UI.label import Label
-from UI.fonts import fonts
-from UI.util_funcs import midRect,FileExists
+from UI.util_funcs import midRect,FileExists,ArmSystem
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
from UI.scroller import ListScroller
from UI.icon_pool import MyIconPool
@@ -77,7 +76,7 @@ class PageListItem(InfoPageListItem):
class GPUDriverPage(Page):
_FootMsg = ["Nav","","","Back","Select"]
_MyList = []
- _ListFont = fonts["notosanscjk15"]
+ _ListFont = MyLangManager.TrFont("notosanscjk12")
_AList = {}
@@ -102,8 +101,8 @@ class GPUDriverPage(Page):
start_y = 0
last_height = 0
- drivers = [["fbturbo","Fbturbo"],
- ["modesetting","Lima"]]
+ drivers = [["fbturbo","FBTURBO driver (Software Rendering)"],
+ ["modesetting","LIMA driver (Experimental Hardware Rendering)"]]
for i,u in enumerate( drivers ):
@@ -133,7 +132,7 @@ class GPUDriverPage(Page):
self._Height = self._Screen._Height
done = IconItem()
- done._ImgSurf = MyIconPool._Icons["done"]
+ done._ImgSurf = MyIconPool.GiveIconSurface("done")
done._MyType = ICON_TYPES["STAT"]
done._Parent = self
self._Icons["done"] = done
@@ -171,10 +170,16 @@ class GPUDriverPage(Page):
self._Screen._MsgBox.Draw()
self._Screen.SwapAndShow()
- if "modesetting" in cur_li._Value:
+ if "modesetting" in cur_li._Value: ## enable lima
os.system("touch %s/.lima" % os.path.expanduser('~') )
- else:
+ ArmSystem("sudo mv /usr/lib/xorg/modules/drivers/modesetting_drv.so.lima /usr/lib/xorg/modules/drivers/modesetting_drv.so")
+ ArmSystem("sudo sed -i '/^#.*lima/s/^#//' /etc/ld.so.conf.d/00-arm-linux-gnueabihf.conf")
+ ArmSystem("sudo ldconfig")
+ else: #disable lima
os.system("rm %s/.lima" % os.path.expanduser('~') )
+ ArmSystem("sudo mv /usr/lib/xorg/modules/drivers/modesetting_drv.so /usr/lib/xorg/modules/drivers/modesetting_drv.so.lima")
+ ArmSystem("sudo sed -i 's/^[^#]*lima/#&/' /etc/ld.so.conf.d/00-arm-linux-gnueabihf.conf")
+ ArmSystem("sudo ldconfig")
pygame.time.delay(800)
os.system("sudo reboot")
@@ -266,7 +271,7 @@ class GPUDriverPage(Page):
i.Draw()
if self._HWND != None:
- self._HWND.fill((255,255,255))
+ self._HWND.fill(MySkinManager.GiveColor("White"))
self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width, self._Height ) )
@@ -279,7 +284,7 @@ class APIOBJ(object):
def Init(self,main_screen):
self._Page = GPUDriverPage()
self._Page._Screen = main_screen
- self._Page._Name ="GPU driver switch"
+ self._Page._Name ="GPU Driver Switch"
self._Page.Init()
def API(self,main_screen):
diff --git a/Menu/GameShell/10_Settings/Notification/__init__.py b/Menu/GameShell/10_Settings/Notification/__init__.py
index 30971d4..d2bdc6a 100644
--- a/Menu/GameShell/10_Settings/Notification/__init__.py
+++ b/Menu/GameShell/10_Settings/Notification/__init__.py
@@ -15,7 +15,6 @@ from libs.roundrects import aa_round_rect
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,FileExists,IsExecutable
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
from UI.scroller import ListScroller
@@ -45,7 +44,7 @@ class NotifyJobListItem(InfoPageListItem):
self._Labels["Text"] = l
done_icon = IconItem()
- done_icon._ImgSurf = MyIconPool._Icons["done"]
+ done_icon._ImgSurf = MyIconPool.GiveIconSurface("done")
done_icon._CanvasHWND = self._Parent._CanvasHWND
done_icon._Parent = self
@@ -126,7 +125,7 @@ class NotificationPage(Page):
li._PosY = start_y + counter*InfoPageListItem._Height
li._Width = Width-10
li._Fonts["normal"] = self._ListFontObj
- li._Fonts["small"] = fonts["varela12"]
+ li._Fonts["small"] = MySkinManager.GiveFont("varela12")
if IsExecutable(v):
li._ReadOnly = True
diff --git a/Menu/GameShell/10_Settings/PowerOFF/__init__.py b/Menu/GameShell/10_Settings/PowerOFF/__init__.py
index 79147d8..d55fdbd 100644
--- a/Menu/GameShell/10_Settings/PowerOFF/__init__.py
+++ b/Menu/GameShell/10_Settings/PowerOFF/__init__.py
@@ -7,6 +7,8 @@ from UI.constants import RUNSYS
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
from UI.confirm_page import ConfirmPage
from UI.lang_manager import MyLangManager
+from UI.skin_manager import MySkinManager
+
import config
class PowerOffConfirmPage(ConfirmPage):
@@ -48,9 +50,9 @@ class PowerOffConfirmPage(ConfirmPage):
if IsKeyStartOrA(event.key):
if self.CheckBattery() < 20:
- cmdpath = "feh --bg-center gameshell/wallpaper/gameover.png;"
+ cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper("gameover.png")
else:
- cmdpath = "feh --bg-center gameshell/wallpaper/seeyou.png;"
+ cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper("seeyou.png")
cmdpath += "sleep 3;"
diff --git a/Menu/GameShell/10_Settings/PowerOptions/__init__.py b/Menu/GameShell/10_Settings/PowerOptions/__init__.py
index b04442f..e80e68c 100644
--- a/Menu/GameShell/10_Settings/PowerOptions/__init__.py
+++ b/Menu/GameShell/10_Settings/PowerOptions/__init__.py
@@ -12,7 +12,6 @@ from libs.roundrects import aa_round_rect
from UI.constants import Width,Height,ICON_TYPES,POWEROPT
from UI.page import Page,PageSelector
from UI.label import Label
-from UI.fonts import fonts
from UI.util_funcs import midRect
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
from UI.scroller import ListScroller
@@ -292,7 +291,7 @@ class InfoPage(Page):
class PowerOptionsPage(Page):
_FootMsg = ["Nav","Detail","","Back","Select"]
_MyList = []
- _ListFont = fonts["notosanscjk15"]
+ _ListFont = MyLangManager.TrFont("notosanscjk15")
_AList = {}
@@ -379,7 +378,7 @@ class PowerOptionsPage(Page):
self._Height = self._Screen._Height
done = IconItem()
- done._ImgSurf = MyIconPool._Icons["done"]
+ done._ImgSurf = MyIconPool.GiveIconSurface("done")
done._MyType = ICON_TYPES["STAT"]
done._Parent = self
self._Icons["done"] = done
@@ -522,7 +521,7 @@ class PowerOptionsPage(Page):
i.Draw()
if self._HWND != None:
- self._HWND.fill((255,255,255))
+ self._HWND.fill(MySkinManager.GiveColor("White"))
self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width, self._Height ) )
diff --git a/Menu/GameShell/10_Settings/Skins/__init__.py b/Menu/GameShell/10_Settings/Skins/__init__.py
new file mode 100644
index 0000000..33fe53c
--- /dev/null
+++ b/Menu/GameShell/10_Settings/Skins/__init__.py
@@ -0,0 +1,294 @@
+# -*- coding: utf-8 -*-
+import os
+import pygame
+#import commands
+import glob
+#from beeprint import pp
+from libs.roundrects import aa_round_rect
+
+## local UI import
+from UI.constants import Width,Height,ICON_TYPES,RESTARTUI
+from UI.page import Page,PageSelector
+from UI.label import Label
+from UI.util_funcs import midRect,FileExists
+from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
+from UI.scroller import ListScroller
+from UI.icon_pool import MyIconPool
+from UI.icon_item import IconItem
+from UI.multilabel import MultiLabel
+from UI.skin_manager import MySkinManager
+from UI.lang_manager import MyLangManager
+from UI.info_page_list_item import InfoPageListItem
+from UI.info_page_selector import InfoPageSelector
+
+import config
+
+class ListPageSelector(InfoPageSelector):
+ 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 PageListItem(InfoPageListItem):
+ _PosX = 0
+ _PosY = 0
+ _Width = 0
+ _Height = 30
+
+ _Labels = {}
+ _Icons = {}
+ _Fonts = {}
+
+ _LinkObj = None
+
+ _Active = False
+ _Value = ""
+
+ def Draw(self):
+
+ self._Labels["Text"]._PosY = self._PosY+ (self._Height- self._Labels["Text"]._Height)/2
+
+ if self._Active == True:
+ self._Parent._Icons["done"].NewCoord( self._Parent._Width-30,self._PosY+5)
+ self._Parent._Icons["done"].Draw()
+
+ self._Labels["Text"].Draw(self._Active)
+
+ if "Small" in self._Labels:
+ self._Labels["Small"]._PosX = self._Width - self._Labels["Small"]._Width -10
+ self._Labels["Small"]._PosY = self._PosY + (self._Height- self._Labels["Small"]._Height)/2
+ self._Labels["Small"].Draw()
+
+ pygame.draw.line(self._Parent._CanvasHWND,MySkinManager.GiveColor('Line'),(self._PosX,self._PosY+self._Height-1),(self._PosX+self._Width,self._PosY+self._Height-1),1)
+
+class SkinsPage(Page):
+ _FootMsg = ["Nav","","Scan","Back","Select"]
+ _MyList = []
+ _ListFont = MyLangManager.TrFont("notosanscjk15")
+
+ _AList = {}
+
+ _Scrolled = 0
+
+ _BGwidth = 320
+ _BGheight = 240-24-20
+
+ _DrawOnce = False
+ _Scroller = None
+ _InfoPage = None
+
+ def __init__(self):
+ Page.__init__(self)
+ self._Icons = {}
+
+ def GenList(self):
+ self._MyList = []
+
+ start_x = 0
+ start_y = 0
+ last_height = 0
+
+
+ skins = [["../skin/default","Default"]]
+ files_path = glob.glob("/home/cpi/skins/*")
+
+ for i ,v in enumerate(files_path):
+ if os.path.isdir(v):
+ bname = os.path.basename(v)
+ print(v,bname)
+ skins.append([v,bname])
+
+ for i,u in enumerate( skins ):
+ #print(i,u)
+ li = PageListItem()
+ li._Parent = self
+ li._PosX = start_x
+ li._PosY = start_y + last_height
+ li._Width = Width
+ li._Fonts["normal"] = self._ListFont
+ li._Active = False
+ li._Value = u[0]
+ li.Init( u[1] )
+
+ 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
+
+ done = IconItem()
+ done._ImgSurf = MyIconPool.GiveIconSurface("done")
+ done._MyType = ICON_TYPES["STAT"]
+ done._Parent = self
+ self._Icons["done"] = done
+
+ ps = ListPageSelector()
+ ps._Parent = self
+ self._Ps = ps
+ self._PsIndex = 0
+
+ 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 Click(self):
+ if len(self._MyList) == 0:
+ return
+
+ cur_li = self._MyList[self._PsIndex]
+ if cur_li._Active == True:
+ return
+
+ print(cur_li._Value)
+
+ for i in self._MyList:
+ i._Active = False
+
+ cur_li._Active = True
+ self._Screen._MsgBox.SetText("Applying")
+ self._Screen._MsgBox.Draw()
+ self._Screen.SwapAndShow()
+
+ if "../skin/default" in cur_li._Value:
+ os.system("rm %s/.gameshell_skin" % os.path.expanduser('~') )
+ else:
+ os.system("echo %s > %s/.gameshell_skin" % (cur_li._Value,os.path.expanduser('~') ))
+
+ pygame.time.delay(700)
+ pygame.event.post( pygame.event.Event(RESTARTUI, message=""))
+
+ def OnLoadCb(self):
+ self._Scrolled = 0
+ self._PosY = 0
+ self._DrawOnce = False
+
+ for i in self._MyList:
+ i._Active = False
+
+ for i in self._MyList:
+ if config.SKIN in i._Value:
+ i._Active = True
+
+ def OnReturnBackCb(self):
+ pass
+ """
+ self.ReturnToUpLevelPage()
+ self._Screen.Draw()
+ self._Screen.SwapAndShow()
+ """
+ def KeyDown(self,event):
+
+ if IsKeyMenuOrB(event.key):
+ self.ReturnToUpLevelPage()
+ self._Screen.Draw()
+ self._Screen.SwapAndShow()
+
+ if IsKeyStartOrA(event.key):
+ self.Click()
+
+ if event.key == CurKeys["Up"]:
+ self.ScrollUp()
+ self._Screen.Draw()
+ self._Screen.SwapAndShow()
+
+ if event.key == CurKeys["Down"]:
+ self.ScrollDown()
+ self._Screen.Draw()
+ self._Screen.SwapAndShow()
+
+ if event.key == CurKeys["X"]:
+ self.GenList()
+
+ for i in self._MyList:
+ i._Active = False
+
+ for i in self._MyList:
+ if config.SKIN in i._Value:
+ i._Active = True
+
+ self._Screen.Draw()
+ self._Screen.SwapAndShow()
+
+ def Draw(self):
+
+ self.ClearCanvas()
+ if len(self._MyList) == 0:
+ return
+
+ else:
+ if len(self._MyList) * PageListItem._Height > self._Height:
+ self._Ps._Width = self._Width - 11
+ self._Ps.Draw()
+ for i in self._MyList:
+ if i._PosY > self._Height + self._Height/2:
+ break
+ if i._PosY < 0:
+ continue
+ i.Draw()
+ self._Scroller.UpdateSize( len(self._MyList)*PageListItem._Height, self._PsIndex*PageListItem._Height)
+ self._Scroller.Draw()
+
+ else:
+ self._Ps._Width = self._Width
+ self._Ps.Draw()
+ for i in self._MyList:
+ if i._PosY > self._Height + self._Height/2:
+ break
+ if i._PosY < 0:
+ continue
+ i.Draw()
+
+ if self._HWND != None:
+ self._HWND.fill(MySkinManager.GiveColor("White"))
+
+ 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 = SkinsPage()
+ self._Page._Screen = main_screen
+ self._Page._Name ="Skin selection"
+ 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)
+
+
diff --git a/Menu/GameShell/10_Settings/Sound/pages.py b/Menu/GameShell/10_Settings/Sound/pages.py
index 76122bd..a87b581 100644
--- a/Menu/GameShell/10_Settings/Sound/pages.py
+++ b/Menu/GameShell/10_Settings/Sound/pages.py
@@ -9,5 +9,5 @@ def InitSoundPage(main_screen):
myvars.SoundPage = SoundPage()
myvars.SoundPage._Screen = main_screen
- myvars.SoundPage._Name = "Sound volume"
+ myvars.SoundPage._Name = "Sound Volume"
myvars.SoundPage.Init()
diff --git a/Menu/GameShell/10_Settings/Sound/sound_page.py b/Menu/GameShell/10_Settings/Sound/sound_page.py
index 06d8ebb..2a3c026 100644
--- a/Menu/GameShell/10_Settings/Sound/sound_page.py
+++ b/Menu/GameShell/10_Settings/Sound/sound_page.py
@@ -11,7 +11,6 @@ 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, IsKeyMenuOrB
from UI.slider import Slider
@@ -44,7 +43,7 @@ class SoundSlider(Slider):
self._Height = self._Parent._Height
self._BGpng = IconItem()
- self._BGpng._ImgSurf = MyIconPool._Icons["vol"]
+ self._BGpng._ImgSurf = MyIconPool.GiveIconSurface("vol")
self._BGpng._MyType = ICON_TYPES["STAT"]
self._BGpng._Parent = self
self._BGpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
@@ -54,7 +53,7 @@ class SoundSlider(Slider):
self._Scale = MultiIconItem()
self._Scale._MyType = ICON_TYPES["STAT"]
self._Scale._Parent = self
- self._Scale._ImgSurf = MyIconPool._Icons["scale"]
+ self._Scale._ImgSurf = MyIconPool.GiveIconSurface("scale")
self._Scale._IconWidth = 82
self._Scale._IconHeight = 63
self._Scale.Adjust(0,0,82,63,0)
diff --git a/Menu/GameShell/10_Settings/Storage/__init__.py b/Menu/GameShell/10_Settings/Storage/__init__.py
index 7a9aeea..0af1f8a 100644
--- a/Menu/GameShell/10_Settings/Storage/__init__.py
+++ b/Menu/GameShell/10_Settings/Storage/__init__.py
@@ -11,7 +11,6 @@ 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
@@ -55,11 +54,11 @@ class StoragePage(Page):
self._Height = self._Screen._Height
self._BGpng = IconItem()
- self._BGpng._ImgSurf = MyIconPool._Icons["icon_sd"]
+ self._BGpng._ImgSurf = MyIconPool.GiveIconSurface("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.AddLabel(self._BGmsg % (self._DskUsg[1]-self._DskUsg[0], self._DskUsg[1]), MySkinManager.GiveFont("varela15"))
self._BGpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
@@ -68,12 +67,12 @@ class StoragePage(Page):
usage_percent = (self._DskUsg[0]/self._DskUsg[1] )*100.0
- self._BGlabel.Init("%d%%"% int(usage_percent),fonts["varela25"])
+ self._BGlabel.Init("%d%%"% int(usage_percent),MySkinManager.GiveFont("varela25"))
self._BGlabel.SetColor( self._HighColor )
self._FreeLabel = Label()
self._FreeLabel.SetCanvasHWND(self._CanvasHWND)
- self._FreeLabel.Init("Free",fonts["varela13"])
+ self._FreeLabel.Init("Free",MySkinManager.GiveFont("varela13"))
self._FreeLabel.SetColor(self._BGlabel._Color)
diff --git a/Menu/GameShell/10_Settings/Time/list_item.py b/Menu/GameShell/10_Settings/Time/list_item.py
index 6de8281..7463b0f 100644
--- a/Menu/GameShell/10_Settings/Time/list_item.py
+++ b/Menu/GameShell/10_Settings/Time/list_item.py
@@ -7,7 +7,6 @@ from libs.roundrects import aa_round_rect
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
from UI.skin_manager import MySkinManager
diff --git a/Menu/GameShell/10_Settings/Time/timezone_lib_list_page.py b/Menu/GameShell/10_Settings/Time/timezone_lib_list_page.py
index 35dacd4..4297ce9 100644
--- a/Menu/GameShell/10_Settings/Time/timezone_lib_list_page.py
+++ b/Menu/GameShell/10_Settings/Time/timezone_lib_list_page.py
@@ -10,7 +10,6 @@ from libs.roundrects import aa_round_rect
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, IsKeyStartOrA, IsKeyMenuOrB
@@ -18,7 +17,7 @@ from UI.multi_icon_item import MultiIconItem
from UI.icon_pool import MyIconPool
from UI.scroller import ListScroller
from UI.skin_manager import MySkinManager
-
+from UI.lang_manager import MyLangManager
from list_item import ListItem
@@ -86,7 +85,7 @@ class TimezoneListPage(Page):
_FootMsg = ["Nav","","","Back","Select"]
_MyList = []
_SwapMyList = []
- _ListFont = fonts["notosanscjk15"]
+ _ListFont = MyLangManager.TrFont("notosanscjk15")
_MyStack = None
_Scroller = None
@@ -177,7 +176,7 @@ class TimezoneListPage(Page):
self.SyncList("/usr/share/zoneinfo/posix")
icon_for_list = MultiIconItem()
- icon_for_list._ImgSurf = MyIconPool._Icons["sys"]
+ icon_for_list._ImgSurf = MyIconPool.GiveIconSurface("sys")
icon_for_list._MyType = ICON_TYPES["STAT"]
icon_for_list._Parent = self
@@ -186,10 +185,10 @@ class TimezoneListPage(Page):
self._BGpng = IconItem()
- self._BGpng._ImgSurf = MyIconPool._Icons["empty"]
+ self._BGpng._ImgSurf = MyIconPool.GiveIconSurface("empty")
self._BGpng._MyType = ICON_TYPES["STAT"]
self._BGpng._Parent = self
- self._BGpng.AddLabel("No timezones found on system!", fonts["varela22"])
+ self._BGpng.AddLabel("No timezones found on system!", MyLangManager.TrFont("varela22"))
self._BGpng.SetLableColor(MySkinManager.GiveColor('Disabled'))
self._BGpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
diff --git a/Menu/GameShell/10_Settings/Update/__init__.py b/Menu/GameShell/10_Settings/Update/__init__.py
index 96e77e0..8588cd2 100644
--- a/Menu/GameShell/10_Settings/Update/__init__.py
+++ b/Menu/GameShell/10_Settings/Update/__init__.py
@@ -13,7 +13,6 @@ from UI.constants import ICON_TYPES,Width,Height,RUNEVT,RUNSH
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,get_git_revision_short_hash
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
from UI.confirm_page import ConfirmPage
@@ -157,7 +156,7 @@ class UpdatePage(Page):
_Icons = {}
_FootMsg = ["Nav","","Check Update","Back",""]
- _ListFontObj = fonts["varela15"]
+ _ListFontObj = MyLangManager.TrFont("varela15")
_ConfirmPage = None
_AList = {}
_MyList = []
@@ -177,7 +176,7 @@ class UpdatePage(Page):
li._PosY = start_y + i*InfoPageListItem._Height
li._Width = Width
li._Fonts["normal"] = self._ListFontObj
- li._Fonts["small"] = fonts["varela12"]
+ li._Fonts["small"] = MySkinManager.GiveFont("varela12")
if self._AList[v]["label"] != "":
li.Init( self._AList[v]["label"] )
@@ -315,7 +314,7 @@ class APIOBJ(object):
self._UpdatePage = UpdatePage()
self._UpdatePage._Screen = main_screen
- self._UpdatePage._Name = "Update"
+ self._UpdatePage._Name = "Update Launcher"
self._UpdatePage.Init()
def API(self,main_screen):
diff --git a/Menu/GameShell/10_Settings/Wifi/net_item.py b/Menu/GameShell/10_Settings/Wifi/net_item.py
index 9888852..d01b22b 100644
--- a/Menu/GameShell/10_Settings/Wifi/net_item.py
+++ b/Menu/GameShell/10_Settings/Wifi/net_item.py
@@ -5,7 +5,6 @@ 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 UI.icon_pool import MyIconPool
@@ -138,13 +137,13 @@ class NetItem(Widget):
lock_icon = NetItemIcon()
- lock_icon._ImgSurf = MyIconPool._Icons["lock"]
+ lock_icon._ImgSurf = MyIconPool.GiveIconSurface("lock")
lock_icon._CanvasHWND = self._Parent._CanvasHWND
lock_icon._Parent = self
self._Icons["lock"] = lock_icon
done_icon = NetItemIcon()
- done_icon._ImgSurf = MyIconPool._Icons["done"]
+ done_icon._ImgSurf = MyIconPool.GiveIconSurface("done")
done_icon._CanvasHWND = self._Parent._CanvasHWND
done_icon._Parent = self
diff --git a/Menu/GameShell/10_Settings/Wifi/wifi_list.py b/Menu/GameShell/10_Settings/Wifi/wifi_list.py
index 433ff1b..c5882d7 100644
--- a/Menu/GameShell/10_Settings/Wifi/wifi_list.py
+++ b/Menu/GameShell/10_Settings/Wifi/wifi_list.py
@@ -10,7 +10,6 @@ from wicd import misc
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, IsKeyStartOrA, IsKeyMenuOrB
from UI.scroller import ListScroller
@@ -94,7 +93,7 @@ class WifiInfoPage(Page):
li._PosY = start_y + i*InfoPageListItem._Height
li._Width = Width
li._Fonts["normal"] = self._ListFontObj
- li._Fonts["small"] = fonts["varela12"]
+ li._Fonts["small"] = MyLangManager.TrFont("varela12")
if self._AList[v]["label"] != "":
li.Init( self._AList[v]["label"] )
@@ -267,7 +266,7 @@ class WifiList(Page):
_FootMsg = ["Nav","Info","Scan","Back","Enter"]
_EncMethods = None
_Scroller = None
- _ListFontObj = fonts["notosanscjk15"]
+ _ListFontObj = MyLangManager.TrFont("notosanscjk15")
_InfoPage = None
_CurBssid = ""
@@ -569,7 +568,23 @@ class WifiList(Page):
password_inputed = "".join(myvars.PasswordPage._Textarea._MyWords)
if is_wifi_connected_now() == False:
self.ConfigWireless(password_inputed)
-
+ else:
+ for i in range(0,10):
+ if is_wifi_connected_now() == True:
+ self.ShowBox(MyLangManager.Tr("Launching"))
+ self._Daemon.Disconnect()
+ self._Daemon.SetForcedDisconnect(True)
+ self._Connecting = False
+ else:
+ break
+
+ pygame.time.delay(100)
+
+ if is_wifi_connected_now() == False:
+ self.ConfigWireless(password_inputed)
+ else:
+ self.ShowBox(MyLangManager.Tr("Disconnect first"))
+
def OnReturnBackCb(self):
pass
@@ -622,8 +637,8 @@ class WifiList(Page):
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"]
+ if len(str(i["preshared_key"])) > 0:
+ thepass = str(i["preshared_key"])
break
myvars.PasswordPage.SetPassword(thepass)
diff --git a/Menu/GameShell/10_Settings/list_item.py b/Menu/GameShell/10_Settings/list_item.py
index d0dcb23..52f83ca 100644
--- a/Menu/GameShell/10_Settings/list_item.py
+++ b/Menu/GameShell/10_Settings/list_item.py
@@ -7,7 +7,6 @@ import pygame
## local UI import
from UI.page import Page
from UI.label import Label
-from UI.fonts import fonts
from UI.lang_manager import MyLangManager
# a item for List
# - - - - - - - - - - - --
diff --git a/Menu/GameShell/10_Settings/list_page.py b/Menu/GameShell/10_Settings/list_page.py
index e126587..0ed0b03 100644
--- a/Menu/GameShell/10_Settings/list_page.py
+++ b/Menu/GameShell/10_Settings/list_page.py
@@ -9,7 +9,6 @@ from libs.roundrects import aa_round_rect
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,FileExists
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
from UI.scroller import ListScroller
@@ -56,18 +55,19 @@ class ListPage(Page):
["","PowerOptions","Power Options"],
["","Wifi","Wi-Fi"],
["","Bluetooth","Bluetooth"],
- ["","Sound","Sound Volume"],
+ ["","Sound","Sound Volume"],
["","Brightness","BackLight Brightness"],
["","Storage",""],
["","Time","Timezone"],
["","Languages","Languages"],
["","Notification","Notification"],
- ["","Update", ""],
+ ["","Update", "Update Launcher"],
["","About", "About"],
- ["","PowerOFF","Power off"],
+ ["","PowerOFF","Power OFF"],
["","ButtonsLayout","Buttons Layout"],
+ ["","Skins","Theme Manager"],
["","LauncherGo","Switch to LauncherGo"],
- ["","Lima","GPU driver switch"],
+ ["","Lima","GPU Driver Switch"],
["","GateWay","Network gateway switch"]]
start_x = 0
diff --git a/Menu/GameShell/20_Retro Games/MAME/action.config b/Menu/GameShell/20_Retro Games/MAME/action.config
deleted file mode 100644
index 699f2f9..0000000
--- a/Menu/GameShell/20_Retro Games/MAME/action.config
+++ /dev/null
@@ -1,7 +0,0 @@
-ROM=/home/cpi/games/MAME
-ROM_SO=/home/cpi/apps/emulators/mame2003_plus_libretro.so
-EXT=zip
-LAUNCHER=retroarch -L
-TITLE=MAME Roms
-EXCLUDE=neogeo.zip
-SO_URL=https://raw.githubusercontent.com/cuu/emulators/master/mame2003_plus_libretro.so.zip
diff --git a/Menu/GameShell/20_Retro Games/MGBA/action.config b/Menu/GameShell/20_Retro Games/MGBA/action.config
deleted file mode 100644
index 94177c0..0000000
--- a/Menu/GameShell/20_Retro Games/MGBA/action.config
+++ /dev/null
@@ -1,6 +0,0 @@
-ROM=/home/cpi/games/MGBA
-ROM_SO=/home/cpi/apps/emulators/mgba_libretro.so
-EXT=gb,gbc,gba,gbx
-LAUNCHER=retroarch -L
-TITLE=MGBA Roms
-SO_URL=https://raw.githubusercontent.com/cuu/emulators/master/mgba_libretro.so.zip
diff --git a/Menu/GameShell/20_Retro Games/NESTOPIA/action.config b/Menu/GameShell/20_Retro Games/NESTOPIA/action.config
deleted file mode 100644
index 78dd876..0000000
--- a/Menu/GameShell/20_Retro Games/NESTOPIA/action.config
+++ /dev/null
@@ -1,7 +0,0 @@
-ROM=/home/cpi/games/NESTOPIA
-ROM_SO=/home/cpi/apps/emulators/nestopia_libretro.so
-EXT=zip,nes
-LAUNCHER=retroarch -L
-TITLE=NESTOPIA Roms
-SO_URL=https://raw.githubusercontent.com/cuu/emulators/master/nestopia_libretro.so.zip
-
diff --git a/Menu/GameShell/20_Retro Games/Pcsx b/Menu/GameShell/20_Retro Games/Pcsx
deleted file mode 160000
index c532ced..0000000
--- a/Menu/GameShell/20_Retro Games/Pcsx
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit c532cedb5387697c633777f37a52e11f95fa3352
diff --git a/Menu/GameShell/32_ChocoDM/action.config b/Menu/GameShell/32_ChocoDM/action.config
new file mode 100644
index 0000000..706a84f
--- /dev/null
+++ b/Menu/GameShell/32_ChocoDM/action.config
@@ -0,0 +1,6 @@
+ROM=/home/cpi/games/ChocoDM
+ROM_SO=
+EXT=wad
+LAUNCHER=chocolate-doom -iwad
+TITLE=ChocoDM
+SO_URL=
diff --git a/Menu/GameShell/32_freeDM.sh b/Menu/GameShell/32_freeDM.sh
deleted file mode 100755
index 5613ef0..0000000
--- a/Menu/GameShell/32_freeDM.sh
+++ /dev/null
@@ -1 +0,0 @@
-chocolate-doom -iwad /home/cpi/games/FreeDM/freedoom1.wad
diff --git a/Menu/GameShell/50_PICO-8/Post-Up.sh b/Menu/GameShell/50_PICO-8/Post-Up.sh
index f2062a3..e8c38e0 100755
--- a/Menu/GameShell/50_PICO-8/Post-Up.sh
+++ b/Menu/GameShell/50_PICO-8/Post-Up.sh
@@ -4,5 +4,9 @@ mkdir ~/.lexaloffle
cp -rf pico-8 ~/.lexaloffle
+mkdir ~/.lexaloffle/pico-8/carts
+
+ln -s ~/.lexaloffle/pico-8/carts/ ~/games/PICO-8/carts
+
touch .done
diff --git a/Menu/GameShell/50_PICO-8/compkginfo.json b/Menu/GameShell/50_PICO-8/compkginfo.json
index bc24d41..05ce187 100644
--- a/Menu/GameShell/50_PICO-8/compkginfo.json
+++ b/Menu/GameShell/50_PICO-8/compkginfo.json
@@ -3,7 +3,6 @@
"InstallDir":"pico-8",
"NotFoundMsg":["Please purchase the PICO-8 \n|None|varela16",
"and copy it to the \"~/games/PICO-8\"|None|varela16"],
-
-"MD5":{"pico-8_0.1.11g_raspi.zip":"a3f2995cf117499f880bd964d6a0e1f2","pico-8_0.1.11g_amd64.zip":"6726141c784afd4a41be6b7414c1b932"},
+"MD5":{"pico-8_0.1.11g_raspi.zip":"a3f2995cf117499f880bd964d6a0e1f2","pico-8_0.1.11g_amd64.zip":"6726141c784afd4a41be6b7414c1b932","pico-8_0.1.12_raspi.zip":"08eda95570e63089a2b9f5531503431e","pico-8_0.1.12c_raspi.zip":"1a62b0d7d4e4be65f89f23ec9757cb66","pico-8.zip":"whatever it takes"},
"Post-Up":"bash Post-Up.sh"
}
diff --git a/Menu/GameShell/97_Music Player/list_item.py b/Menu/GameShell/97_Music Player/list_item.py
index 186201a..23ba788 100644
--- a/Menu/GameShell/97_Music Player/list_item.py
+++ b/Menu/GameShell/97_Music Player/list_item.py
@@ -7,7 +7,6 @@ from libs.roundrects import aa_round_rect
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
from UI.skin_manager import MySkinManager
diff --git a/Menu/GameShell/97_Music Player/mpd_spectrum_page.py b/Menu/GameShell/97_Music Player/mpd_spectrum_page.py
index 6429193..92bf899 100644
--- a/Menu/GameShell/97_Music Player/mpd_spectrum_page.py
+++ b/Menu/GameShell/97_Music Player/mpd_spectrum_page.py
@@ -15,12 +15,12 @@ from beeprint import pp
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, IsKeyStartOrA, IsKeyMenuOrB
from UI.icon_item import IconItem
from UI.icon_pool import MyIconPool
from UI.skin_manager import MySkinManager
+from UI.lang_manager import MyLangManager
from threading import Thread
@@ -79,8 +79,8 @@ class MPDSpectrumPage(Page):
_Selector=None
_FootMsg = ["Nav","","","Back",""]
_MyList = []
- _ListFont = fonts["veramono12"]
- _SongFont = fonts["notosanscjk12"]
+ _ListFont = MyLangManager.TrFont("veramono12")
+ _SongFont = MyLangManager.TrFont("notosanscjk12")
_PIFI = None
_FIFO = None
_Color = MySkinManager.GiveColor('Front')
@@ -136,26 +136,26 @@ class MPDSpectrumPage(Page):
"""
self._BGpng = IconItem()
- self._BGpng._ImgSurf = MyIconPool._Icons["sheep_bg"]
+ self._BGpng._ImgSurf = MyIconPool.GiveIconSurface("sheep_bg")
self._BGpng._MyType = ICON_TYPES["STAT"]
self._BGpng._Parent = self
self._BGpng.Adjust(0,0,self._BGwidth,self._BGheight,0)
self._SheepHead = IconItem()
- self._SheepHead._ImgSurf = MyIconPool._Icons["sheep_head"]
+ self._SheepHead._ImgSurf = MyIconPool.GiveIconSurface("sheep_head")
self._SheepHead._MyType = ICON_TYPES["STAT"]
self._SheepHead._Parent = self
self._SheepHead.Adjust(0,0,self._SheepHeadW,self._SheepHeadH,0)
self._SheepBody = IconItem()
- self._SheepBody._ImgSurf = MyIconPool._Icons["sheep_body"]
+ self._SheepBody._ImgSurf = MyIconPool.GiveIconSurface("sheep_body")
self._SheepBody._MyType = ICON_TYPES["STAT"]
self._SheepBody._Parent = self
self._SheepBody.Adjust(0,0,self._SheepBodyW,self._SheepBodyH,0)
"""
self._cwp_png = IconItem()
- self._cwp_png._ImgSurf = MyIconPool._Icons["tape"]
+ self._cwp_png._ImgSurf = MyIconPool.GiveIconSurface("tape")
self._cwp_png._MyType = ICON_TYPES["STAT"]
self._cwp_png._Parent = self
self._cwp_png.Adjust(0,0,79,79,0)
diff --git a/Menu/GameShell/97_Music Player/music_lib_list_page.py b/Menu/GameShell/97_Music Player/music_lib_list_page.py
index 6d821e0..61e88c6 100644
--- a/Menu/GameShell/97_Music Player/music_lib_list_page.py
+++ b/Menu/GameShell/97_Music Player/music_lib_list_page.py
@@ -8,7 +8,6 @@ from libs.roundrects import aa_round_rect
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, IsKeyStartOrA, IsKeyMenuOrB
@@ -85,7 +84,7 @@ class MusicLibListPage(Page):
_FootMsg = ["Nav","","Scan","Back","Add to Playlist"]
_MyList = []
_SwapMyList = []
- _ListFont = fonts["notosanscjk15"]
+ _ListFont = MyLangManager.TrFont("notosanscjk15")
_MyStack = None
_Scroller = None
@@ -173,7 +172,7 @@ class MusicLibListPage(Page):
self.SyncList("/")
icon_for_list = MultiIconItem()
- icon_for_list._ImgSurf = MyIconPool._Icons["sys"]
+ icon_for_list._ImgSurf = MyIconPool.GiveIconSurface("sys")
icon_for_list._MyType = ICON_TYPES["STAT"]
icon_for_list._Parent = self
@@ -182,7 +181,7 @@ class MusicLibListPage(Page):
self._BGpng = IconItem()
- self._BGpng._ImgSurf = MyIconPool._Icons["empty"]
+ self._BGpng._ImgSurf = MyIconPool.GiveIconSurface("empty")
self._BGpng._MyType = ICON_TYPES["STAT"]
self._BGpng._Parent = self
self._BGpng.AddLabel(MyLangManager.Tr("Please upload data over Wi-Fi"), MyLangManager.TrFont("varela22"))
diff --git a/Menu/GameShell/97_Music Player/play_list_page.py b/Menu/GameShell/97_Music Player/play_list_page.py
index e88346e..790c2ab 100644
--- a/Menu/GameShell/97_Music Player/play_list_page.py
+++ b/Menu/GameShell/97_Music Player/play_list_page.py
@@ -10,7 +10,6 @@ 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, IsKeyStartOrA, IsKeyMenuOrB
from UI.icon_pool import MyIconPool
@@ -63,7 +62,7 @@ class PlayListPage(Page):
_Selector=None
_FootMsg = ["Nav","Remove","RTA","Back","Play/Pause"]
_MyList = []
- _ListFont = fonts["notosanscjk15"]
+ _ListFont = MyLangManager.TrFont("notosanscjk15")
_Scroller = None
_CurSongTime="0:0"
@@ -181,7 +180,7 @@ class PlayListPage(Page):
gobject.timeout_add(850,self.GObjectInterval)
self._BGpng = IconItem()
- self._BGpng._ImgSurf = MyIconPool._Icons["heart"]
+ self._BGpng._ImgSurf = MyIconPool.GiveIconSurface("heart")
self._BGpng._MyType = ICON_TYPES["STAT"]
self._BGpng._Parent = self
self._BGpng.AddLabel(MyLangManager.Tr("my favorite music"), MyLangManager.TrFont("varela18"))
diff --git a/Menu/GameShell/98_TinyCloud/__init__.py b/Menu/GameShell/98_TinyCloud/__init__.py
index 767b104..8ebc531 100644
--- a/Menu/GameShell/98_TinyCloud/__init__.py
+++ b/Menu/GameShell/98_TinyCloud/__init__.py
@@ -6,7 +6,6 @@ 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 UI.keys_def import CurKeys, IsKeyMenuOrB
@@ -19,7 +18,7 @@ class TinyCloudPage(Page):
_FootMsg = ["Nav","","","Back",""]
_MyList = []
- _ListFontObj = fonts["varela13"]
+ _ListFontObj = MyLangManager.TrFont("varela13")
_AList = {}
_Labels = {}
@@ -156,7 +155,7 @@ class TinyCloudPage(Page):
self._PngSize["online"] = (75,122)
bgpng = IconItem()
- bgpng._ImgSurf = MyIconPool._Icons["needwifi_bg"]
+ bgpng._ImgSurf = MyIconPool.GiveIconSurface("needwifi_bg")
bgpng._MyType = ICON_TYPES["STAT"]
bgpng._Parent = self
bgpng.Adjust(0,0,self._PngSize["bg"][0],self._PngSize["bg"][1],0)
@@ -164,7 +163,7 @@ class TinyCloudPage(Page):
self._Icons["bg"] = bgpng
onlinepng = IconItem()
- onlinepng._ImgSurf = MyIconPool._Icons["online"]
+ onlinepng._ImgSurf = MyIconPool.GiveIconSurface("online")
onlinepng._MyType = ICON_TYPES["STAT"]
onlinepng._Parent = self
onlinepng.Adjust(0,0,self._PngSize["online"][0], self._PngSize["online"][1],0)
diff --git a/Menu/GameShell/99_PowerOFF/__init__.py b/Menu/GameShell/99_PowerOFF/__init__.py
index f5b72c6..740d0aa 100644
--- a/Menu/GameShell/99_PowerOFF/__init__.py
+++ b/Menu/GameShell/99_PowerOFF/__init__.py
@@ -7,6 +7,7 @@ from UI.constants import RUNSYS
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
from UI.confirm_page import ConfirmPage
from UI.lang_manager import MyLangManager
+from UI.skin_manager import MySkinManager
import config
@@ -49,9 +50,9 @@ class PowerOffConfirmPage(ConfirmPage):
if IsKeyStartOrA(event.key):
if self.CheckBattery() < 20:
- cmdpath = "feh --bg-center gameshell/wallpaper/gameover.png;"
+ cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper("gameover.png")
else:
- cmdpath = "feh --bg-center gameshell/wallpaper/seeyou.png;"
+ cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper("seeyou.png")
cmdpath += "sleep 3;"
@@ -61,7 +62,7 @@ class PowerOffConfirmPage(ConfirmPage):
pygame.event.post( pygame.event.Event(RUNSYS, message=cmdpath))
if event.key == CurKeys["X"]:
- cmdpath = "feh --bg-center gameshell/wallpaper/seeyou.png;"
+ cmdpath = "feh --bg-center %s;" % MySkinManager.GiveWallpaper("seeyou.png")
cmdpath += "sleep 3;"
cmdpath += "sudo reboot"
pygame.event.post( pygame.event.Event(RUNSYS, message=cmdpath))
diff --git a/bluetooth_firmware.sh b/bluetooth_firmware.sh
new file mode 100755
index 0000000..dc9ef66
--- /dev/null
+++ b/bluetooth_firmware.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+FIRM=`cat /proc/driver/brcmf_fw`
+
+if [[ $FIRM =~ .*a0.* ]]
+then
+ brcm_patchram_plus --patchram /lib/firmware/brcm/bcm43438a0.hcd --enable_hci --bd_addr B0:F1:EC:2D:07:5B --no2bytes --tosleep 5000 /dev/ttyS1 &
+else
+ brcm_patchram_plus --patchram /lib/firmware/brcm/bcm43438a1.hcd --enable_hci --bd_addr B0:F1:EC:2D:07:5B --no2bytes --tosleep 5000 /dev/ttyS1 &
+fi
diff --git a/skin/default/Menu/GameShell/20_Retro Games/Coleco.png b/skin/default/Menu/GameShell/20_Retro Games/Coleco.png
new file mode 100644
index 0000000..066c818
Binary files /dev/null and b/skin/default/Menu/GameShell/20_Retro Games/Coleco.png differ
diff --git a/skin/default/Menu/GameShell/20_Retro Games/Fuse.png b/skin/default/Menu/GameShell/20_Retro Games/Fuse.png
new file mode 100644
index 0000000..112c7d7
Binary files /dev/null and b/skin/default/Menu/GameShell/20_Retro Games/Fuse.png differ
diff --git a/skin/default/Menu/GameShell/20_Retro Games/GGEAR.png b/skin/default/Menu/GameShell/20_Retro Games/GGEAR.png
new file mode 100644
index 0000000..23b92f0
Binary files /dev/null and b/skin/default/Menu/GameShell/20_Retro Games/GGEAR.png differ
diff --git a/skin/default/Menu/GameShell/20_Retro Games/GPSP.png b/skin/default/Menu/GameShell/20_Retro Games/GPSP.png
new file mode 100644
index 0000000..deafec9
Binary files /dev/null and b/skin/default/Menu/GameShell/20_Retro Games/GPSP.png differ
diff --git a/skin/default/Menu/GameShell/20_Retro Games/LYNX.png b/skin/default/Menu/GameShell/20_Retro Games/LYNX.png
new file mode 100644
index 0000000..289b69c
Binary files /dev/null and b/skin/default/Menu/GameShell/20_Retro Games/LYNX.png differ
diff --git a/skin/default/Menu/GameShell/20_Retro Games/MAME.png b/skin/default/Menu/GameShell/20_Retro Games/MAME.png
index 9a859f5..0f800d7 100644
Binary files a/skin/default/Menu/GameShell/20_Retro Games/MAME.png and b/skin/default/Menu/GameShell/20_Retro Games/MAME.png differ
diff --git a/skin/default/Menu/GameShell/20_Retro Games/MGBA.png b/skin/default/Menu/GameShell/20_Retro Games/MGBA.png
index e8c575b..4e2dda6 100644
Binary files a/skin/default/Menu/GameShell/20_Retro Games/MGBA.png and b/skin/default/Menu/GameShell/20_Retro Games/MGBA.png differ
diff --git a/skin/default/Menu/GameShell/20_Retro Games/NESTOPIA.png b/skin/default/Menu/GameShell/20_Retro Games/NESTOPIA.png
index 57dbd7d..086e694 100644
Binary files a/skin/default/Menu/GameShell/20_Retro Games/NESTOPIA.png and b/skin/default/Menu/GameShell/20_Retro Games/NESTOPIA.png differ
diff --git a/skin/default/Menu/GameShell/20_Retro Games/Pcsx+.png b/skin/default/Menu/GameShell/20_Retro Games/Pcsx+.png
new file mode 100644
index 0000000..d05300d
Binary files /dev/null and b/skin/default/Menu/GameShell/20_Retro Games/Pcsx+.png differ
diff --git a/skin/default/Menu/GameShell/20_Retro Games/PicoDrive+.png b/skin/default/Menu/GameShell/20_Retro Games/PicoDrive+.png
new file mode 100644
index 0000000..03ff9a8
Binary files /dev/null and b/skin/default/Menu/GameShell/20_Retro Games/PicoDrive+.png differ
diff --git a/skin/default/Menu/GameShell/20_Retro Games/PocketSNES+.png b/skin/default/Menu/GameShell/20_Retro Games/PocketSNES+.png
new file mode 100644
index 0000000..0a43e69
Binary files /dev/null and b/skin/default/Menu/GameShell/20_Retro Games/PocketSNES+.png differ
diff --git a/skin/default/Menu/GameShell/20_Retro Games/SFC9X.png b/skin/default/Menu/GameShell/20_Retro Games/SFC9X.png
new file mode 100644
index 0000000..7c38fdc
Binary files /dev/null and b/skin/default/Menu/GameShell/20_Retro Games/SFC9X.png differ
diff --git a/skin/default/Menu/GameShell/20_Retro Games/UAE+.png b/skin/default/Menu/GameShell/20_Retro Games/UAE+.png
new file mode 100644
index 0000000..413ad01
Binary files /dev/null and b/skin/default/Menu/GameShell/20_Retro Games/UAE+.png differ
diff --git a/skin/default/Menu/GameShell/20_Retro Games/gpSP+.png b/skin/default/Menu/GameShell/20_Retro Games/gpSP+.png
new file mode 100644
index 0000000..deafec9
Binary files /dev/null and b/skin/default/Menu/GameShell/20_Retro Games/gpSP+.png differ
diff --git a/skin/default/Menu/GameShell/20_Retro Games/mupen64+.png b/skin/default/Menu/GameShell/20_Retro Games/mupen64+.png
new file mode 100644
index 0000000..8eec6f1
Binary files /dev/null and b/skin/default/Menu/GameShell/20_Retro Games/mupen64+.png differ
diff --git a/skin/default/Menu/GameShell/21_Indie Games/2048.png b/skin/default/Menu/GameShell/21_Indie Games/2048.png
new file mode 100644
index 0000000..ac58de0
Binary files /dev/null and b/skin/default/Menu/GameShell/21_Indie Games/2048.png differ
diff --git a/skin/default/Menu/GameShell/21_Indie Games/Hurrican.png b/skin/default/Menu/GameShell/21_Indie Games/Hurrican.png
new file mode 100644
index 0000000..42f1eff
Binary files /dev/null and b/skin/default/Menu/GameShell/21_Indie Games/Hurrican.png differ
diff --git a/skin/default/Menu/GameShell/21_Indie Games/No.909.png b/skin/default/Menu/GameShell/21_Indie Games/No.909.png
new file mode 100644
index 0000000..673244d
Binary files /dev/null and b/skin/default/Menu/GameShell/21_Indie Games/No.909.png differ
diff --git a/skin/default/Menu/GameShell/21_Indie Games/NyanCat.png b/skin/default/Menu/GameShell/21_Indie Games/NyanCat.png
new file mode 100644
index 0000000..028a752
Binary files /dev/null and b/skin/default/Menu/GameShell/21_Indie Games/NyanCat.png differ
diff --git a/skin/default/Menu/GameShell/21_Indie Games/Planet-Busters.png b/skin/default/Menu/GameShell/21_Indie Games/Planet-Busters.png
new file mode 100644
index 0000000..7581b14
Binary files /dev/null and b/skin/default/Menu/GameShell/21_Indie Games/Planet-Busters.png differ
diff --git a/skin/default/Menu/GameShell/ChocoDM.png b/skin/default/Menu/GameShell/ChocoDM.png
new file mode 100644
index 0000000..1d6a9e3
Binary files /dev/null and b/skin/default/Menu/GameShell/ChocoDM.png differ
diff --git a/skin/default/Menu/GameShell/Indie Games.png b/skin/default/Menu/GameShell/Indie Games.png
new file mode 100644
index 0000000..deecb6b
Binary files /dev/null and b/skin/default/Menu/GameShell/Indie Games.png differ
diff --git a/skin/default/Menu/GameShell/Love2D.png b/skin/default/Menu/GameShell/Love2D.png
new file mode 100644
index 0000000..1f125d8
Binary files /dev/null and b/skin/default/Menu/GameShell/Love2D.png differ
diff --git a/skin/default/Menu/GameShell/PICO-8.png b/skin/default/Menu/GameShell/PICO-8.png
index 26b80d2..4c437bb 100644
Binary files a/skin/default/Menu/GameShell/PICO-8.png and b/skin/default/Menu/GameShell/PICO-8.png differ
diff --git a/skin/default/Menu/GameShell/PowerOFF.png b/skin/default/Menu/GameShell/PowerOFF.png
index 57ee7f9..3b05b4e 100644
Binary files a/skin/default/Menu/GameShell/PowerOFF.png and b/skin/default/Menu/GameShell/PowerOFF.png differ
diff --git a/skin/default/Menu/GameShell/TIC-80.png b/skin/default/Menu/GameShell/TIC-80.png
new file mode 100644
index 0000000..ef1aab4
Binary files /dev/null and b/skin/default/Menu/GameShell/TIC-80.png differ
diff --git a/skin/default/Menu/GameShell/Utils.png b/skin/default/Menu/GameShell/Utils.png
new file mode 100644
index 0000000..b9a7f7d
Binary files /dev/null and b/skin/default/Menu/GameShell/Utils.png differ
diff --git a/sys.py/UI/CommercialSoftwarePackage/__init__.py b/sys.py/UI/CommercialSoftwarePackage/__init__.py
index eb33084..6a412a5 100644
--- a/sys.py/UI/CommercialSoftwarePackage/__init__.py
+++ b/sys.py/UI/CommercialSoftwarePackage/__init__.py
@@ -27,10 +27,9 @@ from UI.constants import Width,Height,ICON_TYPES,RUNEVT,RESTARTUI
#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 UI.keys_def import CurKeys
+from UI.keys_def import CurKeys,IsKeyMenuOrB,IsKeyStartOrA
from UI.skin_manager import MySkinManager
from UI.lang_manager import MyLangManager
from UI.text_bulletinboard import Textbulletinboard,Text
@@ -50,7 +49,7 @@ class NotFoundPage(Page):
self._CanvasHWND = self._Screen._CanvasHWND
self._BGpng = IconItem()
- self._BGpng._ImgSurf = MyIconPool._Icons[self._BG]
+ self._BGpng._ImgSurf = MyIconPool.GiveIconSurface(self._BG)
self._BGpng._MyType = ICON_TYPES["STAT"]
self._BGpng._Parent = self
#print( MyIconPool.Width(self._BG),MyIconPool.Height(self._BG) )
@@ -144,7 +143,7 @@ class HashErrPage(Page):
self._CanvasHWND = self._Screen._CanvasHWND
self._BGpng = IconItem()
- self._BGpng._ImgSurf = MyIconPool._Icons[self._BG]
+ self._BGpng._ImgSurf = MyIconPool.GiveIconSurface(self._BG)
self._BGpng._MyType = ICON_TYPES["STAT"]
self._BGpng._Parent = self
self._BGpng.Adjust(0,0,MyIconPool.Width(self._BG),MyIconPool.Height(self._BG),0)
@@ -209,13 +208,13 @@ class HashErrPage(Page):
self._Board.SetAndBlitText(a.Words()+b.Words())
def KeyDown(self,event):
- if event.key == CurKeys["A"] or event.key == CurKeys["Menu"]:
+ if IsKeyMenuOrB(event.key):
self.ReturnToUpLevelPage()
self._Screen.Draw()
self._Screen.SwapAndShow()
return
- if event.key == CurKeys["B"]:
+ if IsKeyStartOrA(event.key):
self._Leader.InstallPackage(self._Screen)
return
diff --git a/sys.py/UI/Emulator/__init__.py b/sys.py/UI/Emulator/__init__.py
index b180722..fdf2935 100644
--- a/sys.py/UI/Emulator/__init__.py
+++ b/sys.py/UI/Emulator/__init__.py
@@ -70,7 +70,7 @@ class MyEmulator(object):
keyname = i.split(".")[0]
self._Icons[keyname] = pygame.image.load(basepath+"/"+i).convert_alpha()
"""
- self._Icons["sys"] = MyIconPool._Icons["sys"]
+ self._Icons["sys"] = MyIconPool.GiveIconSurface("sys")
def InitDeleteConfirmPage(self,main_screen):
diff --git a/sys.py/UI/Emulator/fav_list_page.py b/sys.py/UI/Emulator/fav_list_page.py
index f20735a..d49191e 100644
--- a/sys.py/UI/Emulator/fav_list_page.py
+++ b/sys.py/UI/Emulator/fav_list_page.py
@@ -11,7 +11,6 @@ from UI.constants import Width,Height,ICON_TYPES,RUNEVT
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,CmdClean,FileExists
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
from UI.multi_icon_item import MultiIconItem
@@ -94,7 +93,7 @@ class FavListPage(Page):
_Selector=None
_FootMsg = ["Nav","Remove","Scan","","Run"]
_MyList = []
- _ListFont = fonts["notosanscjk15"]
+ _ListFont = MyLangManager.TrFont("notosanscjk15")
_MyStack = None
_Emulator = None
_Parent = None
@@ -130,8 +129,11 @@ class FavListPage(Page):
stats = os.stat(v)
if stats.st_gid != self._Parent._FavGID: ## only favs
continue
+ try:
+ dirmap["gamedir"] = v.decode("utf8","ignore")
+ except:
+ dirmap["gamedir"] = v.decode("ascii","ignore")
- dirmap["gamedir"] = v.decode("utf8")
ret.append(dirmap)
if os.path.isfile(v) and self._Emulator["FILETYPE"] == "file":
stats = os.stat(v)
@@ -142,7 +144,11 @@ class FavListPage(Page):
pieces = bname.split(".")
if len(pieces) > 1:
if pieces[ len(pieces)-1 ].lower() in self._Emulator["EXT"]:
- dirmap["file"] = v.decode("utf8")
+ try:
+ dirmap["file"] = v.decode("utf8","ignore")
+ except:
+ dirmap["file"] = v.decode("ascii","ignore")
+
ret.append(dirmap)
# else:
@@ -228,7 +234,7 @@ class FavListPage(Page):
bgpng = IconItem()
- bgpng._ImgSurf = MyIconPool._Icons["star"]
+ bgpng._ImgSurf = MyIconPool.GiveIconSurface("star")
bgpng._MyType = ICON_TYPES["STAT"]
bgpng._Parent = self
bgpng.AddLabel(MyLangManager.Tr("MyFavGames"), MyLangManager.TrFont("varela18"))
@@ -336,7 +342,7 @@ class FavListPage(Page):
if self._Emulator["ROM_SO"] =="": #empty means No needs for rom so
pygame.event.post( pygame.event.Event(RUNEVT, message=cmdpath))
else:
- if FileExists(self._Emulator["ROM_SO"]):
+ if FileExists(self._Emulator["ROM_SO"].split(" ")[0]):
pygame.event.post( pygame.event.Event(RUNEVT, message=cmdpath))
else:
self._Screen.PushPage(self._RomSoConfirmDownloadPage)
diff --git a/sys.py/UI/Emulator/list_item.py b/sys.py/UI/Emulator/list_item.py
index e46df36..adc4886 100644
--- a/sys.py/UI/Emulator/list_item.py
+++ b/sys.py/UI/Emulator/list_item.py
@@ -8,7 +8,6 @@ import os
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
from UI.skin_manager import MySkinManager
diff --git a/sys.py/UI/Emulator/rom_list_page.py b/sys.py/UI/Emulator/rom_list_page.py
index fa89d06..6ba45ff 100644
--- a/sys.py/UI/Emulator/rom_list_page.py
+++ b/sys.py/UI/Emulator/rom_list_page.py
@@ -18,7 +18,6 @@ from UI.constants import Width,Height,ICON_TYPES,RUNEVT
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,CmdClean,FileExists
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
from UI.multi_icon_item import MultiIconItem
@@ -101,7 +100,7 @@ class RomListPage(Page):
_Selector=None
_FootMsg = ["Nav","Del","Scan","Back","Run","AddFav"]
_MyList = []
- _ListFont = fonts["notosanscjk15"]
+ _ListFont = MyLangManager.TrFont("notosanscjk15")
_MyStack = None
_Emulator = None
_Parent = None
@@ -144,7 +143,11 @@ class RomListPage(Page):
continue
if FileExists(v+"/"+gameshell_bat):
- dirmap["gamedir"] = v.decode("utf8")
+ try:
+ dirmap["gamedir"] = v.decode("utf8","ignore")
+ except:
+ dirmap["gamedir"] = v.decode("ascii","ignore")
+
ret.append(dirmap)
if os.path.isfile(v) and self._Emulator["FILETYPE"] == "file":
stats = os.stat(v)
@@ -163,7 +166,11 @@ class RomListPage(Page):
pieces = bname.split(".")
if len(pieces) > 1:
if pieces[ len(pieces)-1 ].lower() in self._Emulator["EXT"]:
- dirmap["file"] = v.decode("utf8")
+ try:
+ dirmap["file"] = v.decode("utf8","ignore")
+ except:
+ dirmap["file"] = v.decode("ascii","ignore")
+
ret.append(dirmap)
# else:
# print("not file or dir")
@@ -262,7 +269,7 @@ class RomListPage(Page):
bgpng = IconItem()
- bgpng._ImgSurf = MyIconPool._Icons["empty"]
+ bgpng._ImgSurf = MyIconPool.GiveIconSurface("empty")
bgpng._MyType = ICON_TYPES["STAT"]
bgpng._Parent = self
bgpng.AddLabel(MyLangManager.Tr("Please upload data over Wi-Fi"), MyLangManager.TrFont("varela22"))
@@ -377,7 +384,7 @@ class RomListPage(Page):
if self._Emulator["ROM_SO"] =="": #empty means No needs for rom so
pygame.event.post( pygame.event.Event(RUNEVT, message=cmdpath))
else:
- if FileExists(self._Emulator["ROM_SO"]):
+ if FileExists(self._Emulator["ROM_SO"].split(" ")[0]):
pygame.event.post( pygame.event.Event(RUNEVT, message=cmdpath))
else:
self._Screen.PushPage(self._RomSoConfirmDownloadPage)
diff --git a/sys.py/UI/Emulator/rom_so_confirm_page.py b/sys.py/UI/Emulator/rom_so_confirm_page.py
index 43af7dd..34db516 100644
--- a/sys.py/UI/Emulator/rom_so_confirm_page.py
+++ b/sys.py/UI/Emulator/rom_so_confirm_page.py
@@ -15,7 +15,6 @@ from libs.roundrects import aa_round_rect
from UI.confirm_page import ConfirmPage
from UI.download_process_page import DownloadProcessPage
from UI.keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
-from UI.fonts import fonts
from UI.multilabel import MultiLabel
from UI.lang_manager import MyLangManager
diff --git a/sys.py/UI/above_all_patch.py b/sys.py/UI/above_all_patch.py
index 0a28f69..55e172a 100644
--- a/sys.py/UI/above_all_patch.py
+++ b/sys.py/UI/above_all_patch.py
@@ -12,12 +12,12 @@ from icon_item import IconItem
from page import Page,PageStack
from title_bar import TitleBar
from foot_bar import FootBar
-from constants import Width,Height,bg_color
+from constants import Width,Height
from util_funcs import midRect
-from fonts import fonts
from keys_def import CurKeys
from label import Label
from skin_manager import MySkinManager
+from lang_manager import MyLangManager
from widget import Widget
@@ -28,7 +28,7 @@ class AboveAllPatch(Widget):
_Height=120
_Text =""
- _FontObj=fonts["veramono20"]
+ _FontObj= MyLangManager.TrFont("veramono20")
_Parent =None
_Color = MySkinManager.GiveColor('Text')
_ValColor = MySkinManager.GiveColor('URL')
diff --git a/sys.py/UI/confirm_page.py b/sys.py/UI/confirm_page.py
index d932510..56e2ba0 100644
--- a/sys.py/UI/confirm_page.py
+++ b/sys.py/UI/confirm_page.py
@@ -9,7 +9,6 @@ from libs.roundrects import aa_round_rect
from constants import Width,Height,ICON_TYPES
from page import Page,PageSelector
from label import Label
-from fonts import fonts
from util_funcs import midRect
from keys_def import CurKeys
from skin_manager import MySkinManager
diff --git a/sys.py/UI/constants.py b/sys.py/UI/constants.py
index ebf0e40..4e4df95 100644
--- a/sys.py/UI/constants.py
+++ b/sys.py/UI/constants.py
@@ -12,12 +12,10 @@ from pygame.locals import *
#from beeprint import pp
#UI lib
-from skin_manager import MySkinManager
Width = 320
Height = 240
-bg_color = MySkinManager.GiveColor('White')
icon_width = 80
icon_height = 80
diff --git a/sys.py/UI/counter_screen.py b/sys.py/UI/counter_screen.py
index b7a3928..36bcd69 100644
--- a/sys.py/UI/counter_screen.py
+++ b/sys.py/UI/counter_screen.py
@@ -6,17 +6,18 @@ import commands
## local package import
from constants import Width,Height,RUNSYS
from label import Label
-from fonts import fonts
+
from full_screen import FullScreen
from skin_manager import MySkinManager
+from lang_manager import MyLangManager
import config
class CounterScreen(FullScreen):
- _CounterFont = fonts["varela120"]
- _TextFont1 = fonts["varela15"]
- _TextFont2 = fonts["varela12"]
+ _CounterFont = MyLangManager.TrFont("varela120")
+ _TextFont1 = MyLangManager.TrFont("varela15")
+ _TextFont2 = MyLangManager.TrFont("varela12")
_TopLabel = None
_BottomLabel = None
diff --git a/sys.py/UI/delete_confirm_page.py b/sys.py/UI/delete_confirm_page.py
index b8167fa..177977a 100644
--- a/sys.py/UI/delete_confirm_page.py
+++ b/sys.py/UI/delete_confirm_page.py
@@ -9,7 +9,6 @@ import shutil
from constants import Width,Height,ICON_TYPES
from page import Page,PageSelector
from label import Label
-from fonts import fonts
from util_funcs import midRect
from keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
from confirm_page import ConfirmPage
diff --git a/sys.py/UI/download_process_page.py b/sys.py/UI/download_process_page.py
index db94c05..74e191a 100644
--- a/sys.py/UI/download_process_page.py
+++ b/sys.py/UI/download_process_page.py
@@ -13,7 +13,6 @@ from UI.constants import Width,Height,ICON_TYPES,RUNEVT
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,CmdClean,FileExists
from UI.keys_def import CurKeys, IsKeyMenuOrB
from UI.multi_icon_item import MultiIconItem
@@ -59,14 +58,14 @@ class DownloadProcessPage(Page):
self._PngSize["needwifi_bg"] = (253,132)
bgpng = IconItem()
- bgpng._ImgSurf = MyIconPool._Icons["rom_download"]
+ bgpng._ImgSurf = MyIconPool.GiveIconSurface("rom_download")
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
needwifi_bg = IconItem()
- needwifi_bg._ImgSurf = MyIconPool._Icons["needwifi_bg"]
+ needwifi_bg._ImgSurf = MyIconPool.GiveIconSurface("needwifi_bg")
needwifi_bg._MyType = ICON_TYPES["STAT"]
needwifi_bg._Parent = self
needwifi_bg.Adjust(0,0,self._PngSize["needwifi_bg"][0],self._PngSize["needwifi_bg"][1],0)
@@ -76,11 +75,11 @@ class DownloadProcessPage(Page):
self._FileNameLabel = Label()
self._FileNameLabel.SetCanvasHWND(self._CanvasHWND)
- self._FileNameLabel.Init("", fonts["varela12"])
+ self._FileNameLabel.Init("", MyLangManager.TrFont("varela12"))
self._SizeLabel = Label()
self._SizeLabel.SetCanvasHWND(self._CanvasHWND)
- self._SizeLabel.Init("0/0Kb",fonts["varela12"])
+ self._SizeLabel.Init("0/0Kb",MyLangManager.TrFont("varela12"))
self._SizeLabel.SetColor( self._URLColor )
diff --git a/sys.py/UI/fonts.py b/sys.py/UI/fonts.py
deleted file mode 100644
index 13903e1..0000000
--- a/sys.py/UI/fonts.py
+++ /dev/null
@@ -1,67 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import pygame
-from pygame.locals import *
-from sys import exit
-import os
-import sys
-
-import config
-
-if not pygame.font.get_init():
- pygame.font.init()
-
-fonts = {}
-if not fonts:
- skinpath = "../skin/"+config.SKIN+"/truetype"
- fonts_path = {}
-
- fonts_path["varela"] = "%s/VarelaRound-Regular.ttf" % skinpath
- fonts_path["veramono"] = "%s/VeraMono.ttf" % skinpath
- fonts_path["noto"] = "%s/NotoSansMono-Regular.ttf" % skinpath
- fonts_path["notocjk"] = "%s/NotoSansCJK-Regular.ttf" % skinpath
-
- fonts["varela10"] = pygame.font.Font(fonts_path["varela"],10)
- fonts["varela11"] = pygame.font.Font(fonts_path["varela"],11)
- fonts["varela12"] = pygame.font.Font(fonts_path["varela"],12)
- fonts["varela13"] = pygame.font.Font(fonts_path["varela"],13)
- fonts["varela14"] = pygame.font.Font(fonts_path["varela"],14)
- fonts["varela15"] = pygame.font.Font(fonts_path["varela"],15)
-
- fonts["varela16"] = pygame.font.Font(fonts_path["varela"],16)
- fonts["varela18"] = pygame.font.Font(fonts_path["varela"],18)
- fonts["varela20"] = pygame.font.Font(fonts_path["varela"],20)
- fonts["varela22"] = pygame.font.Font(fonts_path["varela"],22)
- fonts["varela23"] = pygame.font.Font(fonts_path["varela"],23)
- fonts["varela24"] = pygame.font.Font(fonts_path["varela"],24)
- fonts["varela25"] = pygame.font.Font(fonts_path["varela"],25)
- fonts["varela26"] = pygame.font.Font(fonts_path["varela"],26)
- fonts["varela27"] = pygame.font.Font(fonts_path["varela"],27)
- fonts["varela28"] = pygame.font.Font(fonts_path["varela"],28)
- fonts["varela34"] = pygame.font.Font(fonts_path["varela"],34)
- fonts["varela40"] = pygame.font.Font(fonts_path["varela"],40)
- fonts["varela120"] = pygame.font.Font(fonts_path["varela"],120)
-
- fonts["veramono25"] = pygame.font.Font(fonts_path["veramono"],25)
- fonts["veramono24"] = pygame.font.Font(fonts_path["veramono"],24)
- fonts["veramono23"] = pygame.font.Font(fonts_path["veramono"],23)
- fonts["veramono22"] = pygame.font.Font(fonts_path["veramono"],22)
- fonts["veramono21"] = pygame.font.Font(fonts_path["veramono"],21)
- fonts["veramono20"] = pygame.font.Font(fonts_path["veramono"],20)
- fonts["veramono18"] = pygame.font.Font(fonts_path["veramono"],18)
- fonts["veramono16"] = pygame.font.Font(fonts_path["veramono"],16)
- fonts["veramono15"] = pygame.font.Font(fonts_path["veramono"],15)
- fonts["veramono14"] = pygame.font.Font(fonts_path["veramono"],14)
- fonts["veramono13"] = pygame.font.Font(fonts_path["veramono"],13)
- fonts["veramono12"] = pygame.font.Font(fonts_path["veramono"],12)
- fonts["veramono11"] = pygame.font.Font(fonts_path["veramono"],11)
- fonts["veramono10"] = pygame.font.Font(fonts_path["veramono"],10)
-
- for i in range(10,28):
- fonts["notosansmono"+str(i)] = pygame.font.Font(fonts_path["noto"],i)
-
- for i in range(10,28):
- fonts["notosanscjk"+str(i)] = pygame.font.Font(fonts_path["notocjk"],i)
-
- fonts["arial"] = pygame.font.SysFont("arial",16)
-
diff --git a/sys.py/UI/foot_bar.py b/sys.py/UI/foot_bar.py
index 2e80e5e..4b25afc 100644
--- a/sys.py/UI/foot_bar.py
+++ b/sys.py/UI/foot_bar.py
@@ -6,15 +6,18 @@ import os
##local import
from constants import Width,Height,ICON_TYPES,ALIGN
-from util_funcs import FileExists,midRect,SkinMap
+from util_funcs import FileExists,midRect
from icon_item import IconItem
-from fonts import fonts
from multi_icon_item import MultiIconItem
from icon_pool import MyIconPool
from libs.roundrects import aa_round_rect
from lang_manager import MyLangManager
from widget import Widget
-icon_base_path = SkinMap("gameshell/footbar_icons/")
+from skin_manager import MySkinManager
+
+import config
+
+icon_base_path = MySkinManager.GiveIcon("gameshell/footbar_icons/")
class FootBarIcon(MultiIconItem):
@@ -93,7 +96,7 @@ class FootBar(Widget):
round_corners._MyType = ICON_TYPES["STAT"]
round_corners._Parent = self
- round_corners._ImgSurf = MyIconPool._Icons["roundcorners"]
+ round_corners._ImgSurf = MyIconPool.GiveIconSurface("roundcorners")
round_corners.Adjust(0,0,10,10,0)
self._Icons["round_corners"] = round_corners
@@ -133,7 +136,10 @@ class FootBar(Widget):
self.Draw()
def SetLabelTexts(self,texts):
- barr = ["nav","y","x","b","a","select"]
+ if config.ButtonsLayout == "xbox":
+ barr = ["nav","y","x","b","a","select"]
+ else:
+ barr = ["nav","x","y","a","b","select"]
texts2 = texts + [""] if len(texts) == 5 else texts
for idx,x in enumerate(barr):
diff --git a/sys.py/UI/icon_pool.py b/sys.py/UI/icon_pool.py
index dc04b1c..effd54c 100644
--- a/sys.py/UI/icon_pool.py
+++ b/sys.py/UI/icon_pool.py
@@ -6,12 +6,12 @@ from sys import exit
import os
import sys
-from util_funcs import SkinMap
+from skin_manager import MySkinManager
##pool only store surfaces
class IconPool(object):
- _GameShellIconPath = SkinMap("gameshell/icons/")
+ _GameShellIconPath = MySkinManager.GiveIcon("gameshell/icons/")
_Icons = {}
_Sizes = {}
def __init__(self):
@@ -33,7 +33,20 @@ class IconPool(object):
def Height(self,keyname):
if keyname in self._Sizes:
return self._Sizes[keyname][1]
-
+
+ def GiveIconSurface(self,imgname): ## imgname is the png file name without .png
+ if imgname in self._Icons:
+ return self._Icons[imgname]
+ else:
+ icon_file = MySkinManager.GiveIcon("gameshell/icons/"+imgname+".png")
+ if os.path.isfile(icon_file):
+ keyname = imgname
+ self._Icons[keyname] = pygame.image.load(icon_file).convert_alpha()
+ self._Sizes[keyname] = self._Icons[keyname].get_size()
+ return self._Icons[keyname]
+
+ return None # this will cause panic,if not found both in theme and default skin folder
+
##global Handler
MyIconPool = None
diff --git a/sys.py/UI/keyboard.py b/sys.py/UI/keyboard.py
index 6bc2027..51aa395 100644
--- a/sys.py/UI/keyboard.py
+++ b/sys.py/UI/keyboard.py
@@ -8,7 +8,6 @@ from libs import easing
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, IsKeyStartOrA, IsKeyMenuOrB
from UI.icon_item import IconItem
@@ -108,7 +107,7 @@ class Keyboard(Page):
self._Width = self._Screen._Width
self._Height = self._Screen._Height
- fontobj = fonts["veramono24"]
+ fontobj = MySkinManager.GiveFont("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
@@ -129,7 +128,7 @@ class Keyboard(Page):
if val == "_L" or val == "_R":
it = KeyboardIcon()
- it._ImgSurf = MyIconPool._Icons[val]
+ it._ImgSurf = MyIconPool.GiveIconSurface(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)
@@ -141,7 +140,7 @@ class Keyboard(Page):
else:
if val == "_S":
val = "Space"
- ti._FontObj = fonts["veramono15"]
+ ti._FontObj = MySkinManager.GiveFont("veramono15")
ti._Bold = True
cur_alpha_size = ti._FontObj.size( val)
diff --git a/sys.py/UI/keys_def.py b/sys.py/UI/keys_def.py
index dc59b53..176adc5 100644
--- a/sys.py/UI/keys_def.py
+++ b/sys.py/UI/keys_def.py
@@ -6,9 +6,8 @@ from sys import exit
import os
import sys
-
-from config import CurKeySet
-
+import config
+from config import CurKeySet ## read only
def GetButtonsLayoutMode():
lm = "xbox"
@@ -25,6 +24,7 @@ def SetButtonsLayoutMode(mode):
SetXYABButtons(mode)
with open(".buttonslayout", "w") as f:
f.write(mode)
+ config.ButtonsLayout = mode
def SetXYABButtons(mode):
if mode == "snes":
diff --git a/sys.py/UI/lang_manager.py b/sys.py/UI/lang_manager.py
index 5a027e7..cacef47 100644
--- a/sys.py/UI/lang_manager.py
+++ b/sys.py/UI/lang_manager.py
@@ -3,8 +3,8 @@ import os
import pygame
import config
import ConfigParser
+from skin_manager import MySkinManager
from util_funcs import FileExists
-from fonts import fonts
class CaseConfigParser(ConfigParser.SafeConfigParser):
def optionxform(self, optionstr):
@@ -97,12 +97,13 @@ class LangManager(object):
raise Exception('font string format error')
if "English.ini" in self._ConfigFileName:
- return fonts[orig_font_str]
+ return MySkinManager.GiveFont(orig_font_str)
else:
if font_size_number > 28:
- raise Exception('cjk font string format error '+ str(font_size_number))
-
- return fonts["notosanscjk"+str(font_size_number)]
+ # raise Exception('cjk font string format error '+ str(font_size_number))
+ return MySkinManager.GiveFont(orig_font_str)
+ else:
+ return MySkinManager.GiveFont("notosanscjk%d" % font_size_number)
##global MyLangManager Handler
MyLangManager = None
diff --git a/sys.py/UI/main_screen.py b/sys.py/UI/main_screen.py
index ffb96bc..3348c63 100644
--- a/sys.py/UI/main_screen.py
+++ b/sys.py/UI/main_screen.py
@@ -19,8 +19,8 @@ from icon_item import IconItem
from page import Page,PageStack
from title_bar import TitleBar
from foot_bar import FootBar
-from constants import Width,Height,bg_color
-from util_funcs import midRect,FileExists,ReplaceSuffix,ReadTheFileContent,CmdClean,MakeExecutable,SkinMap
+from constants import Width,Height
+from util_funcs import midRect,FileExists,ReplaceSuffix,ReadTheFileContent,CmdClean,MakeExecutable
from keys_def import CurKeys
from label import Label
from untitled_icon import UntitledIcon
@@ -454,7 +454,7 @@ class MainScreen(Widget):
files = os.listdir(_dir)
for i in sorted(files):
- if os.path.isdir(_dir+"/"+i): # TOPLEVEL only is dir
+ if os.path.isdir(_dir+"/"+i) and i.startswith(".") == False: # TOPLEVEL only is dir
if pglevel == 0:
page = Page()
page._Name = self.ExtraName(i)
@@ -469,8 +469,8 @@ class MainScreen(Widget):
iconitem.AddLabel(MyLangManager.Tr(i2),self._IconFont)
if FileExists( _dir+"/"+i+"/"+i2+".png"): ### 20_Prog/Prog.png , cut 20_
iconitem._ImageName = _dir+"/"+i+"/"+i2+".png"
- elif FileExists( SkinMap(_dir+"/"+i2+".png") ):
- iconitem._ImageName = SkinMap(_dir+"/"+i2+".png")
+ elif FileExists( MySkinManager.GiveIcon(_dir+"/"+i2+".png") ):
+ iconitem._ImageName = MySkinManager.GiveIcon(_dir+"/"+i2+".png")
else:
untitled = UntitledIcon()
untitled.Init()
@@ -567,7 +567,7 @@ class MainScreen(Widget):
cur_page._Icons.append(iconitem)
self.ReadTheDirIntoPages(_dir+"/"+i,pglevel+1,iconitem._LinkPage)
- elif os.path.isfile(_dir+"/"+i) and pglevel > 0:
+ elif os.path.isfile(_dir+"/"+i) and i.startswith(".") == False and pglevel > 0:
if i.lower().endswith(icon_ext):
i2 = self.ExtraName(i)
@@ -577,8 +577,8 @@ class MainScreen(Widget):
iconitem._CmdPath = os.path.realpath(_dir+"/"+i)
MakeExecutable(iconitem._CmdPath)
iconitem._MyType = ICON_TYPES["EXE"]
- if FileExists( SkinMap( _dir+"/"+ReplaceSuffix(i2,"png"))):
- iconitem._ImageName = SkinMap(_dir+"/"+ReplaceSuffix(i2,"png"))
+ if FileExists( MySkinManager.GiveIcon( _dir+"/"+ReplaceSuffix(i2,"png"))):
+ iconitem._ImageName = MySkinManager.GiveIcon(_dir+"/"+ReplaceSuffix(i2,"png"))
else:
untitled = UntitledIcon()
untitled.Init()
diff --git a/sys.py/UI/multi_icon_item.py b/sys.py/UI/multi_icon_item.py
index 58b2af1..9400b46 100644
--- a/sys.py/UI/multi_icon_item.py
+++ b/sys.py/UI/multi_icon_item.py
@@ -43,7 +43,11 @@ class MultiIconItem(IconItem):
self._PosY+self._Parent._PosY,
self._Width,self._Height),
(0,self._IconIndex*self._IconHeight,self._IconWidth,self._IconHeight))
-
+
+ def DrawRect(self,rect1,rect2):
+ if self._ImgSurf != None:
+ self._Parent._CanvasHWND.blit(self._ImgSurf,rect1,rect2)
+
def Draw(self):
if self._Align==ALIGN["VCenter"]: #default
if self._Label != None:
diff --git a/sys.py/UI/page.py b/sys.py/UI/page.py
index 5443812..8986b12 100644
--- a/sys.py/UI/page.py
+++ b/sys.py/UI/page.py
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# -*- coding: utf-8 -*-
import pygame
from pygame.locals import *
@@ -6,104 +6,120 @@ from sys import exit
import os
import sys
import math
+import fnmatch
+import random
+
from libs import easing
-#import base64
-#from beeprint import pp
+# import base64
+# from beeprint import pp
-### local import
-from constants import ALIGN,icon_width,icon_height,Width,Height,ICON_TYPES
-from util_funcs import midRect
-from keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
-from icon_pool import MyIconPool
+# local import
+from constants import ALIGN, icon_width, icon_height, Width, Height, ICON_TYPES
+from util_funcs import midRect
+from keys_def import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
+from icon_pool import MyIconPool
from lang_manager import MyLangManager
-from widget import Widget
+from widget import Widget
+
class PageStack:
def __init__(self):
self.stack = list()
- def Push(self,data):
+ 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
-
+ if len(self.stack) <= 0:
+ return None, False
+ return self.stack.pop(), True
+
def Length(self):
return len(self.stack)
+
class PageSelector(Widget):
_Parent = None
- _Alpha = 0
+ _Alpha = 0
_OnShow = True
- _IconSurf = None
+ _IconSurf = None
+
def __init__(self):
pass
- def Init(self,x,y,w,h,alpha):
- self._PosX = x
- self._PosY = y
- self._Width = w
- self._Height = h
- self._Alpha = alpha
+ def Init(self, x, y, w, h, alpha):
+ self._PosX = x
+ self._PosY = y
+ self._Width = w
+ self._Height = h
+ self._Alpha = alpha
- def Adjust(self,x,y,w,h,alpha):
- self._PosX = x
- self._PosY = y
- self._Width = w
- self._Height = h
- self._Alpha = alpha
+ def Adjust(self, x, y, w, h, alpha):
+ self._PosX = x
+ self._PosY = y
+ self._Width = w
+ self._Height = h
+ self._Alpha = alpha
def Draw(self):
- canvas = self._Parent._CanvasHWND
- idx = self._Parent._PsIndex
+ canvas = self._Parent._CanvasHWND
+ idx = self._Parent._PsIndex
iconidx = self._Parent._IconIndex
if idx < len(self._Parent._Icons):
- x = self._Parent._Icons[idx]._PosX+self._Parent._PosX
- y = self._Parent._Icons[iconidx]._PosY ## only use current icon's PosY
-
- rect = midRect(x,y,self._Width,self._Height,self._Parent._Width,self._Parent._Height)
- if rect.width <=0 or rect.height <= 0 :
+ x = self._Parent._Icons[idx]._PosX+self._Parent._PosX
+ # only use current icon's PosY
+ y = self._Parent._Icons[iconidx]._PosY
+
+ rect = midRect(x, y, self._Width, self._Height,
+ self._Parent._Width, self._Parent._Height)
+ if rect.width <= 0 or rect.height <= 0:
return
- #color = (244,197,66,50)
- #pygame.draw.rect(canvas,color,rect,1)
+ # color = (244,197,66,50)
+ # pygame.draw.rect(canvas,color,rect,1)
if self._IconSurf != None:
- self._Parent._CanvasHWND.blit(self._IconSurf,rect)
-
+ self._Parent._CanvasHWND.blit(self._IconSurf, rect)
+
+
class Page(Widget):
_Icons = []
_Ps = None
_PsIndex = 0
_IconNumbers = 0
- _IconIndex = 0 ## shows which icon current selected, the Selector can not move here
- _PrevIconIndex = 0 ## for remember the Highlighted Icon ,restore it's PosY to average
+ _IconIndex = 0 # shows which icon current selected, the Selector can not move here
+ _PrevIconIndex = 0 # for remember the Highlighted Icon ,restore it's PosY to average
_Index = 0
_Align = ALIGN["SLeft"]
- _CanvasHWND = None #
- _HWND = None #
- _OnShow = False
- _Name = ""
- _Screen = None ## Should be the Screen Class
+ _CanvasHWND = None
+ _HWND = None
+ _OnShow = False
+ _Name = ""
+ _Screen = None # Should be the Screen Class
_PageIconMargin = 20
- _FootMsg = ["Nav","","","","Enter"] ## Default Page Foot info
-
- _SelectedIconTopOffset=20
- _EasingDur = 30
- _Padding = pygame.Rect(0,0,0,0)# x,y,w,h
- _Margin = pygame.Rect(0,0,0,0)
+ _FootMsg = ["Nav", "", "", "", "Enter"] # Default Page Foot info
+ _Wallpaper = None
+ _SelectedIconTopOffset = 20
+ _EasingDur = 30
+ _Padding = pygame.Rect(0, 0, 0, 0) # x,y,w,h
+ _Margin = pygame.Rect(0, 0, 0, 0)
_ScrollStep = 1
-
+
def __init__(self):
self._Icons = []
+ path = '/home/cpi/launcher/skin/default/Menu/GameShell/Wallpaper/'
+
+ if os.path.exists(path):
+ image = os.listdir(path)[0]
+ if image:
+ self._Wallpaper = pygame.transform.scale(pygame.image.load(path+image).convert(), (320,240))
+
def AdjustHLeftAlign(self): ## adjust coordinator and append the PageSelector
@@ -131,7 +147,7 @@ class Page(Widget):
cnt+=1
ps = PageSelector()
- ps._IconSurf = MyIconPool._Icons["blueselector"]
+ ps._IconSurf = MyIconPool.GiveIconSurface("blueselector")
ps._Parent = self
ps.Init(icon_width/2, TitleBar._BarHeight+icon_height/2,92,92,128)
self._Ps = ps
@@ -155,7 +171,7 @@ class Page(Widget):
it._ImgSurf = pygame.transform.smoothscale(it._ImgSurf,(it._Width,it._Height))
ps = PageSelector()
- ps._IconSurf = MyIconPool._Icons["blueselector"]
+ ps._IconSurf = MyIconPool.GiveIconSurface("blueselector")
ps._Parent = self
ps.Init(start_x,start_y,92,92,128)
@@ -185,7 +201,7 @@ class Page(Widget):
it._Parent = self
it._Index = 0
it.Adjust(start_x,start_y,icon_width,icon_height,0)
- #it._ImgSurf = pygame.transform.smoothscale(it._ImgSurf,(it._Width,it._Height))
+ # it._ImgSurf = pygame.transform.smoothscale(it._ImgSurf,(it._Width,it._Height))
elif self._IconNumbers == 2:
start_x = (self._Width - self._PageIconMargin - self._IconNumbers*icon_width) / 2 + icon_width/2
@@ -196,7 +212,7 @@ class Page(Widget):
it._Parent = self
it._Index = i
it.Adjust(start_x+i*self._PageIconMargin + i*icon_width,start_y, icon_width, icon_height,0)
- #it._ImgSurf = pygame.transform.smoothscale(it._ImgSurf,(it._Width,it._Height))
+ # it._ImgSurf = pygame.transform.smoothscale(it._ImgSurf,(it._Width,it._Height))
elif self._IconNumbers > 2:
for i in range(0,self._IconNumbers):
@@ -204,10 +220,10 @@ class Page(Widget):
it._Parent = self
it._Index = i
it.Adjust(start_x+i*self._PageIconMargin + i*icon_width,start_y,icon_width,icon_height,0)
- #it._ImgSurf = pygame.transform.smoothscale(it._ImgSurf,(it._Width,it._Height))
+ # it._ImgSurf = pygame.transform.smoothscale(it._ImgSurf,(it._Width,it._Height))
ps = PageSelector()
- ps._IconSurf = MyIconPool._Icons["blueselector"]
+ ps._IconSurf = MyIconPool.GiveIconSurface("blueselector")
ps._Parent = self
ps.Init(start_x,start_y,92,92,128)
@@ -245,7 +261,7 @@ class Page(Widget):
cnt+=1
ps = PageSelector()
- ps._IconSurf = MyIconPool._Icons["blueselector"]
+ ps._IconSurf = MyIconPool.GiveIconSurface("blueselector")
ps._Parent = self
ps.Init(icon_width/2,icon_height/2,92,92,128)
self._Ps = ps
@@ -268,7 +284,7 @@ class Page(Widget):
it.Adjust(start_x+i*icon_width,start_y,icon_width,icon_height,0)
ps = PageSelector()
- ps._IconSurf = MyIconPool._Icons["blueselector"]
+ ps._IconSurf = MyIconPool.GiveIconSurface("blueselector")
ps._Parent = self
ps.Init(start_x,start_y,92,92,128)
self._Ps = ps
@@ -287,7 +303,7 @@ class Page(Widget):
ps = PageSelector()
- ps._IconSurf = MyIconPool._Icons["blueselector"]
+ ps._IconSurf = MyIconPool.GiveIconSurface("blueselector")
ps._Parent = self
ps.Init(start_x,start_y-self._SelectedIconTopOffset,92,92,128)
@@ -323,7 +339,7 @@ class Page(Widget):
if self._IconNumbers > 0:
ps = PageSelector()
- ps._IconSurf = MyIconPool._Icons["blueselector"]
+ ps._IconSurf = MyIconPool.GiveIconSurface("blueselector")
ps._Parent = self
ps.Init(start_x,start_y,icon_width+4,icon_height+4,128)
self._Ps = ps
@@ -477,25 +493,20 @@ class Page(Widget):
self._Ps.Draw()
def MoveIconIndexPrev(self):
-
+ self._PrevIconIndex = self._IconIndex
self._IconIndex-=1
if self._IconIndex < 0:
- self._IconIndex = 0
- self._PrevIconIndex = self._IconIndex
+ self._IconIndex = max(0, self._IconNumbers - 1) # Wrap Icon Index
return False
- self._PrevIconIndex = self._IconIndex+1
return True
def MoveIconIndexNext(self):
- #True for Moved,False is boundary
+ self._PrevIconIndex = self._IconIndex
self._IconIndex+=1
if self._IconIndex > (self._IconNumbers - 1):
- self._IconIndex = self._IconNumbers -1
- self._PrevIconIndex = self._IconIndex
+ self._IconIndex = 0 # Wrap Icon Index
return False
- self._PrevIconIndex = self._IconIndex-1
return True
-
def IconClick(self):
@@ -517,7 +528,7 @@ class Page(Widget):
self._Screen._CurrentPage = child_page
elif cur_icon._MyType == ICON_TYPES["FUNC"]:
print("IconClick API: %d"%(cur_icon._Index))
- #print("%s"% cur_icon._CmdPath)
+ # print("%s"% cur_icon._CmdPath)
api_cb = getattr(cur_icon._CmdPath,"API",None)
if api_cb != None:
if callable(api_cb):
@@ -528,7 +539,7 @@ class Page(Widget):
def ReturnToUpLevelPage(self):
pop_page,ok = self._Screen._MyPageStack.Pop()
if ok == True:
- #self._Screen._CurrentPage.ResetPageSelector()
+ # self._Screen._CurrentPage.ResetPageSelector()
pop_page.Draw()
self._Screen._CurrentPage = pop_page
on_return_back_cb = getattr(self._Screen._CurrentPage,"OnReturnBackCb",None)
@@ -543,8 +554,12 @@ class Page(Widget):
print("OnTopLevel ",self._Screen._PageIndex)
def ClearCanvas(self):
- self._CanvasHWND.fill(self._Screen._SkinManager.GiveColor("White"))
-
+ if self._Wallpaper:
+ self._CanvasHWND.blit(self._Wallpaper,(0,0))
+ else:
+ self._CanvasHWND.fill(self._Screen._SkinManager.GiveColor("White"))
+
+
def ClearIcons(self):
for i in range(0,self._IconNumbers):
self._Icons[i].Clear()
@@ -553,7 +568,7 @@ class Page(Widget):
for i in range(0,self._IconNumbers):
self._Icons[i].Draw()
- ##make sure the Class has the _MyList
+ # make sure the Class has the _MyList
def ScrollDown(self):
if len(self._MyList) == 0:
return
@@ -614,25 +629,36 @@ class Page(Widget):
if event.key == CurKeys["Right"]:
if self.MoveIconIndexNext() == True:
if self._IconIndex == (self._IconNumbers -1) or self._PrevIconIndex == 0:
- self.IconSmoothUp(icon_width+ self._PageIconMargin) # only move up selected icon,no horizontal translation
+ self.IconSmoothUp(icon_width + self._PageIconMargin)
else:
self.IconsEasingLeft(icon_width + self._PageIconMargin)
+ else:
+ screen_icons = int(math.floor(self._Screen._Width / (icon_width + self._PageIconMargin)))
+ if self._IconNumbers > screen_icons:
+ self.IconsEasingRight((icon_width + self._PageIconMargin) * (self._IconNumbers - screen_icons))
+ elif self._IconNumbers > 0:
+ self.IconSmoothUp(icon_width+ self._PageIconMargin)
- self._PsIndex = self._IconIndex
- self._Screen.Draw()
- self._Screen.SwapAndShow()
-
+ self._PsIndex = self._IconIndex
+ self._Screen.Draw()
+ self._Screen.SwapAndShow()
if event.key == CurKeys["Left"]:
if self.MoveIconIndexPrev() == True:
if self._IconIndex == 0 or self._PrevIconIndex == (self._IconNumbers -1):
- self.IconSmoothUp(icon_width+ self._PageIconMargin)
+ self.IconSmoothUp(icon_width + self._PageIconMargin)
else:
self.IconsEasingRight(icon_width + self._PageIconMargin)
+ else:
+ screen_icons = int(math.floor(self._Screen._Width / (icon_width + self._PageIconMargin)))
+ if self._IconNumbers > screen_icons:
+ self.IconsEasingLeft((icon_width + self._PageIconMargin) * (self._IconNumbers - screen_icons))
+ elif self._IconNumbers > 0:
+ self.IconSmoothUp(icon_width+ self._PageIconMargin)
- self._PsIndex = self._IconIndex
- self._Screen.Draw()
- self._Screen.SwapAndShow()
+ self._PsIndex = self._IconIndex
+ self._Screen.Draw()
+ self._Screen.SwapAndShow()
if IsKeyStartOrA(event.key):
self.IconClick()
@@ -644,4 +670,3 @@ class Page(Widget):
self.DrawIcons()
self.DrawPageSelector()
-
diff --git a/sys.py/UI/skin_manager.py b/sys.py/UI/skin_manager.py
index 1deee6a..7064d4e 100644
--- a/sys.py/UI/skin_manager.py
+++ b/sys.py/UI/skin_manager.py
@@ -4,6 +4,8 @@ import pygame
import config
import ConfigParser
+from util_funcs import FileExists
+
class CaseConfigParser(ConfigParser.SafeConfigParser):
def optionxform(self, optionstr):
return optionstr
@@ -21,7 +23,9 @@ class SkinManager(object):
_Colors = {}
_Config = None
-
+ _Fonts = {}
+ DefaultSkin = "../skin/default"
+
def __init__(self):
self.Init()
@@ -33,7 +37,39 @@ class SkinManager(object):
def Init(self):
if not SkinManager._Colors:
self.SetColors()
+ if not SkinManager._Fonts:
+ self.SetFonts()
+
+ def SetFonts(self):
+ if not pygame.font.get_init():
+ pygame.font.init()
+
+ skinpath = config.SKIN+"/truetype"
+ fonts_path = {}
+ fonts_path["varela"] = "%s/VarelaRound-Regular.ttf" % skinpath
+ print(fonts_path["varela"])
+ fonts_path["veramono"] = "%s/VeraMono.ttf" % skinpath
+ fonts_path["noto"] = "%s/NotoSansMono-Regular.ttf" % skinpath
+ fonts_path["notocjk"] = "%s/NotoSansCJK-Regular.ttf" % skinpath
+
+ for i in range(10,29):
+ self._Fonts["varela%d"%i] = pygame.font.Font(fonts_path["varela"],i)
+
+ self._Fonts["varela34"] = pygame.font.Font(fonts_path["varela"],34)
+ self._Fonts["varela40"] = pygame.font.Font(fonts_path["varela"],40)
+ self._Fonts["varela120"] = pygame.font.Font(fonts_path["varela"],120)
+
+ for i in range(10,26):
+ self._Fonts["veramono%d"%i] = pygame.font.Font(fonts_path["veramono"],i)
+
+ for i in range(10,28):
+ self._Fonts["notosansmono%d"%i] = pygame.font.Font(fonts_path["noto"],i)
+ for i in range(10,28):
+ self._Fonts["notosanscjk%d"%i] = pygame.font.Font(fonts_path["notocjk"],i)
+
+ self._Fonts["arial"] = pygame.font.SysFont("arial",16)
+
def SetColors(self):
Colors = {}
Colors["High"] = pygame.Color(51, 166, 255)
@@ -52,7 +88,7 @@ class SkinManager(object):
self._Config = CaseConfigParser()
- fname = "../skin/"+config.SKIN+"/config.cfg"
+ fname = config.SKIN+"/config.ini"
try:
self._Config.read(fname)
@@ -72,13 +108,49 @@ class SkinManager(object):
print("error in ConvertToRGB %s" % str(e))
continue
+ def GiveFont(self,name):
+ return SkinManager._Fonts[name]
+
def GiveColor(self,name):
if name in SkinManager._Colors:
return SkinManager._Colors[name]
else:
return pygame.Color(255,0,0)
-
+ def GiveIcon(self,orig_file_or_dir): ## return is string,not Surface
+ #doing a wrapper for items under /home/cpi/apps/Menu/*, to be like Menu/GameShell/*
+ if orig_file_or_dir.startswith("/home/cpi/apps/Menu"):
+ orig_file_or_dir = orig_file_or_dir.replace("/home/cpi/apps/Menu/","../Menu/GameShell/")
+
+ if orig_file_or_dir.startswith(".."):
+ ret = orig_file_or_dir.replace("..",config.SKIN)
+ if FileExists(ret) == False:
+ ret = orig_file_or_dir.replace("..",self.DefaultSkin)
+ else:
+ ret = config.SKIN+"/sys.py/"+orig_file_or_dir
+ if FileExists(ret) == False:
+ ret = self.DefaultSkin+"/sys.py/"+orig_file_or_dir
+
+ if FileExists( ret ):
+ return ret
+ else: ## if not existed both in default or custom skin ,return where it is
+ return orig_file_or_dir
+
+ def GiveWallpaper(self,png_name):
+ #first SKIN/wallpapers/xxxx.png
+ #second ../skin/default/wallpapers/xxxx.png
+ #finnal gameshell/wallpaper/xxxx.png
+ #loading.png,seeyou.png,updating.png,gameover.png,desktopbg.png
+ wlp = "/wallpaper/"
+ if FileExists(config.SKIN+wlp+png_name):
+ return config.SKIN+wlp+png_name
+ elif FileExists(self.DefaultSkin+wlp+png_name):
+ return self.DefaultSkin+wlp+png_name
+ else:
+ return "gameshell/wallpaper/"+png_name
+
+
+
##global MySkinManager Handler
MySkinManager = None
diff --git a/sys.py/UI/text_bulletinboard.py b/sys.py/UI/text_bulletinboard.py
index 408d840..52f9c86 100644
--- a/sys.py/UI/text_bulletinboard.py
+++ b/sys.py/UI/text_bulletinboard.py
@@ -6,7 +6,6 @@ from libs.roundrects import aa_round_rect
## local UI import
from page import Page,PageStack,PageSelector
from label import Label
-from fonts import fonts
from skin_manager import MySkinManager
from lang_manager import MyLangManager
from widget import Widget
diff --git a/sys.py/UI/textarea.py b/sys.py/UI/textarea.py
index 7b96fd1..5708223 100644
--- a/sys.py/UI/textarea.py
+++ b/sys.py/UI/textarea.py
@@ -6,8 +6,8 @@ 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
from UI.skin_manager import MySkinManager
+from UI.lang_manager import MyLangManager
from UI.widget import Widget
class Textarea(Widget):
@@ -26,7 +26,7 @@ class Textarea(Widget):
pass
def Init(self):
- self._FontObj = fonts["veramono24"]
+ self._FontObj = MyLangManager.TrFont("veramono24")
#pygame.font.Font(fonts_path["veramono"],24)
def SubTextIndex(self):
diff --git a/sys.py/UI/title_bar.py b/sys.py/UI/title_bar.py
index 18a0514..cfe3c96 100644
--- a/sys.py/UI/title_bar.py
+++ b/sys.py/UI/title_bar.py
@@ -13,12 +13,12 @@ import alsaaudio
##local import
from constants import ICON_TYPES,Width,Height
-from fonts import fonts
from icon_item import IconItem
from multi_icon_item import MultiIconItem
from icon_pool import MyIconPool
from lang_manager import MyLangManager
-from util_funcs import midRect,SwapAndShow,SkinMap
+from util_funcs import midRect,SwapAndShow
+from skin_manager import MySkinManager
from widget import Widget
from config import Battery
@@ -26,7 +26,7 @@ from libs.roundrects import aa_round_rect
from libs.DBUS import is_wifi_connected_now,wifi_strength
-icon_base_path = SkinMap("gameshell/titlebar_icons/")
+icon_base_path = MySkinManager.GiveIcon("gameshell/titlebar_icons/")
class TitleBar(Widget):
_Width = Width
_Height = 25
@@ -259,7 +259,7 @@ class TitleBar(Widget):
round_corners._MyType = ICON_TYPES["STAT"]
round_corners._Parent = self
- round_corners._ImgSurf = MyIconPool._Icons["roundcorners"]
+ round_corners._ImgSurf = MyIconPool.GiveIconSurface("roundcorners")
round_corners.Adjust(0,0,10,10,0)
self._Icons["round_corners"] = round_corners
@@ -299,13 +299,14 @@ class TitleBar(Widget):
self._Title = title
cur_time = datetime.now().strftime("%H:%M")
- time_text_size = fonts["varela12"].size(cur_time)
+ time_text_font = MySkinManager.GiveFont("varela12")
+ time_text_size = time_text_font.size(cur_time)
title_text_size = MyLangManager.TrFont("varela16").size(title)
self._CanvasHWND.blit(MyLangManager.TrFont("varela16").render(title,True,self._SkinManager.GiveColor("Text")),midRect(title_text_size[0]/2+self._LOffset,
title_text_size[1]/2+(self._BarHeight-title_text_size[1])/2,
title_text_size[0],title_text_size[1],Width,Height))
- self._CanvasHWND.blit( fonts["varela12"].render(cur_time,True,self._SkinManager.GiveColor("Text")),midRect(Width-time_text_size[0]/2-self._ROffset,
+ self._CanvasHWND.blit( time_text_font.render(cur_time,True,self._SkinManager.GiveColor("Text")),midRect(Width-time_text_size[0]/2-self._ROffset,
time_text_size[1]/2+(self._BarHeight-time_text_size[1])/2,
time_text_size[0],time_text_size[1],Width,Height))
diff --git a/sys.py/UI/untitled_icon.py b/sys.py/UI/untitled_icon.py
index c7f2b70..978edaf 100644
--- a/sys.py/UI/untitled_icon.py
+++ b/sys.py/UI/untitled_icon.py
@@ -11,12 +11,11 @@ from datetime import datetime
import base64
from beeprint import pp
-from util_funcs import midRect, SkinMap
-from fonts import fonts
+from util_funcs import midRect
from skin_manager import MySkinManager
-BlankPng = SkinMap("gameshell/blank.png") # 80x80
+BlankPng = MySkinManager.GiveIcon("gameshell/blank.png") # 80x80
## use blank circle as bg, Two alpha As Icon Label
#Upper and Lower
@@ -28,7 +27,7 @@ class UntitledIcon(object):
_Height = 80
_Words = ["G", "s"]
- _FontObj = fonts["varela40"]
+ _FontObj = MySkinManager.GiveFont("varela40")
_BG = None # initial surface
diff --git a/sys.py/UI/util_funcs.py b/sys.py/UI/util_funcs.py
index 68262bf..f913516 100644
--- a/sys.py/UI/util_funcs.py
+++ b/sys.py/UI/util_funcs.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-
+import platform
import pygame
import os
import subprocess
@@ -13,27 +13,6 @@ import string
from Xlib import X,display
import config
-def SkinMap(orig_file_or_dir):
- DefaultSkin = "default"
-
- #doing a wrapper for items under /home/cpi/apps/Menu/*, to be like Menu/GameShell/*
- if orig_file_or_dir.startswith("/home/cpi/apps/Menu"):
- orig_file_or_dir = orig_file_or_dir.replace("/home/cpi/apps/Menu/","../Menu/GameShell/")
-
- if orig_file_or_dir.startswith(".."):
- ret = orig_file_or_dir.replace("..","../skin/"+config.SKIN)
- if FileExists(ret) == False:
- ret = orig_file_or_dir.replace("..","../skin/"+DefaultSkin)
- else:
- ret = "../skin/"+config.SKIN+"/sys.py/"+orig_file_or_dir
- if FileExists(ret) == False:
- ret = "../skin/"+DefaultSkin+"/sys.py/"+orig_file_or_dir
-
- if FileExists( ret ):
- return ret
- else: ## if not existed both in default or custom skin ,return where it is
- return orig_file_or_dir
-
def get_git_revision_hash():
return subprocess.check_output(['git', 'rev-parse', 'HEAD'])
@@ -131,3 +110,14 @@ def DrawText(canvas,text, x,y,width,height,canWidth,canHeight,fontObj):# text fo
def SwapAndShow():
pygame.display.update()
+
+def ArmSystem(cmd):
+ if "arm" not in platform.machine():
+ return
+ os.system(cmd)
+
+def InGameShell():
+ if "arm" not in platform.machine():
+ return True
+ else:
+ return False
diff --git a/sys.py/config.py b/sys.py/config.py
index e5184a3..5b12eb1 100644
--- a/sys.py/config.py
+++ b/sys.py/config.py
@@ -1,4 +1,7 @@
# -*- coding: utf-8 -*-
+import os
+import platform
+from UI.util_funcs import FileExists,ArmSystem
CurKeySet = "GameShell" ## >>> PC or GameShell <<<
@@ -10,11 +13,13 @@ Battery = "/sys/class/power_supply/axp20x-battery/uevent"
MPD_socket = "/tmp/mpd.socket"
-UPDATE_URL="https://raw.githubusercontent.com/clockworkpi/CPI/master/launcher_ver.json"
+UPDATE_URL="https://raw.githubusercontent.com/clockworkpi/CPI/master/launcher_ver0.4.json"
-VERSION="stable 1.24"
+VERSION="stable 1.25"
-SKIN="default"
+SKIN=None
+
+ButtonsLayout="xbox"
## three timer values in seconds: dim screen, close screen,PowerOff
## zero means no action
@@ -26,5 +31,47 @@ PowerLevels["balance_saving"] = [40,0,0]
PowerLevel = "balance_saving"
+def PreparationInAdv():
+ global SKIN,ButtonsLayout
+ global PowerLevel
+
+ if SKIN != None:
+ return
+
+ SKIN= "../skin/default"
+
+ if FileExists("%s/.gameshell_skin" % os.path.expanduser('~')) == True:
+ with open("%s/.gameshell_skin" % os.path.expanduser('~'),"r") as f:
+ gameshell_skin = f.read()
+
+ gameshell_skin = gameshell_skin.strip()
+ SKIN= gameshell_skin
+
+ if FileExists(".buttonslayout") == True:
+ with open(".buttonslayout") as f:
+ btnlayout = f.read()
+
+ btnlayout = btnlayout.strip()
+ ButtonsLayout = btnlayout
+ if ButtonsLayout != "xbox" and ButtonsLayout != "snes":
+ ButtonsLayout = "xbox"
+
+ if FileExists(".powerlevel") == False:
+ os.system("touch .powerlevel")
+
+ with open(".powerlevel","r") as f:
+ powerlevel = f.read()
+
+ powerlevel = powerlevel.strip()
+ if powerlevel != "":
+ PowerLevel = powerlevel
+ if powerlevel != "supersaving":
+ ArmSystem("sudo iw wlan0 set power_save off >/dev/null")
+ else:
+ ArmSystem("sudo iw wlan0 set power_save on > /dev/null")
+ else:
+ ArmSystem("sudo iw wlan0 set power_save off >/dev/null")
+
+PreparationInAdv()
##sys.py/.powerlevel
diff --git a/sys.py/langs/03_简体中文.ini b/sys.py/langs/03_简体中文.ini
index 69d6c0b..48f29e3 100644
--- a/sys.py/langs/03_简体中文.ini
+++ b/sys.py/langs/03_简体中文.ini
@@ -106,3 +106,8 @@ Music Library=乐库
Play/Pause=播放/暂停
my favorite music=我的音乐库
Check Update=检查更新
+Switch to LauncherGo=切换至LauncherGo
+GPU driver switch=切换GPU驱动
+Network gateway switch=切换网关
+Rebooting to LauncherGo=正在重启至LauncherGo...
+Awaiting Input=等待输入中...
diff --git a/sys.py/run.py b/sys.py/run.py
index f2143a8..33e5995 100644
--- a/sys.py/run.py
+++ b/sys.py/run.py
@@ -1,9 +1,12 @@
# -*- coding: utf-8 -*-
-import platform
+
import dbus
import dbus.service
import sys
import commands
+import logging
+import errno
+
from wicd import misc
##misc.to_bool
##misc.misc.noneToString
@@ -21,7 +24,7 @@ import pygame
from sys import exit
import os
-from beeprint import pp
+#from beeprint import pp
########
if getattr(dbus, 'version', (0, 0, 0)) < (0, 80, 0):
import dbus.glib
@@ -29,10 +32,10 @@ else:
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
-
+import config
#local UI import
-from UI.constants import Width,Height,bg_color,icon_width,icon_height,DT,RUNEVT,RUNSYS,ICON_TYPES,POWEROPT,RESTARTUI,RUNSH
-from UI.util_funcs import ReplaceSuffix,FileExists, ReadTheFileContent,midRect,color_surface,SwapAndShow,GetExePath,X_center_mouse
+from UI.constants import Width,Height,icon_width,icon_height,DT,RUNEVT,RUNSYS,ICON_TYPES,POWEROPT,RESTARTUI,RUNSH
+from UI.util_funcs import ReplaceSuffix,FileExists, ReadTheFileContent,midRect,color_surface,SwapAndShow,GetExePath,X_center_mouse,ArmSystem
from UI.page import PageStack,PageSelector,Page
from UI.label import Label
from UI.icon_item import IconItem
@@ -43,10 +46,9 @@ from UI.main_screen import MainScreen
from UI.above_all_patch import SoundPatch
from UI.icon_pool import MyIconPool
from UI.createby_screen import CreateByScreen
-
+from UI.skin_manager import MySkinManager
from libs.DBUS import setup_dbus
-import config
if not pygame.display.get_init():
pygame.display.init()
@@ -288,7 +290,36 @@ def RecordKeyDns(thekey,main_screen):
return True
return False
+
+
+
+def release_self_fds():
+ fds_flags= ["pipe","socket",".ttf"]
+ """List process currently open FDs and their target """
+ if sys.platform != 'linux2':
+ raise NotImplementedError('Unsupported platform: %s' % sys.platform)
+
+ ret = {}
+ base = '/proc/self/fd'
+ for num in os.listdir(base):
+ path = None
+ try:
+ path = os.readlink(os.path.join(base, num))
+ except OSError as err:
+ # Last FD is always the "listdir" one (which may be closed)
+ if err.errno != errno.ENOENT:
+ raise
+ ret[int(num)] = path
+ for key in ret:
+ if ret[key] != None and isinstance(ret[key], str):
+ for i in fds_flags:
+ if i in ret[key]:
+ os.close(key)
+ break
+ return ret
+
+
def event_process(event,main_screen):
global sound_patch
global everytime_keydown
@@ -312,10 +343,19 @@ def event_process(event,main_screen):
pygame.quit()
gobject_main_loop.quit()
os.chdir( GetExePath())
- exec_app_cmd = "cd "+os.path.dirname(event.message)+";"
+
+ endpos = len(event.message)
+ space_break_pos = endpos
+ for i in range(0,endpos):
+ if event.message[i] == "/" and event.message[i-1] == " " and i > 6:
+ space_break_pos = i-1
+ break
+
+ exec_app_cmd = "cd "+os.path.dirname(event.message[:space_break_pos])+";"
exec_app_cmd += event.message
exec_app_cmd += "; sync & cd "+GetExePath()+"; exec python "+myscriptname
print(exec_app_cmd)
+ release_self_fds()
os.execlp("/bin/sh","/bin/sh","-c", exec_app_cmd)
os.chdir( GetExePath())
os.exelp("python","python"," "+myscriptname)
@@ -330,10 +370,18 @@ def event_process(event,main_screen):
pygame.quit()
gobject_main_loop.quit()
os.chdir( GetExePath())
- exec_app_cmd = "cd "+os.path.dirname(event.message)+";"
+ endpos = len(event.message)
+ space_break_pos = endpos
+ for i in range(0,endpos):
+ if event.message[i] == "/" and event.message[i-1] == " " and i > 6:
+ space_break_pos = i-1
+ break
+
+ exec_app_cmd = "cd "+os.path.dirname(event.message[:space_break_pos])+";"
exec_app_cmd += event.message
exec_app_cmd += "; sync & cd "+GetExePath()+"; exec python "+myscriptname
print(exec_app_cmd)
+ release_self_fds()
os.execlp("/bin/sh","/bin/sh","-c", exec_app_cmd)
os.chdir( GetExePath())
os.exelp("python","python"," "+myscriptname)
@@ -344,6 +392,7 @@ def event_process(event,main_screen):
os.chdir(GetExePath())
exec_app_cmd = " sync & cd "+GetExePath()+"; exec python "+myscriptname
print(exec_app_cmd)
+ release_self_fds()
os.execlp("/bin/sh","/bin/sh","-c", exec_app_cmd)
os.chdir( GetExePath())
os.exelp("python","python"," "+myscriptname)
@@ -352,6 +401,7 @@ def event_process(event,main_screen):
pygame.quit()
gobject_main_loop.quit()
exec_app_cmd = event.message +";"
+ release_self_fds()
os.execlp("/bin/sh","/bin/sh","-c", exec_app_cmd)
sys.exit(-1)
return
@@ -521,7 +571,7 @@ def big_loop():
sound_patch.Init()
#pp(main_screen._Pages[0],True,6)
- screen.fill(bg_color)
+ screen.fill(MySkinManager.GiveColor("White"))
main_screen.Draw()
main_screen.SwapAndShow()
@@ -537,27 +587,6 @@ def big_loop():
gobject_loop()
-def PreparationInAdv():
-
- if "arm" not in platform.machine():
- return
-
- if FileExists(".powerlevel") == False:
- os.system("touch .powerlevel")
-
- with open(".powerlevel","r") as f:
- powerlevel = f.read()
-
- powerlevel = powerlevel.strip()
- if powerlevel != "":
- config.PowerLevel = powerlevel
- if powerlevel != "supersaving":
- os.system("sudo iw wlan0 set power_save off >/dev/null")
- else:
- os.system("sudo iw wlan0 set power_save on > /dev/null")
- else:
- os.system("sudo iw wlan0 set power_save off >/dev/null")
-
###MAIN()###
if __name__ == '__main__':
@@ -573,8 +602,7 @@ if __name__ == '__main__':
pygame.event.set_allowed([pygame.KEYDOWN,pygame.KEYUP,RUNEVT,RUNSYS,POWEROPT,RESTARTUI,RUNSH])
pygame.key.set_repeat(DT+DT*6+DT/2, DT+DT*3+DT/2)
-
-
+
MyIconPool.Init()
setup_dbus()
@@ -591,8 +619,6 @@ if __name__ == '__main__':
exit()
- PreparationInAdv()
-
crt_screen = CreateByScreen()
crt_screen.Init()
crt_screen._HWND = screen